Wireshark文档阅读笔记-TCP 4 times close解析与实例
先介紹一個知識點:
當TCP最后一次握手結(jié)束后,也就是客戶端發(fā)送ACK后,客戶端不會立即釋放資源。會先將狀態(tài)轉(zhuǎn)換為TIME-WAIT然后等到2-MSL(Maximum Segment Lifetime)后,才會釋放資源。
1. 客戶端發(fā)送結(jié)束(FIN)數(shù)據(jù)包給服務(wù)端,暗示客戶端將要把建立的連接斷開,這樣的行為稱為active close(FIN=1, seq=u)。
2. 服務(wù)端發(fā)送確認收到FIN的數(shù)據(jù)包(ACK=1, seq=v, ack=u+1)。
3. 服務(wù)端繼續(xù)發(fā)送結(jié)束(FIN)數(shù)據(jù)包給客戶端,這樣的行為稱為passive close(FIN=1, ACK=1, seq=w, ack=u+1)。
4. 客戶端收到服務(wù)端的FIN數(shù)據(jù)包后發(fā)送確認報文(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服務(wù)端,關(guān)鍵代碼:
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";} }抓到的包如下:
客戶端發(fā)送FIN數(shù)據(jù)包,其中Seq為155,
服務(wù)端接收到客戶端的FIN數(shù)據(jù)包后,返回ACK應(yīng)答。其中ack為155+1
然后服務(wù)端發(fā)送給客戶端FIN數(shù)據(jù)包。
最后客戶端回一個ACK應(yīng)答。
?
?
總結(jié)
以上是生活随笔為你收集整理的Wireshark文档阅读笔记-TCP 4 times close解析与实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt笔记-Q_UNUSED解决编译器un
- 下一篇: Qt工作笔记-正则表达式QProcess