一、TCP/IP是一個(gè)協(xié)議族培廓,每一層負(fù)責(zé)不通的通信功能惹悄,今天通過(guò)抓包分析一下傳輸層的TCP協(xié)議的三次握手過(guò)程。
二医舆、使用抓包軟件是Wireshark俘侠,先看一下Wireshark抓到的TCP的包對(duì)應(yīng)的協(xié)議層。
Frame:對(duì)應(yīng)是物理層蔬将,主要是傳輸bit流爷速。
Ethernet:數(shù)據(jù)鏈路層,傳輸數(shù)據(jù)幀霞怀,二層通信主要是通過(guò)mac地址惫东。
Internet:網(wǎng)絡(luò)層,傳送數(shù)據(jù)包毙石, 互聯(lián)網(wǎng)層IP包頭部信息廉沮,
這一層通過(guò)抓包能夠知道源IP和目的IP
Transmission:傳輸層,主要傳送分組徐矩,傳輸層中的TCP滞时、UDP協(xié)議
Hypertext:應(yīng)用層,常用的HTTP滤灯、SMTP坪稽、FTP等協(xié)議
三、我們想要抓取握手包進(jìn)行分析鳞骤,首先來(lái)看一下TCP報(bào)文的首部窒百。
1、源端口:是應(yīng)用層進(jìn)程所使用的端口豫尽,16bit
2篙梢、目的端口:通信另一端的進(jìn)程所使用的端口,16bit
3美旧、序號(hào):發(fā)送分組時(shí)渤滞,將報(bào)文按字節(jié)編號(hào)贬墩,報(bào)文的第一個(gè)字節(jié)的序號(hào)就是序號(hào),每一次放松報(bào)文的序號(hào)時(shí)由雙方?jīng)Q定蔼水,也就是發(fā)送方報(bào)文的第一個(gè)字節(jié)序號(hào)震糖。32bit
4、確認(rèn)序號(hào):是接收方期望發(fā)送方下一個(gè)報(bào)文的字節(jié)序號(hào)趴腋,加入A向B發(fā)送了一個(gè)報(bào)文吊说,序號(hào)是x,如果B收到了這個(gè)報(bào)文优炬,那么B發(fā)送了一個(gè)確認(rèn)報(bào)文給A颁井,將確認(rèn)序號(hào)設(shè)置為x+1,表示前x個(gè)字節(jié)的數(shù)據(jù)我已經(jīng)收到蠢护,你下次給我發(fā)從x+1開始的數(shù)據(jù)雅宾。
***5、 **首部長(zhǎng)度:首部中32bit字的數(shù)目葵硕,可表示1532bit=60字節(jié)的首部眉抬。一般首部長(zhǎng)度為20字節(jié)。
6懈凹、保留:6bit, 均為0
7蜀变、緊急URG:當(dāng)URG=1時(shí),表示報(bào)文段中有緊急數(shù)據(jù)介评,應(yīng)盡快傳送库北。
***8、 ***確認(rèn)比特ACK:ACK = 1時(shí)代表這是一個(gè)確認(rèn)的TCP包们陆,取值0則不是確認(rèn)包寒瓦。
9、 推送比特PSH:當(dāng)發(fā)送端PSH=1時(shí)坪仇,接收端盡快的交付給應(yīng)用進(jìn)程杂腰。
10、 復(fù)位比特(RST):當(dāng)RST=1時(shí)椅文,表明TCP連接中出現(xiàn)嚴(yán)重差錯(cuò)颈墅,必須釋放連接,再重新建立連接雾袱。
11、同步比特SYN:在建立連接是用來(lái)同步序號(hào)官还。SYN=1芹橡, ACK=0表示一個(gè)連接請(qǐng)求報(bào)文段。SYN=1望伦,ACK=1表示同意建立連接林说。
12煎殷、 終止比特FIN:FIN=1時(shí),表明此報(bào)文段的發(fā)送端的數(shù)據(jù)已經(jīng)發(fā)送完畢腿箩,并要求釋放傳輸連接豪直。
13、 窗口:用來(lái)控制對(duì)方發(fā)送的數(shù)據(jù)量珠移,通知發(fā)放已確定的發(fā)送窗口上限弓乙。
14、 檢驗(yàn)和:該字段檢驗(yàn)的范圍包括首部和數(shù)據(jù)這兩部分钧惧。由發(fā)端計(jì)算和存儲(chǔ)暇韧,并由收端進(jìn)行驗(yàn)證。
15浓瞪、緊急指針:緊急指針在URG=1時(shí)才有效懈玻,它指出本報(bào)文段中的緊急數(shù)據(jù)的字節(jié)數(shù)。
16乾颁、 選項(xiàng):長(zhǎng)度可變涂乌,最長(zhǎng)可達(dá)40字節(jié)
分析三次握手過(guò)程###
關(guān)于抓包的過(guò)程就不再累述,不知道怎么抓包的可以看網(wǎng)上的教程英岭。
我們想分析三次握手的過(guò)程湾盒,首先要能在眾多的數(shù)據(jù)包(已經(jīng)使用過(guò)濾器選出了所有TCP報(bào)文)中找到哪一個(gè)是第一次握手請(qǐng)求的數(shù)據(jù)包呢?
下面看一下抓的包巴席。
圖中箭頭標(biāo)注的地方可以看到這個(gè)報(bào)文中有SYN历涝,下面兩個(gè)報(bào)文分別有[ACK SYN] [ACK]很明顯這是三次握手的過(guò)程。我們就來(lái)分析這三個(gè)包漾唉。
第一握手#####
我們將發(fā)送請(qǐng)求的一方暫且叫做客戶端荧库,TCP是全雙工的通信。
客戶端向服務(wù)器發(fā)送一個(gè)連接請(qǐng)求包赵刑,標(biāo)志位SYN(同步)置為1分衫,序號(hào)置為0.
第二次握手####
服務(wù)器收到客戶端發(fā)來(lái)的報(bào)文,有SYN=1知道客戶端是需要建立連接般此,于是向客戶端發(fā)送一個(gè)確認(rèn)包蚪战,置SYN=1 ACK=1。表名這是一個(gè)確認(rèn)包铐懊。設(shè)置初始序號(hào)Y=0邀桑,將確認(rèn)序號(hào)(Acknowledgement Number)設(shè)置為客戶的序列號(hào)加1,即X+1 = 0+1=1科乎。
第三次握手#####
客戶端收到服務(wù)器發(fā)來(lái)的包后檢查確認(rèn)序號(hào)(Acknowledgement Number)是否正確壁畸,即第一次發(fā)送的序號(hào)加1(X+1=1)。以及標(biāo)志位ACK是否為1。若正確捏萍,客戶端再次發(fā)送確認(rèn)包太抓,ACK標(biāo)志位為1,SYN標(biāo)志位為0令杈。確認(rèn)序號(hào)(Acknowledgement Number)=Y+1=0+1=1走敌,發(fā)送序號(hào)為X+1=1。服務(wù)器收到后確認(rèn)序號(hào)值與ACK=1則連接建立成功
四逗噩、到這掉丽,TCP連接的三次握手就已將建立了,下面就可以進(jìn)行通信了给赞。關(guān)于TCP三次握手過(guò)程中的seq和ack的含義初學(xué)者會(huì)感到困惑机打,不知道什么這些值的意義。關(guān)于TCP可靠傳輸?shù)闹R(shí)還有很多片迅,需要多看書残邀,去理解,比如如何保證TCP可靠傳輸柑蛇,停等協(xié)議芥挣,ARQ協(xié)議,超時(shí)重傳耻台,流量控制空免,擁塞控制等知識(shí)都需要我們?nèi)ダ斫狻?/p>