TCP協議:::
三向交握:
握手過程的第一個段的代碼位設定為SYN,序號為x,表示開始一次握手。接收方收到這個段後,向寄件者回傳一個段。代碼位設定為SYN和ACK,序號設定為y,確認序號設定為x+1。寄件者在受到這個段後,知道就可以進行TCP資料發送了,於是,它又向接收者發送一個ACK段,表示,雙方的串連已經建立。
Client --> 置SYN標誌 序號 = J,確認號 = 0 ----> Server
Client <-- 置SYN標誌 置ACK標誌 序號 = K, 確認號 = J + 1 <-- Server
Clinet --> 置ACK標誌 序號 = J + 1,確認號 = K + 1 --> Server
a 發起方 b接受方
a發送一個SYN包給b,b回一個[SYN,ACK]給b,a再回一個ACK包給b;
資料交換:
a ----》b
a 發送資料完畢,(PSH,ACK) aseq = x,ack=y,datalen = z
b 接受到以後發送(ACK) bseq = aack, back = aseq + alen, datalen=blen
b 發送資料完畢 (PSH,ACK)bseq = bseq + blen,back = back,datalen = blen
a 確認接受 (ACK) aseq = back ,aack = bseq + blen
註:PSH標誌指示接收端應儘快將資料提交給應用程式層。從我協議分析的經曆來看,在資料轉送階段,幾乎所有資料包的發送都置了PSH位;而ACK標誌位在資料轉送階段也是一直是置位的
在資料轉送階段,按照常理應用程式層資料的傳輸是這樣的:(我們假定建立串連階段Client端最後的確認包中序號 = 55555, 確認號 = 22222)
Client --> 置PSH標誌,置ACK標誌 序號 = 55555, 確認號 = 22222,資料包長度 = 11 ---> Server
Client <-- 置ACK標誌,序號 = 22222, 確認號 = 55566 (=55555 + 11),資料包長度 = 0 <--- Server
Client <-- 置PSH標誌,置ACK標誌 序號 = 22223, 確認號 = 55566,資料包長度 = 22 <--- Server
Client --> 置ACK標誌,序號 = 55566, 確認號 = 22244(=22222+22),資料包長度 = 0 ---> Server
/////////////////////////////////////////////////////////////////////////////////////////