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