网络编程基础(二)

网络编程基础

TCP 协议的特点

       传输层协议主要有两个:TCP 协议和 UDP 协议。TCP 协议相对于 UDP 协议的特点是:面向连接、字节流和可靠传输。

       使用 TCP 协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP 连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。

       TCP 协议的这种连接是一对一的,所以基于广播和多播(目标是多个主机地址)的应用程序不能使用 TCP 服务,而无连接协议 UDP 则非常适合于广播和多播。

       TCP 协议字节流服务和 UDP 数据报服务的这种区别对应到实际编程中则体现为通信的双方是否必须执行相同次数的读、写操作(当然,这只是表现形式)。当发送端应用程序连续执行多次写操作时,TCP 模块现将这些数据放入 TCP 发送缓冲区中。当 TCP 模块真正开始发送数据时,发送缓冲区中这些等待发送的数据可能被封装成一个或多个 TCP 报文段发出。因此,TCP 模块发送出的 TCP 报文段的个数和应用程序执行的写操作次数之间没有固定的数量关系。

       当接收端收到一个或多个 TCP 报文段后,TCP 模块将它们携带的应用程序按照 TCP 报文段的序号依次放入 TCP 接收缓冲区中,并通知应用程序读取数据。接收端应用程序可以一次性将 TCP 接收缓冲区中的数据全部读出,也可以分多次读取,这取决于用户指定的应用程序读缓冲区的大小。因此,应用程序执行的读操作次数和 TCP 模块接收到的 TCP 报文段的个数之间也没有固定的数量关系。 

       综上所述,发送端执行的写操作次数和接收端执行的读操作次数之间没有任何数量关系,这就是字节流的概念:应用程序对数据的发送和接受是没有边界限制的。


TCP 的头部结构

       TCP 头部信息出现在每个 TCP 报文段中,用于指定通信的源端端口,目的端端口,管理 TCP 连接等。

       TCP 头部结构如图所示,其中诸多的字段为管理 TCP 连接和控制数据流提供了足够的信息。

       16 位端口号(port number):告知主机该报文段是来自哪里(源端口)以及传给哪个上层协议或应用程序(目的端口)的。进行 TCP 通信时,客户端通常使用系统自动选择的临时端口号,而服务器则使用知名服务端口号。

       32 位序号(sequence number):一次 TCP 通信(从 TCP 连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。

       32 位确认号(ACK number):用作对另一方发送来的 TCP 报文段的响应,其值是收到的 TCP 报文段的序号值加 1。


TCP 是面向连接的服务,下面是 TCP 连接的三次握手建立和四次挥手关闭过程:

      (1)三次握手创建连接

       第一个 TCP 报文段包含 SYN 标志,因此它是一个同步报文段,即客户端向服务器发起连接请求。

       第二个 TCP 报文段也是同步报文段,表示服务器同意与客户端建立连接,同时它也对第一个同步报文段进行了确认。

       第三个 TCP 报文段是客户端对第二个同步报文段的确认,至此,TCP 连接就建立起来了。建立 TCP 连接的这三个步骤被称为 TCP 的三次握手。

      (2)四次挥手断开连接

       第一个 TCP 报文段包含 FIN 标志,因此它是一个结束报文段,即客户端要求关闭连接。

       第二个 TCP 报文段是服务器用来确认第一个结束报文段的。

       第三个 TCP 报文段是服务器自己的结束报文段。

       第四个 TCP 报文段是客户端对服务器发出的结束报文段的确认。

       实际上,仅用于确认目的的确认报文段 2 是可以省略的,因为结束报文段 3 也携带了该确认信息。确认报文段 2 是否出现在连接断开的过程中,取决于 TCP 的延迟确认特性。


TCP 三次握手和四次挥手状态图

       TIME_WAIT 状态出现在主动发起断开链接请求的一端

       TIME_WAIT 状态的意义:

           (1)保证能够可靠地终止 TCP 链接

           (2)保证迟来的数据报能被识别并丢弃


TCP 的状态转移过程图

 

       红色表示客户端发起链接;

       绿色表示服务器接收了链接;

       蓝色表示主动断开链接的过程;

       紫色表示被动断开链接的过程。


猜你喜欢

转载自blog.csdn.net/ylh_yanlinghui/article/details/78591123