一個完整的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確認,否則對方會超時重傳。

發佈了20 篇原創文章 · 獲贊 10 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章