偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

抓不住三次握手的過(guò)程?那跟我一塊來(lái)抓個(gè)包吧!

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
何為「協(xié)議」(protocol)?「協(xié)」的本意是指多人合作,而后面的那個(gè)「議」在古漢語(yǔ)中的意思是一種文體,那么合起來(lái)就是多人合作共同遵守的一種文體,后來(lái)引申為雙方共同約定遵守的一種規(guī)則。

前段時(shí)間在忙一個(gè)機(jī)器人通信的項(xiàng)目,其中用到一個(gè)重要的協(xié)議族就是TCP/IP (Transmission Control Protocol/Internet Protocol,傳輸控制協(xié)議/國(guó)際互聯(lián)協(xié)議),我一直覺得TCP/IP協(xié)議設(shè)計(jì)的真的是太巧妙了,可以說(shuō)是這個(gè)星球上最偉大的通信協(xié)議,小到微信的即時(shí)通訊,大到航空航天等自動(dòng)控制工業(yè)領(lǐng)域,它的身影無(wú)處不在,正是有了TCP/IP,我們發(fā)送的每一條互聯(lián)網(wǎng)信息才能安全無(wú)損地到達(dá)對(duì)方(比如你有沒(méi)有想過(guò)你身在北京,打開微信給身在上海的朋友發(fā)個(gè)祝福短語(yǔ)這期間你的信息究竟經(jīng)歷了什么,為什么能準(zhǔn)確無(wú)誤地到達(dá)),一個(gè)TCP/IP協(xié)議,半部計(jì)算機(jī)網(wǎng)絡(luò)史,所以我覺得每一位計(jì)算機(jī)從業(yè)者或者計(jì)算機(jī)相關(guān)從業(yè)者都應(yīng)該花點(diǎn)時(shí)間研究一下TCP/IP協(xié)議。

大道至簡(jiǎn),今天我們使用一個(gè)抓包工具Wireshark來(lái)抓個(gè)數(shù)據(jù)包,然后對(duì)其抽絲剝繭,逐步來(lái)揭開TCP/IP的神秘面紗吧!

圖片

1997年12月,美國(guó)總統(tǒng)布什為TCP/IP之父羅伯特·卡恩(中間)頒發(fā)的美國(guó)國(guó)家技術(shù)勛章。

圖片

因特網(wǎng)起因于美蘇爭(zhēng)霸期間美國(guó)國(guó)防部準(zhǔn)備研究的一種分散的指揮系統(tǒng),由無(wú)數(shù)節(jié)點(diǎn)構(gòu)成,當(dāng)若干節(jié)點(diǎn)被摧毀后,仍然能夠通過(guò)其他節(jié)點(diǎn)互相通信。它是一種拓?fù)浣Y(jié)構(gòu),你從北京發(fā)送的信息到上??梢宰叨喾N路徑,TCP/IP的神奇之處就在于它能夠讓你的信息準(zhǔn)確無(wú)誤地到達(dá)。

何為「協(xié)議」(protocol)?「協(xié)」的本意是指多人合作,而后面的那個(gè)「議」在古漢語(yǔ)中的意思是一種文體,那么合起來(lái)就是多人合作共同遵守的一種文體,后來(lái)引申為雙方共同約定遵守的一種規(guī)則。生活中的協(xié)議有很多,比如你剛畢業(yè)的時(shí)候簽訂的三方協(xié)議,還有租房的時(shí)候有租賃協(xié)議,再說(shuō)遠(yuǎn)一點(diǎn),秦始皇統(tǒng)一中國(guó)后為了方便全國(guó)的交流,制定了「車同軌,書同文」的規(guī)則,這應(yīng)該是中國(guó)歷史上最早的國(guó)家標(biāo)準(zhǔn)了吧,這也是一種協(xié)議,還有,你看諜戰(zhàn)片,雙方傳遞信息的時(shí)候都有口號(hào),這都是事先約定好的,都是一種協(xié)議,雙方必須遵守。

