【文章內(nèi)容簡(jiǎn)介】
TCP響應(yīng)該同步過(guò)程, 也可以由通信雙方同時(shí)發(fā)起連接的同步握手。 2022/8/17 25 T C P 實(shí)體A T C P 實(shí)體B 〈 S E Q = 1 0 0 〉〈 C T L = S Y N 〉 〈 S E Q = 3 0 0 〉〈 A C K = 1 0 1 〉〈 C T L = S Y N ,A C K 〉 〈 S E Q = 1 0 1 〉〈 A C K = 3 0 1 〉〈 C T L = A C K 〉 〈 S E Q = 1 0 1 〉〈 A C K = 3 0 1 〉〈 C T L = A C K 〉〈 D A T A 〉 一次 二次 三次 或者 建立連接的三次握手過(guò)程 2022/8/17 26 3. 關(guān)閉連接 由于 TCP連接是一個(gè)全雙工的數(shù)據(jù)通道 , 一個(gè)連接的關(guān)閉必須由通信雙方共同完成 。 當(dāng)通信的一方?jīng)]有數(shù)據(jù)需要發(fā)送給對(duì)方時(shí) , 可以使用 FIN段向?qū)Ψ桨l(fā)送關(guān)閉連接請(qǐng)求 。 這時(shí) , 它雖然不再發(fā)送數(shù)據(jù) , 但并不排斥在這個(gè)連接上繼續(xù)接收數(shù)據(jù) 。 只有當(dāng)通信的對(duì)方也遞交了關(guān)閉連接請(qǐng)求后 , 這個(gè) TCP連接才會(huì)完全關(guān)閉 。 在關(guān)閉連接時(shí),既可以由一方發(fā)起而另一方響應(yīng),也可以雙方同時(shí)發(fā)起。無(wú)論怎樣,收到關(guān)閉連接請(qǐng)求的一方必須使用 ACK段給予確認(rèn)。實(shí)際上, TCP連接的關(guān)閉過(guò)程也是一個(gè)三次握手的過(guò)程。 2022/8/17 27 主機(jī) 1 發(fā)送 DR 并 啟動(dòng)計(jì)時(shí)器 釋放連接 DR DR 發(fā)送 ACK A C K 丟失 主機(jī) 2 啟動(dòng)計(jì)時(shí)器 (超時(shí)) 釋放連接 發(fā)送 DR 并 主機(jī) 1 發(fā)送 DR 并 啟動(dòng)計(jì)時(shí)器 釋放連接 主機(jī) 2 發(fā)送 DR 并 啟動(dòng)計(jì)時(shí)器 DR DR 發(fā)送 ACK 釋放連接 A C K (a) 三次握手釋放連接的正常操作 (b) 最后確認(rèn) TPDU丟失的情況 2022/8/17 28 丟失 A CK DR DR DR DR 主機(jī) 1 主機(jī) 2 釋放連接 發(fā)送 DR 并 啟動(dòng)計(jì)時(shí)器 發(fā)送 DR 并 啟動(dòng)計(jì)時(shí)器 ( 超時(shí) ) 釋放連接 發(fā)送 ACK 發(fā)送 DR 并 發(fā)送 DR 并 發(fā)送 DR 并 啟動(dòng)計(jì)時(shí)器 啟動(dòng)計(jì)時(shí)器 丟失 DR N 個(gè)超時(shí) 釋放連接 丟失 發(fā)送 DR 并 ( 超時(shí) ) 釋放連接 發(fā)送 DR 并 啟動(dòng)計(jì)時(shí)器 發(fā)送 DR 并 發(fā)送 DR 并 啟動(dòng)計(jì)時(shí)器 主機(jī) 1 主機(jī) 2 啟動(dòng)計(jì)時(shí)器 (c) 應(yīng)答丟失的情況 (d) 應(yīng)答丟失以及后續(xù) DR丟失情況 2022/8/17 29 4. 流量控制 在數(shù)據(jù)傳輸過(guò)程中, TCP協(xié)議提供一種基于動(dòng)態(tài)滑動(dòng)窗口協(xié)議的流量控制機(jī)制,使接收方 TCP實(shí)體能夠根據(jù)自己當(dāng)前的緩沖區(qū)容量來(lái)控制發(fā)送方 TCP實(shí)體傳送的數(shù)據(jù)量。 假設(shè)接收方現(xiàn)有 2048 B的緩沖區(qū)空間,如果發(fā)送方傳送了一個(gè) 1024B的報(bào)文段并被正確接收到,那么接收方要確認(rèn)該報(bào)文段。然而,因?yàn)樗F(xiàn)在只剩下 1024B的緩沖區(qū)空間(在應(yīng)用程序從緩沖區(qū)中取走數(shù)據(jù)之前),所以,它只聲明 1024B大小的窗口,期待接收后續(xù)的數(shù)據(jù)。當(dāng)發(fā)送方再次發(fā)送了 1024B的 TCP報(bào)文段后,由于接收方無(wú)剩余的緩沖區(qū)空間,所以,最終的確認(rèn)其聲明的滑動(dòng)窗口大小為 0。 2022/8/17 30 此時(shí)發(fā)送方必須停止發(fā)送數(shù)據(jù)直到接收方主機(jī)上的應(yīng)用程序被確定從緩沖區(qū)中取走一些數(shù)據(jù) , 接收方重新發(fā)出一個(gè)新的窗口值為止 。 當(dāng)滑動(dòng)窗口為 0時(shí),在正常情況下,發(fā)送方不能再發(fā)送 TCP報(bào)文段。但有兩種情況例外,一是緊急數(shù)據(jù)可以發(fā)送,比如,立即中斷遠(yuǎn)程的用戶進(jìn)程;二是為防止窗口聲明丟失時(shí)出現(xiàn)死鎖,發(fā)送方可以發(fā)送 1 B的TCP報(bào)文段,以便讓接收方重新聲明確認(rèn)號(hào)和窗口大小。 2022/8/17 31 5. PUSH操作 在一個(gè) TCP連接上進(jìn)行正常數(shù)據(jù)傳送過(guò)程中 , 發(fā)送方會(huì)按規(guī)定的方式來(lái)分段和發(fā)送上層協(xié)議遞交的數(shù)據(jù) 。 這樣 , 對(duì)于遞交了該數(shù)據(jù)的上層協(xié)議來(lái)說(shuō) , 在數(shù)據(jù)發(fā)送完成前 , 無(wú)法知道自身遞交的數(shù)據(jù)是否在發(fā)送 。 PUSH( 推進(jìn) ) 數(shù)據(jù)機(jī)制可使得上層協(xié)議遞交的數(shù)據(jù)能夠迅速地從本地推向遠(yuǎn)地 , 而不受發(fā)送方當(dāng)前發(fā)送窗口大小和發(fā)送方式所限制 。 當(dāng)發(fā)送方 TCP收到上層協(xié)議的 PUSH操作請(qǐng)求時(shí),它將在流量控制允許的范圍內(nèi)進(jìn)行數(shù)據(jù)分段并發(fā)送本地 TCP緩沖區(qū)中所有數(shù)據(jù)( TCP段頭中的 PSH標(biāo)志位被置位)。當(dāng)接收方 TCP收到帶有 PSH標(biāo)志的 TCP數(shù)據(jù)段后,將迅速把這些數(shù)據(jù)段遞交給上層接收協(xié)議并結(jié)束當(dāng)前的接收命令。 2022/8/17 32 6. 緊急數(shù)據(jù) 任何一個(gè) TCP輸出段都可以攜帶緊急數(shù)據(jù) ( Urgent Data) ,以支持上層協(xié)議間緊急信息的快速