博客專欄

        EEPW首頁 > 博客 > 叭叭冷知識--TCP的定時器

        叭叭冷知識--TCP的定時器

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

        TCP提供可靠的端到端數(shù)據(jù)傳輸?shù)臅r候,保證端到端的方法之一就是確認從另一端收到的數(shù)據(jù)。但是數(shù)據(jù)和ACK在傳輸?shù)倪^程中會有丟失的可能性,因此TCP通過在發(fā)送時設置一個定時器來解決這種問題。這期我們就來說說關于TCP的定時器的幾種類型以及它們的作用。

        TCP的定時器可以分為七個類別:

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

        • 重傳定時器(retransmission timer)

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

        • 堅持定時器(persist timer)

        • ?;疃〞r器(keepalive timer)

        • FIN_WAIT_2定時器(FIN_WAIT_2 timer)

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


        建立連接定時器

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


        重傳定時器

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

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

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

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

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


        延遲應答定時器

        延遲應答也被稱為捎帶ACK,這個定時器是在延遲應答的時候使用的。為什么要延遲應答呢?延遲應答是為了提高網絡傳輸?shù)男省?/span>

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


        堅持定時器

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

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


        ?;疃〞r器

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


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



        關鍵詞: TCP的定時器

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 晋宁县| 屯门区| 渝北区| 六枝特区| 宣化县| 富顺县| 孟连| 神农架林区| 安远县| 宣恩县| 白银市| 兰坪| 台安县| 泰州市| 砀山县| 湖北省| 奉新县| 兴化市| 视频| 沧州市| 云龙县| 庆云县| 宁城县| 九寨沟县| 扶沟县| 聊城市| 华阴市| 开平市| 阿尔山市| 溧水县| 凯里市| 汽车| 广元市| 南和县| 耒阳市| 大新县| 卢龙县| 阳泉市| 友谊县| 固镇县| 金寨县|