6. TCP连接管理

创建连接 - 三次握手


过程

  1. 客户端选择一个seq数字,tcp头部标志位SYN位置为1。本次请求内不能携带发送数据。
  2. 服务端收到SYN建立连接请求,申请TCP缓冲区,初始化一个服务端的seq序列号。回复一个SYN ack数据包。
  3. 客户端收到SYN ack后,给服务端回复一个SYN ack的ack。本次数据包中就可以携带数据了。

注意: SYN及FIN也会占用一个seq序列号空间

三次握手成功后,即连接已经建立成功了。客户端和服务端可以在这个连接上相互发送数据。数据发送完成后,需要4次挥手断开连接。

断开连接 - 四次挥手


过程
任何一方都可以主动断开连接,此处以客户端主动断开为例。

  1. 客户端发送,tcp首部标志位fin为1的fin断开连接请求包。
  2. 服务端收到FIN包后,对FIN包做ack响应。
  3. 若服务端还有数据需要向客户端传递,继续按照正常流程向客户端传递数据。
  4. 若服务端以没有数据需要向客户端再次传递,也会向客户端发送一个fin数据包。
  5. 客户端收到finFIN后,给服务端ack响应。
  6. 服务端收到ack包后,即断开连接。

TCP状态转换图

状态流转图

服务端状态流转图

客户端状态流转图

请求流程状态图

TIME_WAIT状态

TIME_WAIT状态也称为 2 MSL等待状态。每个具体 T C P实现必须选择一个报文段最大生存时间M S L(Maximum Segment Lifetime)。它是任何报文段被丢弃前在网络内的最长时间。我们知道这个时间是有限的,因为 T C P报文段以I P数据报在网络内传输,而 I P数据报则有限制其生存时间的TTL字段。
主要作用

  1. 可靠的实现TCP全双工连接终止。
  2. 允许老的分节在网络中消逝。

你可能感兴趣的:(6. TCP连接管理)