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

news/2025/4/22 2:39:40

通过一些问题来讨论 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 状态


诚恳欢迎大家提出意见

......(待续未完


https://dhexx.cn/news/show-5497340.html

相关文章

阶段性使用总结-通义灵码

序言 前段时间用通义灵码,参加了下数字中国闽江流域的比赛。https://www.dcic-china.com/competitions/10173 最后成绩一般般,106名,大概有2000多人参加这题目,估计有一堆小号。 按照下面这个思路建模的,迭代了大概15…

js原型链污染

JavaScript 是一门非常灵活的语言,与 PHP 相比起来更加灵活。除了传统的 SQL 注入、代码执行等注入型漏洞外,也会有一些独有的安全问题,比如今天要说这个原型链污染。本篇文章就让我们来学习一下 NodeJS 原型链与原型链污染的原理。 什么是原…

17:00开始面试,17:08就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到4月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…

Formality:Bug记录

相关阅读 Formalityhttps://blog.csdn.net/weixin_45791458/category_12841971.html?spm1001.2014.3001.5482 本文记录博主在使用Synopsys的形式验证工具Formality中遇到的一个Bug。 Bug复现 情况一 // 例1 module dff (input clk, input d_in, output d_out …

Pytorch 第十五回:神经网络编码器——GAN生成对抗网络

Pytorch 第十五回:神经网络编码器——GAN生成对抗网络 本次开启深度学习第十五回,基于Pytorch的神经网络编码器。本回分享的是GAN生成对抗网络。在本回中,通过minist数据集来分享如何建立一个GAN生成对抗网络。接下来给大家分享具体思路。 本…

ffmpeg命令(一):信息查询命令

媒体文件信息查看 命令说明ffmpeg -i input.mp4查看媒体文件基本信息(封装格式、编解码器、时长等)ffprobe input.mp4使用专用工具查看详细信息ffprobe -v error -show_format -show_streams input.mp4输出格式和流的详细信息ffprobe -v quiet -print_f…

蓝桥杯嵌入式十六届赛前复习总结与准备

一.软件使用 赛点是没有网络的,要自己下载原件与数据包,这里给大家一个演示 在updater Settings这里设置文件存放位置,为了方便查找和提交文件,建议在桌面建立一个文件夹来存放。 把赛点的芯片包复制到创建的文件夹然后解压缩 之…

大模型量化实战:GPTQ与AWQ量化方案对比与部署优化

一、引言 近年来,大型语言模型(LLMs)在自然语言处理领域取得了突破性进展,展现出惊人的能力。然而,LLMs 的巨大参数量和计算需求带来了高昂的部署成本和推理延迟,限制了它们在资源受限环境(如边…

D3路网图技术文档

在本文档中,我们将探讨如何使用 D3.js,结合 SVG(可缩放矢量图形)和 Canvas,来实现高效、交互性强的路网图效果。D3.js 是一个强大的 JavaScript 数据可视化库,可以基于数据驱动文档对象模型(DOM…

RCEP框架下eBay日本站选品战略重构:五维解析关税红利机遇

2024年RCEP深化实施背景下,亚太跨境电商生态迎来结构性变革。作为协定核心成员的日本市场,其跨境电商平台正经历新一轮价值重构。本文将聚焦eBay日本站,从政策解读到实操路径,系统拆解跨境卖家的战略机遇。 一、关税递减机制下的…