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