先介绍一个知识点:

当TCP最后一次握手结束后,也就是客户端发送ACK后,客户端不会立即释放资源。会先将状态转换为TIME-WAIT然后等到2-MSL(Maximum Segment Lifetime)后,才会释放资源。

1. 客户端发送结束(FIN)数据包给服务端,暗示客户端将要把建立的连接断开,这样的行为称为active close(FIN=1, seq=u)。

2. 服务端发送确认收到FIN的数据包(ACK=1, seq=v, ack=u+1)。

3. 服务端继续发送结束(FIN)数据包给客户端,这样的行为称为passive close(FIN=1, ACK=1, seq=w, ack=u+1)。

4. 客户端收到服务端的FIN数据包后发送确认报文(ACK=1, seq=u+1, ack=w+1)

下面是官方的例子

下载地址

下面是个人的例子:

C++客户端

#include <QCoreApplication>
#include <QDebug>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QUrl>int main(int argc, char *argv[])
{QCoreApplication a(argc, argv);QNetworkAccessManager manager;QNetworkRequest request;request.setUrl(QUrl("http://127.0.0.1:8080/test"));QNetworkReply *reply = manager.get(request);QObject::connect(reply, &QNetworkReply::finished, [&](){qDebug() << reply->readAll();qApp->exit();});return a.exec();
}

Java服务端,关键代码:

package cn.it1995.demo;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {@GetMapping("/test")public String test(){return "test";}
}

抓到的包如下:

客户端发送FIN数据包,其中Seq为155,

服务端接收到客户端的FIN数据包后,返回ACK应答。其中ack为155+1

然后服务端发送给客户端FIN数据包。

最后客户端回一个ACK应答。

Wireshark文档阅读笔记-TCP 4 times close解析与实例相关推荐

  1. Wireshark文档阅读笔记-TCP 3 way handshaking解析与实例

    这里先介绍2个概念: TCB:Transmission Control Block,传输控制块,这个和PCB(进程控制块)类似,存储了很多重要的内容.如TCP连接表,发送缓存指针和接收缓存指针,重发队 ...

  2. Qt文档阅读笔记-QML Canvas的官方解析及实例

    目录 官方解析 博主例子 官方解析 Canvas可以用于画直线或曲线,简单或复杂的形状,图形,图片,并且他能加文字,颜色,阴影,和颜色梯度,和其他的装饰,可以进行低像素操作.Canvas可以保存成图像 ...

  3. Qt文档阅读笔记-FileDialog QML Type官方解析与实例

    目录 官方解析 博主例子 官方解析 FileDialog是基于文件的选择器,可以选择文件或文件夹,创建文件,这个Dialog初始化是不可见的,得需要设置他为visible或调用open()即可. 下面 ...

  4. Qt文档阅读笔记-TextEdit QML Type官方解析及实例

    目录 官方解析 博主栗子 官方解析 TextEdit展示了一个可编辑的一块,是有格式的文本. 他同样能展示普通文本和富文本: TextEdit {width: 240text: "<b ...

  5. Qt文档阅读笔记-Text QML Type官方解析及实例

    目录 官方解析 博主例子 官方解析 Text能够展示纯文本和富文本.举个例子,红色文本以及指定的字体和大小 Text {text: "Hello World!"font.famil ...

  6. Qt文档阅读笔记-Label QML Type官方解析及实例

    目录 官方解析 博主例子 官方解析 Label扩展了父类Text中的styling和font.Label同样是有可视化的background项. Label {text: "Label&qu ...

  7. Qt文档阅读笔记-Button QML Type官方解析及实例

    目录 官方解析 博主栗子 官方解析 按钮展示了一个按钮控件,这个控件可以被用户所按下,按钮是通常被用于执行一个操作,或者解决一个问题.buttons有如下几个典栗,如Ok,Apply,Cancel,C ...

  8. Qt文档阅读笔记-Timer QML Type 官方解析与实例

    目录 官方解析 博主例子 官方解析 Timer能够触发一个动作,或者在给定时间重复这个动作: 下面给出显示当前时间的代码,500毫秒刷新异常,这里是通过JS对象来获取当前时间! import QtQu ...

  9. Wireshark文档阅读笔记-WebSocket协议基本概念

    WebSocket WebSocket是基于TCP的全双工协议.WebSocket是2011年IETF RFC6455中定义的标准,他的API是W3C定义的. WebSocket不仅适用于浏览器.服务 ...

最新文章

  1. Linux与Windows文件共享命令 rz,sz
  2. AI 还原宋代皇帝,原来这么帅?!
  3. 软件项目管理 用户测试,1对软件研发过程中用户需求研发设计项目测试交付实施测试等流程监督管理.doc...
  4. 通过Image对象获取对象的格式
  5. 获取列表中最大N个数的索引
  6. 解决ubuntu无法修改分辨率为1920*1080问题
  7. LUA ipairs遍历的问题
  8. java 信号量 countdown_Java计数器之CountDownLatch、CyclicBarrier、Semaphore
  9. 分布式ID-数据库多主模式
  10. shell 本地接口自动化
  11. 中使用swiper不能自动切换_液晶拼接墙显示系统中矩阵切换器使用的注意事项
  12. codeforces 467A-C语言解题报告
  13. 一些Base64编码/解码及数据压缩/解压方面的知识
  14. 数据库连接字符串的写法(参考)
  15. 802.1D生成树STP协议
  16. SAP系统登录以及注册开发人员
  17. K8S从入门到放弃系列-(14)Kubernetes集群Dashboard部署
  18. 《阿凡达》超越《泰坦尼克号》冠影史(图)
  19. 根据先序和中序(中序和后序)确定二叉树
  20. oracle序列无缓存,oracle 序列跳号现象

热门文章

  1. SolidWorks 更新系统注册记录失败
  2. Windows 2008 R2 SP1部署Lync2010企业版(一)
  3. android调用.Net WebService传递byte[]
  4. SQL Sever中SQL语句语法,适合初学者使用
  5. 海信集团:通过数据来驱动企业的管理,让数据真正成为生产力
  6. 99%的人都不会的用户流失分析,到底应该怎么做?
  7. 数据分析工具选型3大秘诀,Excel竟未上榜
  8. 韩寒近期【雷人】语录
  9. MFC实现 MSN QQ 窗口抖动
  10. 有哪些适合新手练手的C/C++项目?