這次,我們在實驗環境中,通過一個完整的TCP從三向交握建立串連,互相各發送一個資料報,然後通過四次握手中斷連線的流程,來看看一般的TCP網路通訊
是怎麼一個樣子的。我們還是在172.16.48.13(以下簡稱13)上建立一個TCP用戶端進程,串連172.16.48.1(以下簡稱1)的
5002連接埠。然後向1發送一個資料報,1收到後,向13也發送一個資料,然後13發送FIN主動中斷連線。1也隨後發送它的FIN,完成中斷連線,這整
個過程,總共有11個資料報,其中三向交握3個,資料通訊4個,中斷連線4個。下面我們列出這11個資料報的主要內容,為簡潔起見,略去如源和目的連接埠等
一些非關鍵資訊。
序號 確認序號 標誌 資料
三向交握建立串連:
13發送SYN: 0x000007bc(0) 0x00000000(0) SYN 無
1發送ACK,
並同時發送SYN: 0xab2b9dc7(0) 0x000007bd(1) SYN ACK 無
13發送ACK: 0x000007bd(1) 0xab2b9dc8(1) ACK 無
資料收發:
13發送資料報: 0x000007bd(1) 0xab2b9dc8(1) PSH ACK 21位元組負載資料
1發送ACK: 0xab2b9dc8(1) 0x000007d2(22) ACK 無
1發送資料報: 0xab2b9dc8(1) 0x000007d2(22) PSH ACK 34位元組負載資料
13發送ACK: 0x000007d2(22) 0xab2b9dea(35) ACK 無
四次握手中斷連線:
13發送FIN: 0x000007d2(22) 0xab2b9dea(35) FIN ACK 無
1發送ACK: 0xab2b9dea(35) 0x000007d3(23) ACK 無
1發送FIN: 0xab2b9dea(35) 0x000007d3(23) FIN ACK 無
13發送ACK: 0x000007d3(23) 0xab2b9deb(36) ACK 無
表中序號後面的括弧中是十進位的相對序號,從零開始。三向交握完成,兩端因為各發送一個SYN而各佔用一個序號,資料收發階段,13發送一個21位元組的數
據報,佔用21個序號,1發送一個34位元組的資料報而佔用34個序號,中斷連線階段,兩端因為各發送一個FIN而各佔用一個序號。所以,最後,13共佔用
1+21+1=23個序號(0-22),而1共佔用1+34+1=36個序號(0-35)。
從表中可以看到,如果一端發送一個資料報後,不需要對端回應,緊接著發送第二個資料報,則這兩個資料報實際上會ACK對端的同一個資料報,表中,13的第
一個ACK和(PSH
ACK),都應答了1的(ACK,SYN)。在資料通訊階段,TCP協議對收到的每一個資料報都要進行ACK確認,否則對方會逾時重傳。