|
這次,我們在實驗環(huán)境中,通過一個完整的TCP從三次握手建立連接,互相各發(fā)送一個數(shù)據(jù)報,然后通過四次握手?jǐn)嚅_連接的流程,來看看一般的TCP網(wǎng)絡(luò)通訊是怎么一個樣子的。我們還是在172.16.48.13(以下簡稱13)上建立一個TCP客戶端進程,連接172.16.48.1(以下簡稱1)的5002端口。然后向1發(fā)送一個數(shù)據(jù)報,1收到后,向13也發(fā)送一個數(shù)據(jù),然后13發(fā)送FIN主動斷開連接。1也隨后發(fā)送它的FIN,完成斷開連接,這整個過程,總共有11個數(shù)據(jù)報,其中三次握手3個,數(shù)據(jù)通訊4個,斷開連接4個。下面我們列出這11個數(shù)據(jù)報的主要內(nèi)容,為簡潔起見,略去如源和目的端口等一些非關(guān)鍵信息。
序號 確認(rèn)序號 標(biāo)志 數(shù)據(jù)
三次握手建立連接:
13發(fā)送SYN: 0x000007bc(0) 0x00000000(0) SYN 無
1發(fā)送ACK,
并同時發(fā)送SYN: 0xab2b9dc7(0) 0x000007bd(1) SYN ACK 無
13發(fā)送ACK: 0x000007bd(1) 0xab2b9dc8(1) ACK 無
數(shù)據(jù)收發(fā):
13發(fā)送數(shù)據(jù)報: 0x000007bd(1) 0xab2b9dc8(1) PSH ACK 21字節(jié)負(fù)載數(shù)據(jù)
1發(fā)送ACK: 0xab2b9dc8(1) 0x000007d2(22) ACK 無
1發(fā)送數(shù)據(jù)報: 0xab2b9dc8(1) 0x000007d2(22) PSH ACK 34字節(jié)負(fù)載數(shù)據(jù)
13發(fā)送ACK: 0x000007d2(22) 0xab2b9dea(35) ACK 無
四次握手?jǐn)嚅_連接:
13發(fā)送FIN: 0x000007d2(22) 0xab2b9dea(35) FIN ACK 無
1發(fā)送ACK: 0xab2b9dea(35) 0x000007d3(23) ACK 無
1發(fā)送FIN: 0xab2b9dea(35) 0x000007d3(23) FIN ACK 無
13發(fā)送ACK: 0x000007d3(23) 0xab2b9deb(36) ACK 無
表中序號后面的括號中是十進制的相對序號,從零開始。三次握手完成,兩端因為各發(fā)送一個SYN而各占用一個序號,數(shù)據(jù)收發(fā)階段,13發(fā)送一個21字節(jié)的數(shù)據(jù)報,占用21個序號,1發(fā)送一個34字節(jié)的數(shù)據(jù)報而占用34個序號,斷開連接階段,兩端因為各發(fā)送一個FIN而各占用一個序號。所以,最后,13共占用1+21+1=23個序號(0-22),而1共占用1+34+1=36個序號(0-35)。
從表中可以看到,如果一端發(fā)送一個數(shù)據(jù)報后,不需要對端回應(yīng),緊接著發(fā)送第二個數(shù)據(jù)報,則這兩個數(shù)據(jù)報實際上會ACK對端的同一個數(shù)據(jù)報,表中,13的第一個ACK和(PSH ACK),都應(yīng)答了1的(ACK,SYN)。在數(shù)據(jù)通訊階段,TCP協(xié)議對收到的每一個數(shù)據(jù)報都要進行ACK確認(rèn),否則對方會超時重傳。
|
|