在TCP四次挥手中,为什么客户端发送FIN后,还可以发送报文
在TCP四次挥手中,为什么客户端发送FIN后,还可以发送报文
首先回顾下四次挥手的过程。

- 第一次挥手:客户端停止发送数据,主动关闭 TCP 连接,处于
FIN_WAIT1状态,等待服务端确认。 - 第二次挥手:服务端发送 ACK 报文,表明已经收到客户端的报文了,此时服务端处于
CLOSE_WAIT状态,等待从本地用户发来的连接中断请求。此时的 TCP 处于半关闭状态,客户端到服务端的连接释放。客户端收到服务端的确认后,进入FIN_WAIT2(终止等待 2)状态,等待服务端发出的连接释放报文段。 - 第三次挥手:如果服务端也想断开连接了(没有要向客户端发出的数据),和客户端的第一次挥手一样,发送 FIN 报文,且指定一个序列号。此时服务端处于
LAST_ACK的状态,等待客户端的确认。 - 第四次挥手:客户端收到 FIN 之后,一样发送一个 ACK 报文作为应答(ack = w+1),且把服务端的序列值 +1 作为自己 ACK 报文的序号值(seq=u+1),此时客户端处于
TIME_WAIT(时间等待)状态。
注意 !!!这个时候由服务端到客户端的 TCP 连接并未释放掉,客户端需要经过时间等待计时器设置的时间 2MSL(MSL是报文在网络上可以存活的最长时间,这个值会根据实际网络情况动态变化) 后才会进入 CLOSED 状态,这样做的目的是确保服务端收到客户端发送的 ACK 报文。如果服务端在规定时间内没有收到客户端发来的 ACK 报文的话,服务端会重新发送 FIN 报文给客户端,客户端再次收到 FIN 报文之后,就知道之前的 ACK 报文丢失了,然后再次发送 ACK 报文给服务端。服务端收到 ACK 报文之后,就关闭连接了,处于 CLOSED 状态。
在第二次挥手后,TCP 处于半关闭状态,客户端到服务端的连接释放,但是第四次握手仍需客户端给服务端发送报文,所以半关闭状态和发送报文是不冲突的。因为 FIN 状态位表示发送后,当前客户端仍然会接收服务器的数据,但是不会接收他本地服务的数据(应用层的数据),所以客户端在发送 FIN 后仍然能发送 ack 是不矛盾的,因为 ack 不是本地服务的数据,是放在 tcp 头部的,而不是body中。
在TCP四次挥手中,为什么客户端发送FIN后,还可以发送报文的更多相关文章
- 被面试官问懵:TCP 四次挥手收到乱序的 FIN 包会如何处理?
摘要:收到个读者的问题,他在面试的时候,被搞懵了,因为面试官问了他这么一个网络问题. 本文分享自华为云社区<TCP 四次挥手收到乱序的 FIN 包会如何处理?>,作者:小林coding . ...
- TCP 三次握手和四次挥手中的ACK 为什么总是SYN + 1 或者 FIN +1 而不是+ 其他数值?
TCP 三次握手的时候 1.客户端 向服务端发起连接请求,这个时候客户端将发送一个SYN分节(假设其值为J),它告诉服务端我发送数据的初始序列号将是J. 2.服务端收到这个请求后,必须确认(ACK) ...
- 对四次挥手中的TIME_WAIT状态的学习
TIME_WAIT状态不必多说 是属于四次挥手中的一种特殊状态 作用有两点简单明了 不废话 (1)可靠的实现TCP全双工连接的终止 (2)允许老的重复的.迟到的分节在网络中消逝 ...
- tcp四次撒手
转自:http://www.cnblogs.com/cy568searchx/p/3711670.html 由于TCP连接是全双工的,因此每个方向都必须单独进行关闭.这个原则是当一方完成它的数据发送任 ...
- TCP四次挥手客户端关闭链接为什么要等待2倍MSL
最长报文寿命 在TCP协议中,当发送方发送释放连接报文收到确认报文后,只是在一个方向上断开了TCP连接,然后,接收方发送释放连接的报文,发送方回复确认.此时,连接还没有释放,发送方要等待2MSL(ma ...
- TCP三次握手中SYN,ACK,seq ack的含义
转至:https://www.cnblogs.com/muyi23333/articles/13841268.html 1.TCP 为什么三次握手而不是两次握手 1.防止已失效的连接请求又传送到服务器 ...
- python 网络编程(四)---UDP服务端客户端
1.服务器端 UDP服务器建立与TCP相类似,具体比较如下: 补充下,第四步:不必使用listen还有accept函数. 具体代码如下:(设置socket选项省略) import socket fro ...
- TCP四次挥手
TCP 四次挥手 TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake).客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close ...
- 解读TCP 四种定时器
TCP 是提供可靠的传输层,它使用的方法之一就是确认从另一端收到的数据.但是数据和确认都可能会丢失.TCP 通过在发送时设置一个定时器来解决这个问题.如果当定时器溢出时还没收到确认,它就会重传该数据. ...
- TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
这是一个很有意思的问题~ 首先,我们要知道TCP是全双工的,即客户端在给服务器端发送信息的同时,服务器端也可以给客户端发送信息.而半双工的意思是A可以给B发,B也可以给A发,但是A在给B发的时候,B不 ...
随机推荐
- python实现创建一个银行类,这个类实现了两个方法,第一个方法可以将用户信息写入到文件中,第二个方法可以读取文件中的用户信息出来
class bank: def user_info(self): a=input('请输入用户信息:') # 不写encoding = 'utf-8'中文会乱码 with open('info.txt ...
- 将实体类对象数据存入和读取进csv文件(可追加)
前言 最近公司一个新的项目,因为需要存储的数据很少,单独去部署一个数据库去存储该数据显然是不划算的,所以想的是通过存入csv文件中来代替存入数据库中.说干就干. 什么是csv文件 CSV代表逗号分隔值 ...
- [ABC151E] Max-Min Sums
2023-03-11 题目 题目传送门 翻译 翻译 难度&重要性(1~10):5 题目来源 AtCoder 题目算法 数学 解题思路 对于一个正数 \(x,x\in A\) 一定会有 \(C_ ...
- ES集群&kibana安装
一.elasticsearch介绍 Elasticsearch 是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful 风格接口,多数据源,自动搜索负 ...
- (2023.8.28)Hi铁布衫-CM Ver 0.001 - Cracked-writeup
Hi铁布衫-CM Ver 0.001 WriteUp 本文作者:XDbgPYG(小吧唧) 发布时间:2023年8月28日 内容概要:Hi铁布衫-CM Ver 0.001 WriteUp 收集信息 有一 ...
- jQuery Ajax执行顺序问题
代码如下: $(document).ready(function () { var res; $.ajax({ type: 'post', url: 'GridDemo.aspx/PlaceOrder ...
- [初学C#] 第二习题 : 快递跟踪信息查询
刚学C#, 折腾的一个小玩意. 熟悉和了解C#这门编程语言. 没有啥特殊意义 解锁技能 - System.Net 的 WebRequest等http请求 - Newtonsoft.Json 这个第三方 ...
- vscod 配置 morkdown 快捷键
vscod 配置 morkdown 快捷键 1.首先在根目录添加.vscode 文件夹 ️1.1 新建一个 settings.json 文件 { "[markdown]": { & ...
- [Maven] maven插件系列之maven-shade-plugin
[Maven] maven插件系列之maven-shade-plugin 1 插件简述/Plugin Overview 1.1 定义与目的/Definition & Goals Officia ...
- Dockcer上传hub和配置国内镜像源
Dockcer上传hub和配置国内镜像源 1.Dockcer上传hub 要将本地的Docker镜像上传到Docker镜像仓库,可以按照以下步骤操作: linux环境 1.创建用户 首先,确保你已经在D ...