有了協(xié)議,就大大方便了我們的交流,比如我們?cè)诖螂娫挼臅r(shí)候一般都會(huì)說(shuō)聲“喂,你好”,等對(duì)方確認(rèn)應(yīng)答后才說(shuō)明雙方確實(shí)都通了,然后開始正式通話,而對(duì)于TCP來(lái)說(shuō)也是這樣的,TCP在建立連接的過(guò)程中要進(jìn)行三次握手,雙方完全確認(rèn)無(wú)誤后才會(huì)互相通信:

圖片

三次握手示意圖

帶著這張圖片的信息,讓我們展開抓包之旅吧!

抓包前的準(zhǔn)備工作

第一步,首先我們下載一個(gè)抓包軟件Wireshark,這個(gè)軟件百度一下,網(wǎng)上很多,直接下載即可;

第二步,然后我們?cè)谧约旱碾娔X上ping一下百度的域名:www.baidu.com,這樣就能知道百度服務(wù)器的IP地址,當(dāng)然百度在全國(guó)肯定不止一臺(tái)服務(wù)器,所以每個(gè)人ping出的地址可能不一樣,比如我ping出的是180.101.49.12 。

圖片

第三步,我們打開抓包軟件,在選項(xiàng)里面選擇你的網(wǎng)絡(luò)接口,然后點(diǎn)擊開始,Wireshark就開始幫你抓包了;

圖片

第四步,我們打開瀏覽器,輸入剛才ping到的百度服務(wù)器的IP地址,輸入地址欄按回車,這樣就打開百度首頁(yè)了,其實(shí)我們平常輸入的網(wǎng)址也是經(jīng)過(guò)DNS服務(wù)器解析后轉(zhuǎn)化成IP進(jìn)行訪問(wèn)的。沒(méi)錯(cuò),我們就是通過(guò)訪問(wèn)一個(gè)百度網(wǎng)址來(lái)抓取在鍵入回車后雙方的報(bào)文信息的。

圖片

第五步,我們?cè)谧グ浖阉骺騼?nèi)輸入 ip.addr == 180.101.49.12 and tcp 指令來(lái)幫助我們過(guò)濾掉多余的信息:

圖片

好了,可見我們抓取了很多條信息,但是我們只需要前三條即可,因?yàn)榍叭龡l就是雙方建立連接(三次握手)過(guò)程中互相傳遞的報(bào)文信息。

在分析這三條報(bào)文前,我們回憶一下TCP/IP每層網(wǎng)絡(luò)模型中的報(bào)文結(jié)構(gòu):

圖片

每層模型對(duì)自己的數(shù)據(jù)加包頭后發(fā)給下一層:

圖片

這是微信發(fā)送消息的模型(所有TCP/IP協(xié)議都是這樣),當(dāng)然微信肯定不是端對(duì)端直接傳送到另一個(gè)手機(jī),而是先傳送到騰訊服務(wù)器,再轉(zhuǎn)推給對(duì)方,不過(guò)原理是一樣的。

可見每層都是膠囊化的數(shù)據(jù),經(jīng)過(guò)加工后(一般都是加上報(bào)頭)然后傳送給下一層,最終由物理層的傳送介質(zhì)(比如光纖)傳送給對(duì)方電腦,對(duì)方收到后再反過(guò)來(lái)解析,剝開每一層的報(bào)頭,最終露出數(shù)據(jù)部分,這才是我們真實(shí)要的數(shù)據(jù)。所以,我們抓到的包都是在最下面的以太網(wǎng)幀,包含幀頭、幀尾、IP頭部、TCP頭部的數(shù)據(jù)包,所以我們必須先從最后一層分析。

數(shù)據(jù)鏈路層

圖片

在數(shù)據(jù)鏈路層我們收到的以太網(wǎng)幀頭部結(jié)構(gòu)如下(下面這張圖片為了描述方便,寬度我與位長(zhǎng)度我沒(méi)有按照比例來(lái)畫):

圖片

簡(jiǎn)要解釋一下幾個(gè)字段的含義:

  • 前導(dǎo)同步碼

提醒接收系統(tǒng)即將有幀到來(lái),七次寫入 10101010 ;

  • 幀開始分界符

表示幀的發(fā)送從下一個(gè)數(shù)據(jù)報(bào)正式開始,二進(jìn)制數(shù)序列為 10101011 ;

  • 幀的長(zhǎng)度 / 類型

內(nèi)容為幀長(zhǎng)度(單位為字節(jié))或者交給上層協(xié)議的信息。具體是哪種內(nèi)容,取決于以太網(wǎng)的種類。

我們先來(lái)看第一次握手的數(shù)據(jù)

圖片

第一個(gè)紅框 b0 95 8e 0b 15 38 代表目標(biāo)MAC地址,也就是百度服務(wù)器的網(wǎng)卡地址;

第二個(gè)紅框 10 63 c8 ff ff ff 代表源MAC地址,也就是我自己電腦的網(wǎng)卡地址,后三個(gè)字節(jié) ff ff ff 是我虛擬的,包括上面圖片中我也打了馬賽克,為什么,因我怕黑客知道我的網(wǎng)卡地址后攻擊我的電腦;

第三個(gè)紅框 08 00 代表的是 IPv4 協(xié)議。

等等,你可能會(huì)問(wèn),幀頭的前導(dǎo)同步碼與幀開始分界符怎么沒(méi)有顯示呢?

這是因?yàn)樵谖锢韺由暇W(wǎng)卡要先去掉前導(dǎo)同步碼和幀開始定界符,然后對(duì)幀進(jìn)行CRC檢驗(yàn),如果幀校驗(yàn)和錯(cuò),就丟棄此幀。如果校驗(yàn)和正確,就判斷幀的目的硬件地址是否符合自己的接收條件(目的地址是自己的物理硬件地址、廣播地址、可接收的多播硬件地址等),如果符合,就將幀交“設(shè)備驅(qū)動(dòng)程序”做進(jìn)一步處理。這時(shí)我們的抓包軟件才能抓到數(shù)據(jù),因此,抓包軟件抓到的是去掉前導(dǎo)同步碼、幀開始分界符、FCS之外的數(shù)據(jù)。

 網(wǎng)絡(luò)層

圖片

我們先來(lái)看網(wǎng)絡(luò)層,也就是 IP 層的頭部結(jié)構(gòu):

圖片

先來(lái)大致解釋一下每個(gè)字段的含義:

  • 版本(version)

如果是 IPv4 則填入 4 ,如果是 IPv6(當(dāng)然報(bào)頭結(jié)構(gòu)跟 IPv4 結(jié)構(gòu)不一樣)則填入6。

  • 頭長(zhǎng)度(Header Length)

IP 報(bào)頭的大小 ,頭部長(zhǎng)度是指IP報(bào)頭的總長(zhǎng)度,因?yàn)橛蠴ption可選部分,通常為20字節(jié),范圍在20--60字節(jié),注意,該字段單位為32位字(1個(gè)32位字為4字節(jié)),因此當(dāng)ip報(bào)頭長(zhǎng)度為1111(15)時(shí)是最大60(15*4)字節(jié),一定要注意,這個(gè)字段的單位比較特殊,容易弄錯(cuò)。

  • 服務(wù)類型(Differentiated Services Field)

顯示發(fā)送信息時(shí)的優(yōu)先情況。

  • 數(shù)據(jù)包總長(zhǎng)度(Total Length)

IP 報(bào)頭與數(shù)據(jù)的整體大小,表示此IP報(bào)頭和數(shù)據(jù)的之和的總長(zhǎng)度??傞L(zhǎng)度16位,一個(gè)數(shù)據(jù)最大長(zhǎng)度65535字節(jié);鏈路只允許1500字節(jié),超過(guò)的話需要進(jìn)行MTU分片。一個(gè)數(shù)據(jù)包由IP報(bào)頭和數(shù)據(jù)兩部分組成,而IP報(bào)頭為20---60字節(jié),所以不會(huì)有一個(gè)數(shù)據(jù)包里純數(shù)據(jù)超過(guò)1480字節(jié)。

  • 標(biāo)識(shí)符(Identification)

