關(guān)鍵詞:網(wǎng)絡(luò)時(shí)鐘之TCP連接的建立與終止
1、時(shí)鐘組網(wǎng)TCP連接的建立過程:
要使用TCP協(xié)議進(jìn)行時(shí)鐘通信,在傳輸數(shù)據(jù)之前,要先建立一條TCP連接。 TCP連接的建立過程和打電話的過程類似。例如,你要給朋友張三打電話(建立與張三的連接),先撥通張三的號(hào)碼(發(fā)送初始化報(bào)文段);張三接通,習(xí)慣的問一聲:“喂"(服務(wù)器端發(fā)送一個(gè)帶確認(rèn)的初始化報(bào)文段);你聽到后也說一聲:“喂"(接到服務(wù)器帶確認(rèn)的初始化報(bào)文段);然后就可以把你想說的事情告訴張三。網(wǎng)絡(luò)時(shí)鐘TCP連接的建立是一個(gè)分為三個(gè)步驟的過程,稱為“三次握手過程"。 其示意圖描述了這樣一個(gè)“三次握手過程",該圖中主機(jī)A要發(fā)起一個(gè)和主機(jī)B之間的TCP連接。
(1)主機(jī)時(shí)鐘A先向主機(jī)時(shí)鐘B發(fā)送一個(gè)初始化報(bào)文段,這個(gè)報(bào)文段是一個(gè)控制報(bào)文段,不包括任何數(shù)據(jù),這個(gè)報(bào)文段可以形式化的表示成“SYN, ISN = 100,MSS = 1024", 這個(gè)報(bào)文段有以下特點(diǎn):
● 控制標(biāo)志位中的SYN位置1,表示這是一個(gè)初始化報(bào)文段;此時(shí)序號(hào)字段中的序號(hào)稱為初始序列號(hào)(Initiative Sequence Number,ISN),本例中 ISN 為 100;
● 沒有數(shù)據(jù)字段;
● 其他控制標(biāo)志位均必須置0;由于ACK位、UGR位都置0,所以確認(rèn)序號(hào)字段、緊急指針字段都沒有意義,一般全部置0;
● 選項(xiàng)字段為MSS報(bào)文段長度值,告訴服務(wù)器端發(fā)送報(bào)文段時(shí),發(fā)送的數(shù)據(jù)量不能大于這個(gè)值。
(2)當(dāng)主機(jī)時(shí)鐘B收到主機(jī)時(shí)鐘A發(fā)來的初始化報(bào)文段后,它知道主機(jī)A要建一個(gè)到它的TCP連接,也要向主機(jī)A發(fā)送一個(gè)初始化報(bào)文段。由于要遵循“帶重傳的肯定確認(rèn)"傳輸原則,除了SYN位置1外,它的ACK位也要置1,序號(hào)字段內(nèi)容是它的初始序列號(hào),本例為300,
確認(rèn)字段應(yīng)該是A的ISN加1,即101。所以它的報(bào)文段表示為“SYN,ISN = 300,ACK = 101,MSS=1024"。
(3)A收到B的初始化報(bào)文段,要發(fā)送一個(gè)對(duì)應(yīng)的確認(rèn)報(bào)文段,這時(shí),它不在是初始化報(bào)文,不用設(shè)置SYN位,它的序號(hào)SEQ應(yīng)該是101,ACK位置1,確認(rèn)序號(hào)為 301??梢员硎緸椤癝EQ = 101,ACK = 301"。 這樣,一個(gè)從主機(jī)時(shí)鐘A到主機(jī)B時(shí)鐘的TCP連接就建成了。
2、時(shí)鐘組網(wǎng)TCP連接的終止
當(dāng)主機(jī)A向主機(jī)B發(fā)送部數(shù)據(jù)之后,就要發(fā)起終止連接的操作了。由于TCP連接的數(shù)據(jù)傳輸是全雙工數(shù)據(jù)傳輸,因此,任何一方都可以自己停止發(fā)送,但是仍然可以接收另一臺(tái)主機(jī)發(fā)來的數(shù)據(jù),直到它也停止發(fā)送。整個(gè)連接關(guān)閉的過程如圖所示。
接上面的例子,假定主機(jī)A主機(jī)B發(fā)送了 299 個(gè)報(bào)文段,則主機(jī)B向主機(jī)A發(fā)送的個(gè)數(shù)據(jù)段確認(rèn)報(bào)文的序號(hào)是599,確認(rèn)號(hào)應(yīng)該是 400。 主機(jī) A 沒有數(shù)據(jù)要發(fā)送了,就要發(fā)送一個(gè) FIN 數(shù)據(jù)流結(jié)束報(bào)文段,其中控制標(biāo)志位中的FIN位置1,表示發(fā)送方數(shù)據(jù)流結(jié)束;ACK標(biāo)志位置1,確認(rèn)序號(hào)位600,序號(hào)是400。報(bào)文段可以表示為“FIN,SEQ=400,ACK=600"。 主機(jī)B收到該FIN報(bào)文,要發(fā)送一個(gè)確認(rèn)報(bào)文段,ACK置1,SEQ = 600,ACK = 401,報(bào)文段表示為“ACK=401"。 主機(jī)B也沒有數(shù)據(jù)要發(fā)送了,就發(fā)送自己的FIN報(bào)文段,SEQ = 600,ACK = 401,報(bào)文段表示為“FIN,SEQ=601,ACK=401"。 主機(jī)A確認(rèn)該FIN報(bào)文段,SEQ = 401,ACK = 601。
【返回】
仟漁 | / |
所有評(píng)論僅代表網(wǎng)友意見,與本站立場(chǎng)無關(guān)。