概述

  1. 网络层次:网络由下往上依次为, 物理层、数据链路层、网络层、传输层、会话层、表明层和运用层。

  2. IP 协议对应网络层、TCP 协议对应传输层、而 HTTP 协议对应运用层。

  3. Socket 则是对 TCP/IP 协议的封装,针对程序员层面上的运用。

  4. TCP/IP 协议是传输层协议,首要处理数据怎么在网络中传输。

  5. HTTP 是运用层协议,首要处理怎么包装数据。

  1. 在进行网络传输数据时,假如只运用传输层(TCP/IP)的协议,而没用运用层,便无法识别数据内容。

  2. Socket是针对传输层的封装,严厉上并不是一种协议,而是一个 API。其实为了方便运用 TCP/IP 协议而做出的笼统封装,然后形成了诸如 create、listen、connect、accept、send、read、write 这样的外用接口。

  3. 详细的说。TCP/IP 是一个协议栈。就像操作体系的运转机制一样,有必要要详细完成,一起还要对外供给体系级的操作接口。但为了供开发人员做网络开发,还需求供给所开发的运用接口,为此对此封装,呈现了 Socket 的编程接口。

HTTP

HTTP 是一个运用层面向对象的协议,即可称“超文本传输协议”,是基于恳求与呼应,且无呼应的协议。常基于 TCP 的衔接办法。大部分 Web 开发都是构建在 http 协议上的 web 运用。

HTTP 有以下特色:

  • 支持客户端和服务器模式;
  • 简略快递:客户端向服务器恳求数据时,只需求供给恳求办法及恳求路径,简略快速。常用的恳求办法有PUT,DELETE,POST,GET,HEAD,因为 GET 和 POST 能够完成所有操作,所以运用更为广泛;
  • 运用灵活:答应传输任何类型的数据对象,数据类型由 Content-Type 加以符号,运用灵活;
  • 无衔接:约束每次衔接只处理一个恳求,当服务器处理客户端恳求后,并返回成果后,就断开衔接,可完成无衔接的功用;
  • 无状况:http 协议对处理过的恳求无回忆功用,假如恳求从前的数据,则需求重传,有或许导致每次传输的数据量较大,但在服务器不需求从前的恳求时,反映速度很快。

常用恳求办法描绘:

  1. GET 恳求:从服务器得到数据,功率高,数据能够被自动缓存起来。但有必定约束,对长度有所约束,一般在2~8k 之间。

  2. POST 恳求:向服务器发送数据,也能够获得服务器处理之后的数据成果,功率不如 GET 恳求,POST 恳求的数据不能被缓存,每次刷新后都需求从头提交表单。常用于用户隐私数据的传递。

  3. HEAD 恳求:一般用在下载文件之前,获取长途服务器的文件信息,相比较于 GET 恳求,则不会下载文件数据,只获得呼应头信息。一般运用HEAD恳求的意图是提前告知用户下载文件的信息,由用户承认是否需求下载此文件,最好发送同步恳求。

TCP 衔接进程

TCP 衔接工程的三次握手:

第一次握手:客户端发送 syn 包(syn=j)到服务器,进入 syn_send 状况,等候服务器承认;

第2次握手:服务器收到 syn 包(syn=j+1),需承认客户的 syn,一起自己的一个 ack 包(ack=k),即 SYN+ACK 包,此刻服务器进入 syn_recv 状况;

第三次握手:客户端收到 syn+ack 包,向服务器发送承认包 ack(ack=k+1),此刻发送结束,客户端和服务器都进入 established 状况,完成三次握手。

  1. 在传送包的进程中,包里并不包括数据,三次握手结束后,才会开端正式传送数据。

  2. 理想状况下,两边中只需一方不自动断开 TCP 衔接的恳求,那么 TCP 衔接状况一直坚持。

  3. 如想断开 TCP 衔接,两边都能够自动发起断开恳求,断开的进程则需求阅历四次握手的阅历,直到承认断开 TCP 衔接。

Socket 树立网络衔接的步骤

树立 Socket 衔接,只需需求一对套接字,其间一个运转于客户端,称为 ClientSocket,另一个运转于服务端,称为 ServerSocket。

Socket 的网络衔接其实就是这一对对套接字的衔接。

套接字的衔接工程:

1、服务器监听:服务器处于等候衔接的状况,其套接字并不定位详细的客户端的套接字,这个等候状况下,去实时监测网络状况,等候客户端的衔接恳求。

2、客户端恳求:客户端的套接字提出衔接恳求(有必要供给衔接服务器的套接字的描绘,指出服务端套接字的地址和端口号),要衔接服务器端的套接字。

3、衔接承认:当服务器端套接字监听到客户端套接字的衔接恳求时,就呼应客户端套接字的恳求,树立一个新的线程,把服务器套接字的描绘发送给客户端,一旦客户端承认了此描绘,两边就正式树立衔接联系。而服务端套接字持续处于监听状况,持续接受其他客户端套接字的衔接恳求。

TCP 和 UDP 的差异

TCP 中文名为传输控制协议,UDP 中文名为用户数据报协议。两者的差异为:

  1. TCP 是面向衔接的服务。供给1对1的牢靠通讯,对传输进程中流失的数据包会恢复。虽因为网络的原因或许呈现多少次握手不牢靠的衔接,但 TCP 的三次握手则在最大程度上保证了牢靠的衔接。类似打电话的进程。

  2. UDP 是面向无衔接的服务。供给1对1或对多的无衔接不牢靠服务。UDP 传输数据前并不和对方树立衔接,非常高傲,对接纳到的数据也不发送承认信号,导致发送端并不知道数据是否接纳成功,并不用重发,所以说 UDP 是一种无衔接,不牢靠的数据传输协议。尽管相比 TCP 不是很牢靠,但正因为这样,在传送小数据的时候速率更高,实时性更好,类似发短信。

MSN 选用的是 TCP 传输协议,而 QQ 传输则选用 DUP 传输协议,体会到 MSN 在传输文件上明显比 QQ 慢。但也不是说 QQ 的这种 DUP 传输数据没有安全保障,程序员能够对 UDP 的数据收发进行验证。