將分割后的 IP 數(shù)據(jù)包復(fù)原時(shí)使用的值,與標(biāo)記字段和偏移字段用于IP報(bào)文分片。原始報(bào)文大小超過(guò)MTU(<1480B)就必須將原始數(shù)據(jù)進(jìn)行分片,每個(gè)分片小于MTU,對(duì)同一原始文件被分片的報(bào)文打上相同的標(biāo)記,也用來(lái)判斷流量是否來(lái)于同一主機(jī)。IP軟件在存儲(chǔ)器中維持一個(gè)計(jì)數(shù)器沒(méi)生產(chǎn)一個(gè)數(shù)據(jù)包,計(jì)數(shù)器就加1,并賦予標(biāo)識(shí)字段。數(shù)據(jù)報(bào)文進(jìn)行分片處理后每個(gè)分片的標(biāo)識(shí)值都與原數(shù)據(jù)包的標(biāo)識(shí)值相同,接收端具有同標(biāo)識(shí)值的分片就能最終正確重組為原數(shù)據(jù)。

  • 旗標(biāo)(Flags)

關(guān)于數(shù)據(jù)包分割的信息:

第一位沒(méi)有被使用;

第二位不分片(DF),當(dāng)DF位置為1時(shí)表示路由器不能對(duì)報(bào)文進(jìn)行分片處理;第三位多分片(MF),當(dāng)路由器對(duì)報(bào)文進(jìn)行分片時(shí),除了最后一個(gè)分片的MF位設(shè)置為0外,其他所有分片MF位置為1,以便接收者直到收到MF位為0的分片為止。

圖片

例如,如果數(shù)據(jù)包被分成兩段,那么第一個(gè)flags就是101,第二個(gè)flags就是100.

  • 分片偏移(Fragmentation offset)

被分割的數(shù)據(jù)的順序,標(biāo)識(shí)分片在分組中的位置。

  • 生存時(shí)間(Time to live, TTL)

允許經(jīng)過(guò)最大的路由器數(shù)量,即數(shù)據(jù)包能傳多少跳。不同操作系統(tǒng)TTL的默認(rèn)最大值會(huì)有所不同,目的是防止路由成環(huán)時(shí)IP數(shù)據(jù)被無(wú)限轉(zhuǎn)發(fā),每經(jīng)過(guò)一個(gè)路由器TTL值減1,TTL為0時(shí)丟棄該分組。

  • 協(xié)議(Protocol)

上一級(jí)協(xié)議,標(biāo)識(shí)數(shù)據(jù)攜帶的數(shù)據(jù)是何種協(xié)議,標(biāo)識(shí)傳輸層地址或協(xié)議號(hào),如1代表ICMP,6代表TCP,17代表UDP.

  • 包頭校驗(yàn)和(Header checksum)

確認(rèn) IP 包頭是否損壞的數(shù)值,用于校驗(yàn)檢查IP報(bào)頭是否有出入。

  • 選項(xiàng)(Option)

可選字段(0--40B)Option字段很少使用,用于控制,轉(zhuǎn)發(fā)要求,測(cè)試等。

圖片

網(wǎng)絡(luò)層的信息比較多,我們只撿幾個(gè)重要的信息來(lái)說(shuō)一下:

第二行的 c0 a8 00 65 轉(zhuǎn)化成十進(jìn)制就是 192.168.0.101 這是我電腦的 IP ,注意這里是局域網(wǎng) IP , 后面的 b4 65 31 0c 轉(zhuǎn)化成十進(jìn)制就是180.101.49.12,是目標(biāo) IP ,也就是百度服務(wù)器的 IP。

傳輸層

圖片

