Wireshark可以跟蹤網(wǎng)絡(luò)協(xié)議的通訊過程,本節(jié)通過TCP協(xié)議,在了解Wireshark使用的基礎(chǔ)上,重溫TCP協(xié)議的通訊過程。
TCP(Transmission Control Protocol,傳輸控制協(xié)議)是一種面向連接的、可靠的、基于字節(jié)流的傳輸層通信協(xié)議。
TCP旨在適應(yīng)支持多網(wǎng)絡(luò)應(yīng)用的分層協(xié)議層次結(jié)構(gòu),連接到不同但互連的計算機(jī)通信網(wǎng)絡(luò)的主計算機(jī)中的成對進(jìn)程之間依靠TCP提供可 靠的通信服務(wù)。從網(wǎng)絡(luò)模型-協(xié)議對應(yīng)表中發(fā)現(xiàn),TCP協(xié)議位于傳輸層。
從Wireshark界面圖中可以發(fā)現(xiàn)11、14、15號數(shù)據(jù)包是建立TCP連接的三次握手過程。
1.第一次握手(SYN=1,seq=x):客戶端發(fā)送一個TCP的SYN標(biāo)志位置1的包,指明客戶端打算連接的服務(wù)器的端口,以及初始序號X,保存在包頭的序列號(Sequence Number)字段里。發(fā)送完畢后,客戶端進(jìn)入SYN_SEND狀態(tài)。
2.第二次握手(SYN=1,ACK=1,seq=y,ACKnum=x+1):服務(wù)器發(fā)回確認(rèn)包(ACK)應(yīng)答。即SYN標(biāo)志位和ACK標(biāo)志位均為1。服務(wù)器端選擇自己ISN序列號,放到Seq域里,同時將確認(rèn)序號(Acknowledgement Number)設(shè)置為客戶的ISN加1,即X+1。發(fā)送完畢后,服務(wù)器端進(jìn)入SYN_RCVD狀態(tài)。
3.第三次握手(ACK=1,ACKnum=y+1):客戶端再次發(fā)送確認(rèn)包(ACK),SYN標(biāo)志位為0,ACK標(biāo)志位為1,并且把服務(wù)器發(fā)來ACK的序號字段+1,放在確定字段中發(fā)送給對方,并且在數(shù)據(jù)段放寫ISN的+1。發(fā)送完畢后,客戶端進(jìn)入ESTABLISHED狀態(tài),當(dāng)服務(wù)器端接收到這個包時,也進(jìn)入ESTABLISHED狀態(tài),TCP握手結(jié)束。
從Wireshark界面圖中可以發(fā)現(xiàn)77、78、79/80號數(shù)據(jù)包是移除TCP連接的四次揮手過程。
1.第一次揮手(FIN=1,seq=x):客戶端發(fā)送一個FIN志位置為1的包,表示自己已經(jīng)沒有數(shù)據(jù)可以發(fā)送了,但是仍然可以接受數(shù)據(jù)。發(fā)送完畢后,客戶端進(jìn)入FIN_WAIT_1狀態(tài)。
2.第二次揮手(ACK=1,ACKnum=x+1):服務(wù)器端確認(rèn)客戶端的FIN包,發(fā)送一個確認(rèn)包,表明自己接受到了客戶端關(guān)閉連接的請求,但還沒有準(zhǔn)備好關(guān)閉連接。發(fā)送完畢后,服務(wù)器端進(jìn)入CLOSE_WAIT狀態(tài),客戶端接收到這個確認(rèn)包之后,進(jìn)入FIN_WAIT_2狀態(tài),等待服務(wù)器端關(guān)閉連接。
3.第三次揮手(FIN=1,seq=y):服務(wù)器端準(zhǔn)備好關(guān)閉連接時,向客戶端發(fā)送結(jié)束連接請求,F(xiàn)IN置為1。發(fā)送完畢后,服務(wù)器端進(jìn)入LAST_ACK狀態(tài),等待來自客戶端的最后一個ACK。
4.第四次揮手(ACK=1,ACKnum=y+1):客戶端接收到來自服務(wù)器端的關(guān)閉請求,發(fā)送一個確認(rèn)包,并進(jìn)入TIME_WAIT狀態(tài),等待可能出現(xiàn)的要求重傳的ACK包。服務(wù)器端接收到這個確認(rèn)包之后,關(guān)閉連接,進(jìn)入CLOSED狀態(tài)??蛻舳说却四硞€固定時間(兩個最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,沒有收到服務(wù)器端的ACK,認(rèn)為服務(wù)器端已經(jīng)正常關(guān)閉連接,于是自己也關(guān)閉連接,進(jìn)入CLOSED狀態(tài)。
通過上面的通訊過程分析,加深我們對tcp協(xié)議通訊過程的了解,同時也加強(qiáng)Wireshark對數(shù)據(jù)包支持的理解。
TCP通過如下機(jī)制保證可靠性:
1.確認(rèn)和重傳:接收方收到報文就會確認(rèn),發(fā)送方發(fā)送一段時間后沒有收到確認(rèn)就重傳。
2.數(shù)據(jù)校驗(yàn)。
3.數(shù)據(jù)合理分片和排序:
4.流量控制:當(dāng)接收方來不及處理發(fā)送方的數(shù)據(jù),能提示發(fā)送方降低發(fā)送的速率,防止包丟失。
5.擁塞控制:當(dāng)網(wǎng)絡(luò)擁塞時,減少數(shù)據(jù)的發(fā)送。