TCP 四種定時器(重傳定時器,堅持計時器,?;疃〞r器,時間等待計時器)
TCP 四種定時器
重傳定時器
主要為了防止報文丟失或者阻塞。當(dāng)A向B發(fā)送報文時,就會啟動重傳定時器,若在定時器到達(dá)之后,仍沒有收到B的確認(rèn)報文,則A會重新發(fā)送上次發(fā)送的報文。同時,令重傳定時器復(fù)位。繼續(xù)計時。
堅持計時器
此計時器針對下面場景:
當(dāng)B向A發(fā)送了0窗口報文,B此時已經(jīng)沒有空間接受A發(fā)送的數(shù)據(jù)了,通知A停止發(fā)送。A在收到后即停止發(fā)送,等待一段時間后,B有了一些空間,可以繼續(xù)接收了。此時再向A發(fā)送非0窗口報文。如果此非0窗口報文在網(wǎng)絡(luò)中阻塞或者丟失了,那么A將永遠(yuǎn)以為B沒有空間接收數(shù)據(jù),B也永遠(yuǎn)在等待A發(fā)來的數(shù)據(jù)。這樣就會造成死鎖的局面。
在A接收到B發(fā)送的0窗口報文后,就設(shè)立堅持定時器,當(dāng)定時器到達(dá)后,A就像B發(fā)送一個探測報文。B收到探測報文后會給出A確認(rèn)報文。
* 確認(rèn)報文中的窗口值不是0,則死鎖局面打開。
* 確認(rèn)報文中的窗口值是0,則重置堅持定時器,并將時間翻倍,但是最大不能超過60秒。(到達(dá)60后,以后都是60秒)
* A在發(fā)送探測報文后,啟動重傳定時器,若沒有收到B的確認(rèn)報文,則重傳探測報文。
?;疃〞r器
應(yīng)用場景:客戶機(jī)因為某些故障退出,而服務(wù)器并不知道,還在一直等待客戶機(jī)發(fā)來的數(shù)據(jù),這樣就白白浪費了計算機(jī)資源。
在服務(wù)器端設(shè)置?;钣嫊r器,服務(wù)器每收到客戶機(jī)的一次消息,就重置?;钣嫊r器,時間通常為2小時。若2個小時都沒有收到客戶機(jī)發(fā)來的消息,服務(wù)器就像客戶機(jī)發(fā)送一個探測報文,以后每隔75分鐘發(fā)送一次。若連續(xù)發(fā)送了10個探測報文后客戶機(jī)仍無響應(yīng),則服務(wù)器就會認(rèn)為客戶機(jī)故障,并斷開這次連接。
時間等待計時器
時間等待及時器用于TCP“四次揮手”階段。當(dāng)客戶端向服務(wù)器發(fā)送最后一次確認(rèn)報文時,就設(shè)定一個時間等待及時器,等待2MSL時間后再結(jié)束連接。
MSL:最長報文段壽命,大小為30s~2分鐘。根據(jù)不同的應(yīng)用有不同的設(shè)置。
客戶機(jī)為什么要等待2MSL時間?
①為了保證服務(wù)器能夠收到客戶機(jī)發(fā)送的最后一個確認(rèn)報文。
因為這個最后報文可能丟失,服務(wù)器收不到客戶機(jī)的確認(rèn)信息,就無法進(jìn)入CLOSED狀態(tài)。就會在重傳定時器到達(dá)后重新發(fā)送上一次的報文(此時會重置時間等待計時器,再次等待2MSL時間),這樣客戶機(jī)在等待2MSL時間過程中就可以收到這個重傳報文,并重新發(fā)送確認(rèn)報文。
②防止出現(xiàn)“已失效的連接請求報文”再次出現(xiàn)的情況。
客戶機(jī)在等待的這2MSL時間中,就可以使此次連接的所有報文都從網(wǎng)絡(luò)中消失,這樣在下一次新的連接中就不會出現(xiàn)舊的連接請求報文。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關(guān)文章
Unity3D中shader 輪廓描邊效果實現(xiàn)代碼
這篇文章主要介紹了Unity3D中shader 輪廓描邊效果的相關(guān)資料,需要的朋友可以參考下2017-03-03詳解為什么現(xiàn)代系統(tǒng)需要一個新的編程模型
如今高要求的分布式系統(tǒng)的建造者遇到了不能完全由傳統(tǒng)的面向?qū)ο缶幊?OOP)模型解決的挑戰(zhàn),但這可以從Actor模型中獲益。2021-05-05一文讀懂modbus slave和modbus poll使用說明
modbus poll和modbus slave是一款實用的modbus開發(fā)和調(diào)試工具,可以非常方便的進(jìn)行modbus調(diào)試,是非常有用的Modbus主機(jī)/從機(jī)模擬程序,這篇文章給大家介紹modbus slave和modbus poll使用說明,感興趣的朋友一起看看吧2021-04-04