傳輸層的功能是保證數(shù)據(jù)可靠地從發(fā)送結(jié)點(diǎn)發(fā)送到目標(biāo)結(jié)點(diǎn),我們看一下它的頭部結(jié)構(gòu),已經(jīng)能夠看到攜帶的握手信息了。

圖片

  • 序列號(hào)(Sequence Number)

表示在所有的數(shù)據(jù)中,此數(shù)據(jù)是第幾個(gè)

  • 確認(rèn)應(yīng)答號(hào)(Acknowledgment Number)

表示即將接收的下一個(gè)數(shù)據(jù)是第幾個(gè)

我們?cè)倏醋サ降陌鼣?shù)據(jù),再剝一層,把 IP 頭去掉,先看第一次握手:

圖片

我們可以看到:第一次握手的過(guò)程中,客戶端隨機(jī)生成了一個(gè)序列號(hào),數(shù)值挺大的,然后將狀態(tài)控制碼中的 SYN 置為1,發(fā)送給服務(wù)端。

第二次握手:

圖片

在服務(wù)端收到客戶端的報(bào)文后,服務(wù)端再給客戶端一個(gè)應(yīng)答,由于是服務(wù)端給客戶端打招呼,因此端口號(hào)互換一下,這邊服務(wù)端也隨機(jī)生成一個(gè)序列號(hào),同時(shí)將第一次握手收到客戶端的序列號(hào)加1,作為確認(rèn)序列號(hào)發(fā)送過(guò)去,同時(shí)將狀態(tài)控制碼的ACK與SYN置為1,發(fā)送給客戶端。

第三次握手:

圖片

第三次握手是客戶端在收到服務(wù)端的回應(yīng)后,客戶端再一次回應(yīng)。可以看到,序列號(hào)就是第二次握手服務(wù)端發(fā)來(lái)的確認(rèn)應(yīng)答序列號(hào),而第三次握手客戶端的確認(rèn)序列號(hào)就是第二次握手服務(wù)端發(fā)來(lái)的確認(rèn)序列號(hào)加1。

這樣,三次握手就完成,雙方建立連接,可以互相通信了。

好了,以上就是今天的全部?jī)?nèi)容了,其實(shí)三次握手只是TCP里面的冰山一角,真正傳輸過(guò)程中還涉及到非常多的知識(shí),比如超時(shí)重傳、校驗(yàn)、窗口機(jī)制等等,不過(guò)今天先說(shuō)到這里吧,基礎(chǔ)薄弱的同學(xué)可以先消化一下,后面的知識(shí)等有時(shí)間再給大家說(shuō)。

責(zé)任編輯:武曉燕 來(lái)源: 編碼珠璣
相關(guān)推薦

2021-03-08 18:08:08

TCP Connect 協(xié)議

2017-09-25 21:27:07

TCP協(xié)議數(shù)據(jù)鏈

2020-12-08 06:34:16

TCP握手SYN 報(bào)文

2015-10-13 09:42:52

TCP網(wǎng)絡(luò)協(xié)議

2023-09-07 16:46:54

TCP數(shù)據(jù)傳遞

2024-01-12 08:23:11

TCPACK服務(wù)器

2021-08-09 07:26:34

Blazor路由開發(fā)

2020-03-02 14:41:04

運(yùn)維架構(gòu)技術(shù)

2022-10-19 14:08:42

SYNTCP報(bào)文

2020-01-09 09:31:05

三次握手四次揮手 TCP

2025-02-13 00:00:00

TCP網(wǎng)絡(luò)通信

2024-10-09 20:54:16

2022-07-07 09:00:17

TCP 連接HTTP 協(xié)議

2021-01-29 06:11:08

TCP通信三次握手

2021-05-18 12:27:40

TCP控制協(xié)議

2023-11-01 08:04:08

WiresharkTCP協(xié)議

2020-01-07 22:15:43

TCP三次握手丟包

2022-10-10 07:34:36

TCP三次握手區(qū)塊鏈

2019-06-12 11:26:37

TCP三次握手四次揮手

2020-02-17 10:10:43

TCP三次握手四次揮手
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)