<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
"); //-->

博客專(zhuān)欄

EEPW首頁(yè) > 博客 > 叭叭冷知識--TCP的定時(shí)器

叭叭冷知識--TCP的定時(shí)器

發(fā)布人:szutek 時(shí)間:2023-04-03 來(lái)源:工程師 發(fā)布文章

TCP提供可靠的端到端數據傳輸的時(shí)候,保證端到端的方法之一就是確認從另一端收到的數據。但是數據和ACK在傳輸的過(guò)程中會(huì )有丟失的可能性,因此TCP通過(guò)在發(fā)送時(shí)設置一個(gè)定時(shí)器來(lái)解決這種問(wèn)題。這期我們就來(lái)說(shuō)說(shuō)關(guān)于TCP的定時(shí)器的幾種類(lèi)型以及它們的作用。

TCP的定時(shí)器可以分為七個(gè)類(lèi)別:

  • 建立連接定時(shí)器(connection-establishment timer)

  • 重傳定時(shí)器(retransmission timer)

  • 延遲應答定時(shí)器(delayed ACK timer)

  • 堅持定時(shí)器(persist timer)

  • ?;疃〞r(shí)器(keepalive timer)

  • FIN_WAIT_2定時(shí)器(FIN_WAIT_2 timer)

  • TIME_WAIT定時(shí)器 (TIME_WAIT timer, 也叫2MSL timer)


建立連接定時(shí)器

建立連接定時(shí)器:顧名思義,這個(gè)定時(shí)器是在建立連接的時(shí)候使用的。建立連接的過(guò)程中,在發(fā)送SYN時(shí),會(huì )啟動(dòng)一個(gè)定時(shí)器(默認應該是3秒),如果SYN包丟失了,那么3秒以后會(huì )重新發(fā)送SYN包的(當然還會(huì )啟動(dòng)一個(gè)新的定時(shí)器,設置成6秒超時(shí)),當然也不會(huì )一直沒(méi)完沒(méi)了的發(fā)SYN包,可以自行設置到底要重新發(fā)送幾次SYN包。


重傳定時(shí)器

重傳定時(shí)器在TCP發(fā)送數據時(shí)設定,在計時(shí)器超時(shí)后沒(méi)有收到返回的確認ACK,發(fā)送端就會(huì )重新發(fā)送隊列中需要重傳的報文段。使用RTO重傳計時(shí)器一般有如下規則:

1.當TCP發(fā)送了位于發(fā)送隊列最前端的報文段后就啟動(dòng)這個(gè)RTO計時(shí)器;

如果隊列為空則停止計時(shí)器,否則重啟計時(shí)器;當計時(shí)器超時(shí)后,TCP會(huì )重傳發(fā)送隊列最前端的報文段;

2.當一個(gè)或者多個(gè)報文段被累計確認后,這個(gè)或者這些報文段會(huì )被清除出隊列

重傳計時(shí)器保證了接收端能夠接收到丟失的報文段,繼而保證了接收端交付給接收進(jìn)程的數據始終的有序完整的。因為接收端永遠不會(huì )把一個(gè)失序不完整的報文段交付給接收進(jìn)程。


延遲應答定時(shí)器

延遲應答也被稱(chēng)為捎帶ACK,這個(gè)定時(shí)器是在延遲應答的時(shí)候使用的。為什么要延遲應答呢?延遲應答是為了提高網(wǎng)絡(luò )傳輸的效率。

舉例說(shuō)明,比如服務(wù)端收到客戶(hù)端的數據后,不是立刻回ACK給客戶(hù)端,而是等一段時(shí)間(一般最大200ms),這樣如果服務(wù)端要是有數據需要發(fā)給客戶(hù)端,那么這個(gè)ACK就和服務(wù)端的數據一起發(fā)給客戶(hù)端了,這樣比立即回給客戶(hù)端一個(gè)ACK節省了一個(gè)數據包。


堅持定時(shí)器

我們知道TCP通過(guò)讓接收方指明希望從發(fā)送方接收的數據字節數(即窗口大?。﹣?lái)進(jìn)行流量控制。如果窗口大小為0會(huì )發(fā)生什么情況呢?這將有效地阻止發(fā)送方傳送數據,直到窗口變?yōu)榉?為止。接收端窗口變?yōu)榉?后,就會(huì )發(fā)送一個(gè)確認ACK指明需要的報文段序號以及窗口大小。

如果這個(gè)確認ACK丟失了,則雙方就有可能因為等待對方而使連接終止:接收方等待接收數據(因為它已經(jīng)向發(fā)送方通告了一個(gè)非0的窗口),而發(fā)送方在等待允許它繼續發(fā)送數據的窗口更新。為防止這種死鎖情況的發(fā)生,發(fā)送方使用一個(gè)堅持定時(shí)器 (persist timer)來(lái)周期性地向接收方查詢(xún),以便發(fā)現窗口是否已增大。這些從發(fā)送方發(fā)出的報文段稱(chēng)為窗口探查 (window probe)。


?;疃〞r(shí)器

在TCP連接建立的時(shí)候指定了SO_KEEPALIVE,?;疃〞r(shí)器才會(huì )生效。如果客戶(hù)端和服務(wù)端長(cháng)時(shí)間沒(méi)有數據交互,那么需要?;疃〞r(shí)器來(lái)判斷是否對端還活著(zhù),但是這個(gè)其實(shí)很不實(shí)用,因為默認是2小時(shí)沒(méi)有數據交互才探測,時(shí)間實(shí)在是太長(cháng)了。如果你真的要確認對


*博客內容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀(guān)點(diǎn),如有侵權請聯(lián)系工作人員刪除。



關(guān)鍵詞: TCP的定時(shí)器

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>