Wireshark文档阅读笔记-TCP 4 times close解析与实例
生活随笔
收集整理的這篇文章主要介紹了
Wireshark文档阅读笔记-TCP 4 times close解析与实例
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
先介紹一個知識點:
當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解析与实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt笔记-Q_UNUSED解决编译器un
- 下一篇: Qt工作笔记-正则表达式QProcess