【网络协议】TCP中的四大定时器
? ? 前言?
? ? 對于每個TCP連接,TCP一般要管理4個不同的定時器:重傳定時器、堅(jiān)持定時器、保活定時器、2MSL定時器。
? ? 重傳定時器?
? ? 非常明顯重傳定時器是用來計算TCP報文段的超時重傳時間的(至于超時重傳時間的確定,這里涉及到一大堆的算法,書上有說,我這里不細(xì)談了)。每發(fā)送一個報文段就會啟動重傳定時器,假設(shè)在定時器時間到后還沒收到對該報文段的確認(rèn),就重傳該報文段,并將重傳定時器復(fù)位,又一次計算;假設(shè)在規(guī)定時間內(nèi)收到了對該報文段的確認(rèn),則撤銷該報文段的重傳定時器。
? ? 堅(jiān)持定時器?
? ? 上篇文章中已經(jīng)提到了,主要是為了應(yīng)付零窗體大小通知可能導(dǎo)致的死鎖問題。假設(shè)接收端在向發(fā)送端發(fā)送了零窗體報文段后不久,接收端的接收緩存又有了一些存儲空間,于是接收端向發(fā)送端發(fā)送了一個非零窗體大小的報文段,然而這個報文段在傳送過程中丟失了,發(fā)送端沒有收到該報文段,就一直等待接收端發(fā)送非零窗體的報文通知,而接收端并不知道報文段丟失了,而是覺得已經(jīng)告訴發(fā)送端了,就會一直等待發(fā)送端發(fā)送數(shù)據(jù),假設(shè)沒有不論什么措施的話,這話死鎖的局面會一直延續(xù)下去。
? ? 為了解決問題,TCP為每個連接設(shè)有一個堅(jiān)持定時器(也叫持續(xù)計數(shù)器)。僅僅要TCP連接的一方收到對方的零窗體通知,就啟動堅(jiān)持定時器。若堅(jiān)持定時器設(shè)置的時間到期,就發(fā)送一個零窗體控測報文段(該報文段僅僅有一個字節(jié)的數(shù)據(jù),它有一個序號,但該序號永遠(yuǎn)不須要確認(rèn),因此該序號能夠持續(xù)重傳),之后會出現(xiàn)下面三種情況:
? ? 1、對方在收到探測報文段后,在對該報文段的確認(rèn)中給出如今的窗體值,假設(shè)窗體值仍未零,則收到這個報文段的一方將堅(jiān)持定時器的值加倍并重新啟動。堅(jiān)持計數(shù)器最大僅僅能添加到約60秒,在此之后,每次收到零窗體通知,堅(jiān)持計數(shù)器的值就定位60秒。
? ? 2、對方在收到探測報文段后,在對該報文段的確認(rèn)中給出如今的窗體值,假設(shè)窗體不為零,那么死鎖的僵局就被打破了。
? ? 3、該探測報文發(fā)出后,會同一時候啟動重傳定時器,假設(shè)重傳定時器的時間到期,還沒有收到接收到發(fā)來的響應(yīng),則超時重傳探測報文。
? ? 保活定時器?
? ? 保活定時器是為了應(yīng)對兩個TCP連接間出現(xiàn)長時間的沒有傳輸數(shù)據(jù)的情況。假設(shè)客戶已與server建立了TCP連接,但后來client主機(jī)突然故障,則server就不能再收到client發(fā)來的數(shù)據(jù)了,而server肯定不能這樣永久地等下去,保活定時器就是用來解決問題的。server每收到一次client的數(shù)據(jù),就又一次設(shè)置保活定時器,通常為2小時,假設(shè)2小時沒有收到client的數(shù)據(jù),服務(wù)端就發(fā)送一個探測報文,以后每隔75秒發(fā)送一次,假設(shè)連續(xù)發(fā)送10次探測報文段后仍沒有收到client的響應(yīng),server就覺得client出現(xiàn)了故障,就能夠終止這個連接。
? ? 2MSL定時器?
? ? 2MSL定時器測量一個連接處于TIME—WAIT黃臺的時間,通常為2MSL(報文段壽命的兩倍)。2MSL定時器的設(shè)置主要是為了確保發(fā)送的最后一個ACK報文段能夠到達(dá)對方,并防止之前與本連接有關(guān)的因?yàn)檠舆t等原因而導(dǎo)致已失效的報文被誤判為有效。
? ??轉(zhuǎn)載于:https://www.cnblogs.com/mfrbuaa/p/3861493.html
總結(jié)
以上是生活随笔為你收集整理的【网络协议】TCP中的四大定时器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 吸引顾客办会员卡宣传文案30句
- 下一篇: HTTP协议状态码详解(HTTP Sta