当前位置: 首页 > news >正文

计算机网络 - 四次挥手相关问题

通过一些问题来讨论 TCP 的四次挥手断开连接

  • 说一下四次挥手的过程?
  • 为什么需要四次呢?
  • time-wait干嘛的,close-wait干嘛的,在哪一个阶段?
  • 状态CLOSE_WAIT在什么时候转换成下一个状态呢?
  • 为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?
  • 服务端主动发起关闭还是客户端主动发起关闭TCP?

1. 说一下四次挥手的过程?

首先要说明,通信双发都可以主动断开连接,下面以客户端主动断开连接为例(后面几个问题照样):

第一次挥手,客户端发送 FIN 报文给服务端,表示不再发送数据了,但还能接收数据,报文中会指定一个序列号,客户端处于 FIN-WAIT-1 状态

第二次挥手,服务端在接收到客户端的 FIN 包后,会把客户端的序列号值 +1 作为 ACK 并发送,表示收到,此时服务端处于 CLOSE-WAIT状态。但服务端可能还有数据要发送,所以不会立即关闭发送通道

之后客户端接收到服务端发送的 ACK,进入 FIN-WAIT-2状态

第三次挥手,服务端将剩余数据发送完成后,会发送一份携带 FIN 的报文给客户端,且指定一个序列号,告诉客户端自己也不再发送数据了,服务端处于 LAST-ACK 阶段

第四次握手,客户端收到 FIN 后,就会将服务端的序列号值 +1 作为 ACK 报文回应,表示收到。客户端此时还处于 TIME-WAIT 阶段,要等待 2MSl 才会进入关闭状态,至此客户端完成连接的关闭。

服务端在收到客户端发来的 ACK报文后,就会进入关闭状态,不再接收和发送数据,至此服务端完成连接d

2. 为什么需要四次呢?

主要原因在于 TCP 是全双工通信,双方需要独立关闭各自的发送和接收通道

为什么不能和连接一样进行三次握手?

因为在客户端断开发送通道后,服务端可能还需要发送数据,不能立即关闭,所以 ACK 和 FIN 必须分开发送

3. time-wait干嘛的,close-wait干嘛的,在哪一个阶段?

需要 TIME-WAIT 状态简单说就两个原因:一个是优雅的关闭 TCP 连接,也就是尽量保证被动关闭的一端能够收到它自己发出去 FIN 报文的 ACK 确认报文。另一个是处理延迟的重复报文,避免连续两个使用相同四元组的连接,前一个的报文干扰后一个连接。以上两个目的都是由主动断开的一方在 TIME-WAIT 状态等待 2MSL 时间来保证的

第一个目的比较好理解,理论上 1MSL 的时间就足够确定被动关闭端已经接收到了 ACK 值。第二个目的的话,先等第一个 MSL 确保主动关闭端发出的最后一个 ACK 值从网络消失,再等第二个 MSL 是为了防止对端在收到这个 ACK 前的一刹那时间可能触发重传机制,等这个重传的 FIN 报文消失的时间也需要 1MSL,总共就是 2MSL

CLOSE-WAIT 状态需要的原因就是 TCP 为什么需要四次握手而不是三次握手的原因,主要就是在一二次握手后,服务端可能还有遗留的数据需要处理,也就是需要确保数据的完整性。在处理完之后会主动向客户端发送 FIN 报文,进入 LAST-ACK 状态

4. 状态CLOSE_WAIT在什么时候转换成下一个状态呢?

在服务端向客户端发送 FIN 包的时候,就会进入到 LAST-ACK状态

5. 为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?

MSL 是最长分段寿命,TIME-WAIT 状态等待 2MSL的原因有许多

因为客户端在发送完 ACK 报文后,不能确定是否到达了服务端,所以要等待 2MSL 的时间确保 ACK 可以到达服务端。如果在这个时间内 ACK 没有到达的话,则接收方会重新发送 FIN 报文

其次还能确保当前连接的所有报文都已经过期

6. 服务端主动发起关闭还是客户端主动发起关闭TCP?

都可以,主动关闭的一段会有 TIME-WAIT 状态,被动关闭的一段有 CLOSE-WAIT 状态


诚恳欢迎大家提出意见

......(待续未完

相关文章:

  • 利用IDEA开发Spark-SQL
  • 状态机编程中的事件和状态
  • nginx自编译重现gzip和chunked的现象
  • MATLAB程序实现了一个物流配送优化系统,主要功能是通过遗传算法结合四种不同的配送策略,优化快递订单的配送方案
  • 封装实用的时间选择器组件
  • YOLOv3超详细解读(三):源码解析:数据处理模块
  • Spring Boot 参数校验 Validation 终极指南
  • Open AI 使用篇
  • 从拥堵到畅行,智慧城市如何实现交通魔法?
  • 深入剖析Java中ThreadLocal原理
  • 可灵 2.0 可图 2.0 全解析:从 AI 图片到影视级视频的创作革命
  • zkmall模块商城:B2C 场景下 Vue3 前端性能优化的广度探索与实践
  • ThermoMPNN/ThermoMPNN-D 的安装及使用教程
  • Google-A2A协议全面解析:一文掌握Agent-to-Agent协议的核心与应用
  • 客户消失不配合,如何推动验收
  • 信号与系统期中复习(第一章)
  • 如何建立可复用的项目管理模板
  • 基于STM32与NB-IoT的智慧路灯远程监控系统
  • Missashe考研日记-day21
  • Daily morning reading 26
  • 人民日报和音:书写周边命运共同体建设新篇章
  • 黄山旅游:去年黄山景区累计接待进山游客492.24万人,同比增长7.6%
  • 秦洪看盘|A股缩量窄幅震荡,短线或延续有韧性、无弹性走势
  • 宋涛会见洪秀柱一行:维护台海和平稳定,扩大两岸交流合作
  • 海基会副董事长罗文嘉妄称“大陆经济像一潭死水”,国台办回应