日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Wireshark文档阅读笔记-TCP 3 way handshaking解析与实例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這里先介紹2個概念:

TCB:Transmission Control Block,傳輸控制塊,這個和PCB(進程控制塊)類似,存儲了很多重要的內容。如TCP連接表,發送緩存指針和接收緩存指針,重發隊列指針,當前序列號和確認序列號(ACK)。

ACK包中帶有“數據”,這個數據是指處理SYN(Synchronize Sequence Numbers同步序列號),確認包序列為seq=x+1,這個x是客戶端或服務器傳過來的。但在實際TCP3次握手中,不僅僅包含這些東西,還帶有商議的內容如MSS(maximum segment size)等。

?

假設客戶端和服務端目前都處于CLOSED狀態。

流程圖如下:

1. 服務端創建TCB,并且使用TCB接收客戶端請求,當TCB建立起來后,服務端的狀態會從CLOSED變為LISTEN。

2. 客戶端也創建TCB,并且使用TCB發送請求,請求頭中帶有“SYN=1”,生成一個任意的隨機數seq=x。SYN包(SYN設置為1的包稱為SYN包),除了攜帶sql=x這個會被服務端處理的消息,不會攜帶其他消息。當請求發送后客戶端會從CLOSED狀態轉變為SYN-SENT狀態。

3. 服務端接收到客戶端消息后:

? ? a. 如果服務端接收到客戶端發起的連接(也就是這個消息),會回一個確認消息,在消息體中帶有SYN和ACK,并且都會被置為1,服務端也會生成一個隨機數seq=y,ack=x+1,這個x是客戶端發過來的值,這個包里面只會包含剛剛說的那些數據。此時服務端的狀態將變為SYN-RCVD。

? ? b. 如果服務端拒絕連接,將會發送RST包用于重置連接。

4. 客戶端接收到服務端的響應,會發送一個確認包內容為ACK置為1,seq=x+1。

完成上面的操作后兩個進程的狀態都會轉變為ESTABLISHED,這就是TCP的三次握手。

?

官方的例子如下:

點擊下載

?

下面來分析下本人抓的包:

這里我們使用Java搭建一個Web服務端,請求的關鍵代碼如下:

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";} }

用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(); }

此時抓到的包如下:

一開始客戶端發了一個包將Seq=0。

服務端收到后返回Ack=0+1,而Seq=0這個0為服務端產生的隨機數。

客戶端接收到服務端的包后將Ack設置為1,Seq為0+1。這個0為服務端傳過來的0。

?

總結

以上是生活随笔為你收集整理的Wireshark文档阅读笔记-TCP 3 way handshaking解析与实例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。