FIN_WAIT_2的超时时间
需要具备的基础TCP协议的四次挥手
【目的】 验证FIN_WAIT_2的超时时间
【环境】Ubuntu 20.04 LTS
【工具】python, wireshark
【命令】ss,nc
首先通过python写一个服务端代码
开始接收客户端连接
然后通过nc命令连接服务端
通过wireshark观察到三次握手过程
通过ss命令也能查看到连接情况
这个时候通过nc给服务端发送个字符串(if you like it)数据
通过wireshark也能看到发送的数据
我们再通过服务端接收客户端发送的数据
以上都是正常的逻辑。
接下来在客户端通过CTRL+C断开连接,即客户端主动断开连接.
通过wireshark也能观察到
客户端发送了FIN, 服务端返回了ACK, 客户端进入到FIN_WAIT_2的状态,服务端进入到CLOSE_WAIT状态
通过ss命令也能看到对应的状态
但是过了一小会你再执行ss命令时,你会发现FIN_WAIT_2的状态没有了.
服务端都没有发送FIN, 也没有看到客户端的TIME_WAIT状态. 客户端直接进入到了CLOSED
【原因】
主动关闭连接的一方在进入到FIN_WAIT_2状态之后,在n秒的时间内没有收到对端的FIN包,则主动关闭一方会强制将socket关闭,状态直接进入到CLOSED
查看FIN_WAIT_2的默认超时时间
细心的读者可能会注意到, 服务端会进入到CLOSE_WAIT状态. 再仔细看的话
Recv-Q队列里面有一个字节的数据没有读取.
那么我们读取这个字节看一下是什么
读取到的是空字节,这个空字节产生的原因是之前客户端通过CTRL+C断开连接的时候,服务端内核收到客户端的FIN包之后, 服务端内核通知应用程序, 向应用程序’追加’的一个空字节,表示客户端断开了连接.服务端程序根据读取到的是空字节,就可以知道对端断开了连接.于是服务端也需要断开连接.
再执行ss命令查看
发现之前的CLOSE_WAIT也没有了,正常关闭了.
但是呢,通过wireshark观察
服务端调用close方法后,服务端向客户端发送了FIN,但是客户端已经在FIN_WAIT_2超时时间之后已经关闭了连接,状态已经是CLOSED了.服务端这个时候向一个已经不存在的连接发送FIN,于是客户端向服务端响应了一个RST包.
关于RST的相关知识,可以阅读我的另一篇文章
个人站点
语雀
公众号
FIN_WAIT_2的超时时间相关推荐
- TCP套接口的FIN_WAIT_2状态超时
PROC文件tcp_fin_timeout默认为60秒,内核中相应的变量为init_net.ipv4.sysctl_tcp_fin_timeout,不过其以jiffies表示,默认值为TCP_FIN_ ...
- c#程序设定使用期限_C# 给某个方法设定执行超时时间
在某些情况下(例如通过网络访问数据),常常不希望程序卡住而占用太多时间以至于造成界面假死. 在这时.我们可以通过Thread.Thread + Invoke(UI)或者是 delegate.Begin ...
- ajax默认超时时间多久,请问chrome浏览器的默认超时时间是多久?
测试时间:2019/02/26 MacOS 环境下,timeout在各浏览器默认值为(以下浏览器都为当前时间最新版本) chrome 72.x 为4min safari 12 为8min firefo ...
- Feign Client的各种超时时间设置
在Spring Cloud微服务架构中,大部分公司都是利用Open Feign进行服务间的调用,而比较简单的业务使用默认配置是不会有多大问题的,但是如果是业务比较复杂,服务要进行比较繁杂的业务计算,那 ...
- C# 的tcp Socket设置自定义超时时间
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...
- ribbon设置url级别的超时时间
为什么80%的码农都做不了架构师?>>> ##序 ribbon的超时设置,只能按转发的serviceId来分的,无法像nginx那样直接在每个转发的链接里头设置超时时间.这里h ...
- sudo 密码超时时间
Centos 没有默认超时时间,所以用一次sudo就需要输入密码. vi /etc/sudoers 添加下面的内容,2表示分钟数(看自己需求更改). Defaults timestamp_timeou ...
- nginx+FastCGI到底是谁影响超时时间
需求: 一个php程序要跑一段时间,但是时间不确定. 问题: 当该php程序运行超过一段时间被强制断开连接. PHP本身超时处理 在 php.ini 中,有一个参数 max_execution_tim ...
- 为jQuery的$.ajax设置超时时间
jQuery的ajax模块封装了非常强大的功能,有时候我们在发送一个ajax请求的时候希望能有一个超时的时间,想让程序在一段时间请求不到数据时做出一些反馈.幸运的是jQuery为我们提供了这样的参数: ...
最新文章
- CodeForces 321A Ciel and Robot(数学模拟)
- python array 使用创建10万浮点数
- 【转】坐标系变换矩阵推导
- 计算机和网络老是断开,电脑插上网线还是显示断开连接怎么办
- Using Oracle Data Integrator Open Tools
- 关于开源产业的5个真相
- mysql5.0 linux安装包,LINUX下MYSQL5.0的安装!
- Windows Mobile 获取来电号码和屏蔽来电
- java初学者,应该怎么去学习?
- IDEA 常用快捷键
- 腾讯云短信设置流程图文介绍
- matlab圆锥曲线,Matlab软件在高中数学圆锥曲线学习过程中应用.doc
- 24V转5V降压芯片,24V转3.3V的稳压芯片,中文规格书
- QTreeWidgetItem添加自定义数据
- python 数据shape的理解
- Laravel 上传文件大小改为200M
- 二叉树 | 前序遍历
- 关于adb shell 检测不到手机的问题解决方案
- Immersionbar学习笔记
- 苹果十大耐玩单机游戏推荐,粉丝众多,值得玩玩
热门文章
- 沈阳大学计算机李华,计算机自适应考试曝光率控制-数学专业毕业论文.pdf
- 今日金融词汇---法定许可护城河
- 过会10个月,保荐机构主动要求撤销上市保荐,IPO终止
- 7种流行PHP编辑器的比较(PHP IDE)
- 2019年7月28日 恶心人
- 【原创】关于企业或组织实行OKR的心得
- java:编写10个线程,第一个线程从1加到10,第二个线程从11加到20……第十个线程从91加到100, 最后再,10个线程结果相加
- 【微信开发】---- 公众号支付
- 教你“如何巧看黑马测试视频,悄悄成为测试高手?”
- 爱你,是一种流泪的幸福