最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

TCP 數(shù)據(jù)收發(fā)過程抓包分析(一篇看懂~)

2022-09-22 20:35 作者:補(bǔ)給站Linux內(nèi)核  | 我要投稿

本文簡(jiǎn)單對(duì) TCP 協(xié)議的三次握手、數(shù)據(jù)傳輸、四次揮手過程進(jìn)行抓包分析。

一. 抓包準(zhǔn)備

首先本地通過套接字實(shí)現(xiàn)一個(gè) TCP 通信,然后通過 Wireshark 抓包,套接字通信代碼如下:

Server 服務(wù)端

Client

開啟 Server 之后打開 Wireshark準(zhǔn)備抓包。首先運(yùn)行 Server,然后運(yùn)行 Client,Server 端只處理一次請(qǐng)求就會(huì)關(guān)閉,其端口為 8919,因此通過 Wireshark 可以獲得抓包記錄如圖所示:


這里有一點(diǎn)需要注意,Wireshark 抓包默認(rèn)采用的是相對(duì) Seq,而不是真實(shí)的 Seq,所以你看到上面的包的 Seq 是從 0 開始的,你可以從 Preferenct -> Protocols -> TCP 中修改,將相對(duì) Seq 關(guān)閉即可。如果所示:


現(xiàn)在在抓包的話展示的就是真實(shí)的 Seq 了,如圖:


OK,完成了基本的數(shù)據(jù)收發(fā)與抓包操作,下面就可以分析了。


【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦!?。。ê曨l教程、電子書、實(shí)戰(zhàn)項(xiàng)目及代碼)??


二. 建立連接 - TCP 的三次握手

下面是三次握手通信過程的報(bào)文,我們逐條解析。

1.客戶端發(fā)送 SYN 同步消息

SYN 表示這是收發(fā)數(shù)據(jù)前的同步消息,表示客戶端請(qǐng)求向服務(wù)端發(fā)送數(shù)據(jù)。 Seq 表示數(shù)據(jù)包序號(hào),這里是初始的數(shù)據(jù)包序號(hào)。這句話的含義是:

現(xiàn)在傳遞的數(shù)據(jù)包序列號(hào)為 0,如果接收無誤,請(qǐng)?jiān)试S我傳遞序號(hào)為 1 的數(shù)據(jù)包。

2.服務(wù)端 SYN + ACK 應(yīng)答

服務(wù)端接收到發(fā)送信息請(qǐng)求之后就要做出響應(yīng),其也會(huì)有自己的數(shù)據(jù)包序列號(hào) Seq,同時(shí)會(huì)對(duì)客戶端的 Seq 做 ACK 應(yīng)答。報(bào)文中為 ```Seq=0 Ack=1`。這里表示

Seq=0 的含義:我現(xiàn)在傳遞的數(shù)據(jù)包序號(hào)為 0,請(qǐng)通知我向你傳遞序號(hào)為 1 的包。 Ack=1 的含義:剛才 SEQ 為 0 的數(shù)據(jù)包接收無誤,你可以向我傳遞序號(hào)為 1 的包了。

可以看到服務(wù)端對(duì)客戶端的 SYN 做出了響應(yīng),并且向客戶端請(qǐng)求發(fā)送數(shù)據(jù)的請(qǐng)求??蛻舳说恼?qǐng)求服務(wù)端要做響應(yīng),客戶端自然也要響應(yīng)服務(wù)端的請(qǐng)求。

3. 客戶端 ACK 應(yīng)答

報(bào)文信息是

可以看到其 SEQ 為 1,對(duì)應(yīng)了上面的 ACK ,然后其響應(yīng)的 ACK 為 1,表示服務(wù)端可以向其發(fā)送序號(hào)為 1 的包了。

這樣雙方都完成了一次 SYN 請(qǐng)求和 ACK 應(yīng)答,服務(wù)端和客戶端已經(jīng)準(zhǔn)備就緒,接下來就是收發(fā)數(shù)據(jù)了。

三. TCP 數(shù)據(jù)發(fā)送

抓取到的數(shù)據(jù)發(fā)送的報(bào)文為:

這里面有幾個(gè)字段需要了解下:

Len:表示本次發(fā)送數(shù)據(jù)的字節(jié)數(shù),可以看到這里是 17 字節(jié)。 Win:發(fā)送端的通告的窗口大小。 首先客戶端向服務(wù)端發(fā)送了 17 字節(jié)大小的數(shù)據(jù),SEQ 數(shù)據(jù)包序號(hào)為 1,然后服務(wù)端的應(yīng)答的 ACK 為 18。之所以變?yōu)?18 原因在于:

ACK號(hào)的增量為傳輸數(shù)據(jù)的字節(jié)數(shù),即應(yīng)答 ACK 號(hào) = Seq 號(hào) + 傳遞的字節(jié)數(shù)。如果字節(jié)數(shù)為 0,那么 ACK 號(hào) = Seq 號(hào) + 1。

通過字節(jié)數(shù)可以明確知道一條請(qǐng)求中的數(shù)據(jù)是否全部傳輸成功。

四. 斷開連接 - TCP 的四次揮手

四條報(bào)文表示的信息分別是:

客戶端發(fā)送了一條 FIN 信息表示請(qǐng)求斷開連接?

服務(wù)端返回 ACK 應(yīng)答表示可以斷開連接了?

服務(wù)端發(fā)送了一條 FIN 信息請(qǐng)求斷開連接?

客戶端發(fā)送 ACK 應(yīng)答表示可以斷開?

以上就是 TCP 通過三次握手、四次揮手進(jìn)行連接的建立與斷開以及數(shù)據(jù)收發(fā)過程的簡(jiǎn)要分析。果然像 TCP 協(xié)議這種樸實(shí)無華且枯燥的知識(shí)點(diǎn)還是要實(shí)際動(dòng)手操作學(xué)起來效果更好一些。


TCP 數(shù)據(jù)收發(fā)過程抓包分析(一篇看懂~)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
平遥县| 班戈县| 三台县| 河池市| 青阳县| 高邮市| 双城市| 拜泉县| 祁连县| 仁怀市| 时尚| 长宁区| 溆浦县| 策勒县| 马鞍山市| 栖霞市| 承德县| 揭东县| 师宗县| 顺义区| 南溪县| 兴业县| 东至县| 郯城县| 景宁| 清远市| 霍林郭勒市| 平凉市| 普洱| 高安市| 林州市| 西城区| 天水市| 六枝特区| 什邡市| 沿河| 平遥县| 绥化市| 丰都县| 凯里市| 内乡县|