TCP:TCP连接的建立与终止

发布于:2024-06-30 ⋅ 阅读:(13) ⋅ 点赞:(0)


T C P是一个面向连接的协议。无论哪一方向另一方发送数据之前,都必须先在双方之间建立一条连接。本文将详细讨论一个T C P连接是如何建立的以及通信结束后是如何终止的。
如何使用抓包工具 wireshark

建立连接

为了建立一个TCP连接:

第一次握手

  1. 请求端发送一个S Y N段指明连接的服务器的端口,以及初始序号(ISN)。这个SYN段为报文段1。
    使用抓包工具得到以下内容,可以看到:
    1. 指定了源端口和目标端口,什么?怎么没有IP地址,IP地址在IP首部呢!
    2. 序号为 1514758884,序号并不从0开始,而是生成ISN序号为什么不从0开始?
    3. SYN=1 表明这是一个连接请求或连接接受报文
    4. 窗口大小声明为 64240
      在这里插入图片描述

第二次握手

  1. 服务器发回包含服务器的初始序号的S Y N报文段(报文段2)作为应答。同时,将确认
    序号设置为客户的I S N加1以对客户的S Y N报文段进行确认。一个S Y N将占用一个序号。
    使用抓包工具得到以下内容,可以看到:
    1. 指定了源端口(22)和目标端口(60378)
    2. 序号为 3444481880
    3. ACK=1,表明确认号ack有效,ack=151475885,即发来的报文序号1514758884+1
    4. SYN=1 表明这是一个连接请求或连接接受报文
    5. 窗口大小声明为64240
      在这里插入图片描述

第三次握手

  1. 客户必须将确认序号设置为服务器的I S N加1以对服务器的S Y N报文段进行确认(报文
    段3)。
    使用抓包工具得到以下内容,可以看到:
    1. 同样指定了源端口和目标端口
    2. 序号为 1514758885
    3. ACK=1,表明确认号ack有效,ack=3444481881,即发来的报文序号3444481880+1
    4. SYN=0 表明这不是一个连接请求或连接接受报文,服务器连接请求和连接接受发生在第二次握手时。
    5. 窗口大小声明为513,为什么这么小呢?这个流量控制有关。
      在这里插入图片描述

一个整体的流程图:
在这里插入图片描述

终止连接

建立一个连接需要三次握手,而终止一个连接要经过 4次挥手。这由T C P的半关闭(h a l f - c l o s e)造成的。一个T C P连接是全双工(即数据在两个方向上能同时传递),因此每个方向必须单独地进行关闭。
如图,为抓包工具显示内容:这就是四次挥手的过程
在这里插入图片描述

第一次挥手

  1. 我从服务器进行断开连接的,故而先由服务器主动关闭连接。当一方完成数据传输并想要关闭连接时,它会发送一个FIN(结束)标志的数据包。这个FIN标志表示发送方已经完成了数据发送,但仍然可以接收数据。
    在这里插入图片描述

第二次挥手

  1. 收到FIN标志的一方会在处理完剩余数据后,再发送一个带有ACK(确认)标志的数据包以确认收到了FIN。
    在这里插入图片描述

第三次挥手

  1. 此时,如果应用程序不调用c l o s e而调用s h u t d o w n,且第2个参数值为1,则socket的A P I支持半关闭。显然,这不是一个半关闭。所以本地主机发送一个FIN(结束)标志的数据包至服务器。
    在这里插入图片描述

TIME_WAIT 状态

T I M E _ WA I T状态也称为2 M S L(报文段最大生存时间,Maximum Segment Lifetime)等待状态。这个时间是有限的,因为 T C P报文段以I P数据报在网络内传输,而I P数据报则有限制其生存时间的T T L(Time To Live)字段。

  • 确保数据可靠传输:time_wait状态确保了所有可能还在网络中徘徊的数据包被接收或丢弃,避免新连接接收旧数据,保证数据的准确性和完整性
  • 防止旧连接的干扰:确保在相同的源地址、目标地址、源端口和目标端口的新连接建立之前,旧的连接完全关闭,避免可能的数据混乱

第四次挥手

  1. 服务器确认(stream 主机->服务器 关闭连接)
    在这里插入图片描述
    一个完整的流程图:
    在这里插入图片描述

连接建立超时


网站公告

今日签到

点亮在社区的每一天
去签到