注册网站大全,seozhun,门户网站开发工具软件,网站建设现在主要做些什么简介
接前文 协议簇#xff1a;TCP 解析: 建立连接#xff0c; 我们这篇文章来看看 TCP 连接断开的过程#xff0c;也就是众所周知的”四次挥手“的具体流程.
系列文章
协议簇#xff1a;TCP 解析#xff1a;基础 协议簇#xff1a;TCP 解析#xff1a;建立连接 协议…简介
接前文 协议簇TCP 解析: 建立连接 我们这篇文章来看看 TCP 连接断开的过程也就是众所周知的”四次挥手“的具体流程.
系列文章
协议簇TCP 解析基础 协议簇TCP 解析建立连接 协议簇TCP 解析连接断开 协议簇TCP 解析Sequence Number 协议簇TCP 解析数据传输
断开连接
通常情况 MSL: Maximum Segment Lifetime.
这里我们假定 A 端为关闭连接的发起方.
初始状态下通信双方均处于连接状态.某一时刻A 端发起断开连接请求(上层客户通过调用 TCP 的 Close 接口). 发起断开连接请求时A端发送 FIN 包, 之后A端的TCP 连接状态切换为 FIN-WAIT-1 等待对方回应对应的 ACK。 从此刻此A 端发送的任何数据包都会被 B端拒绝但是与此同时 A 端可以正常接收 B端发送的数据 处在这个状态的 A 端会重传FIN以及之前的数据包直到接收到对方的 ACK.B端在收到 FIN 包后回复 ACK 确认收到 A 端发送的 FIN包并把连接状态切换为 CLOSE-WAIT。 A 端收到对应的 ACK 之后状态切换为 FIN-WAIT-2. B 端在收到 A 端的 ACK 之后不会立马发送 FIN 包. 只有当上层用户调用 TCP Close 接口时才会发送 FIN 包到 A 端.B 端收到 A 端的 FIN 包之后可以继续发送数据知道某一时刻关闭 TCP。同A端一样发送 FIN 包给 A端然后等待 A 端回复 ACK。状态切换为 LAST-ACK。A 端收到 B 端发送的 FIN 后状态切换为 TIME-WAIT并回复响应的 ACK。B 端收到 ACK 之后状态切换为 CLOSED等待 2 MSL 时间houA端状态变为 CLOSED。c 此时当前 TCP 已经完全关闭.
我们再使用 wireshark 抓包看看这个流程 上图中的四条记录便对应于上面流程中的 2-5 项. 至于数据包中各个字段的值这里我们不关注.
双发同时发起关闭连接 初始状态下通信双方均处于连接状态.某一时刻双发均发起断开连接请求. 假设A 端发送了 FIN且还未收到 B 端发送的 FIN。 B端也发送了 FIN且还未收到 A端发送的FIN. 发送完FIN之后双方的状态均切换为 FIN-WAIT-1 稍后双发均收到了对方发送的 FIN 需要回复对应的 ACK 给对方 收到对方的 ACK 之后双方状态切换为 CLOSING 状态.此时双发的 FIN 已经交换完成只需要回复响应的 ACK告知对方对方对方发送的 ACK对应于之前发送的 FIN己方已经收到便可.稍后双方均进入 TIME-WAIT 状态. 在经过 2 MSL 时间后双方均进入 CLOSED状态。c 此时当前 TCP 已经完全关闭.
END!!!