程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> TCP 四種定時器(重傳定時器,堅持計時器,保活定時器,時間等待計時器)

TCP 四種定時器(重傳定時器,堅持計時器,保活定時器,時間等待計時器)

編輯:更多關於編程

TCP 四種定時器(重傳定時器,堅持計時器,保活定時器,時間等待計時器)。本站提示廣大學習愛好者:(TCP 四種定時器(重傳定時器,堅持計時器,保活定時器,時間等待計時器))文章只能為提供參考,不一定能成為您想要的結果。以下是TCP 四種定時器(重傳定時器,堅持計時器,保活定時器,時間等待計時器)正文


TCP 四種定時器

重傳定時器

主要為了防止報文丟失或者阻塞。當A向B發送報文時,就會啟動重傳定時器,若在定時器到達之後,仍沒有收到B的確認報文,則A會重新發送上次發送的報文。同時,令重傳定時器復位。繼續計時。

堅持計時器

此計時器針對下面場景:

當B向A發送了0窗口報文,B此時已經沒有空間接受A發送的數據了,通知A停止發送。A在收到後即停止發送,等待一段時間後,B有了一些空間,可以繼續接收了。此時再向A發送非0窗口報文。如果此非0窗口報文在網絡中阻塞或者丟失了,那麼A將永遠以為B沒有空間接收數據,B也永遠在等待A發來的數據。這樣就會造成死鎖的局面。

在A接收到B發送的0窗口報文後,就設立堅持定時器,當定時器到達後,A就像B發送一個探測報文。B收到探測報文後會給出A確認報文。

* 確認報文中的窗口值不是0,則死鎖局面打開。
* 確認報文中的窗口值是0,則重置堅持定時器,並將時間翻倍,但是最大不能超過60秒。(到達60後,以後都是60秒)
* A在發送探測報文後,啟動重傳定時器,若沒有收到B的確認報文,則重傳探測報文。

保活定時器

應用場景:客戶機因為某些故障退出,而服務器並不知道,還在一直等待客戶機發來的數據,這樣就白白浪費了計算機資源。

在服務器端設置保活計時器,服務器每收到客戶機的一次消息,就重置保活計時器,時間通常為2小時。若2個小時都沒有收到客戶機發來的消息,服務器就像客戶機發送一個探測報文,以後每隔75分鐘發送一次。若連續發送了10個探測報文後客戶機仍無響應,則服務器就會認為客戶機故障,並斷開這次連接。

時間等待計時器

時間等待及時器用於TCP“四次揮手”階段。當客戶端向服務器發送最後一次確認報文時,就設定一個時間等待及時器,等待2MSL時間後再結束連接。

MSL:最長報文段壽命,大小為30s~2分鐘。根據不同的應用有不同的設置。

客戶機為什麼要等待2MSL時間?

①為了保證服務器能夠收到客戶機發送的最後一個確認報文。

因為這個最後報文可能丟失,服務器收不到客戶機的確認信息,就無法進入CLOSED狀態。就會在重傳定時器到達後重新發送上一次的報文(此時會重置時間等待計時器,再次等待2MSL時間),這樣客戶機在等待2MSL時間過程中就可以收到這個重傳報文,並重新發送確認報文。

②防止出現“已失效的連接請求報文”再次出現的情況。

客戶機在等待的這2MSL時間中,就可以使此次連接的所有報文都從網絡中消失,這樣在下一次新的連接中就不會出現舊的連接請求報文。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

[db:作者簡介][db:原文翻譯及解析]
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved