TCP定時器

一、TCP的7種定時器

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

2、重傳定時器(retransmission timer)

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

4、堅持定時器(persist timer)

5、保活定時器(keepalive timer)

6、FIN_WAIT_2定時器(FIN_WAIT_2 timer)

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

二、這些定時器的特點及應用場景

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

顧名思義,這個定時器是建立連接時候使用的,TCP建立連接需要3次握手,如下圖所示:


建立連接的過程中,在發送SYN時,會啓動一個定時器(默認應該是3秒),如果SYN丟失了,那麼3秒後會重新發送SYN包,當然也不會一直沒完沒了的發SYN包,

在/proc/sys/net/ipv4/tcp_syn_retries可以設置到底要重新發送幾次SYN包。

2、重傳定時器(retransmission timer)

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

a、當TCP發送了位於隊列最前端的報文段後就啓動這個RTO計時器;

b、如果隊列爲空則停止計時器,否則重啓計時器;

c、當計時器超時後,TCP會重傳發送隊列最前端的報文段;

d、當一個或者多個報文段被累計確認後,這個或者這些報文段就會被清除出隊列。

重傳計時器保證了接收端能夠接受到對是的報文段,繼而抱枕了接收端交付給接受進程的數據始終是有序完整的。因爲接收端永遠不會把一個失序不完整的報文段交付給接收進程。

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

延時應答也被稱爲捎帶ACK,這個定時器是在延遲應答的時候使用的。爲什麼要延時應答,延時應答是爲了提高網絡傳輸的效率。

假設服務器端接收到客戶端的數據後,不是立刻回ACK給客戶端,而是等一段時間,這樣如果服務器端要是有數據發給客戶端,那麼這個ACK就和服務器端的數據一起發給

客戶端了,這樣就立即回給客戶端一個ACK節省了一個數據包。

4、堅持定時器(persist timer)

我們知道的TCP通過讓接收方指明希望從發送方接受的數據字節數(窗口大小)來進行流量控制。如果窗口大小爲0會發生什麼情況呢?這將有效地阻止發送方傳輸數據,直到窗口變爲非零爲止。接收窗口變爲非零,就會發送一個確認的ACK指明需要的報文段序列號以及窗口大小。

如果這個確認報文ACK丟失了,則雙方就有可能因爲等待對方二使連接終止:接收方等待的數據,而發送方在等待允許它繼續發送數據的窗口更新。爲了防止這種死鎖情況的發生,發送方使用一個堅持定時器來週期性的向接收方查詢,以便發現窗口是否已增大。這些從發送方發出的報文段稱爲窗口探查。

5、保活定時器(keepalive timer)

TCP連接建立的時候指定了SO_KEEPALIVE,保活定時器纔會生效,如果客戶端和服務器長時間沒有數據交互,那麼需要保活定時器來判斷是否對段還活着,但是這個其實

很不實用,因爲默認是2小時沒有數據交互才探測,時間實在太長了。如果你真的要確認對端是否活着,那麼應該自己實現心跳包,而不是依賴於這個保活定時器。

6、FIN_WAIT_2定時器(FIN_WAIT_2 timer)

主動關閉的一段調用完close以後則進入FIN_WAIT_2狀態。如果這個時候因爲網絡突然斷掉,被動關閉的一段宕機等原因,導致主動關閉的一段不能收到被動關閉的一段

發來的FIN,主動關閉的一段也不能一直等着,站着資源不撒手,這個時候就需要FIN_WAIT_2定時器出馬了,如果在該定時器超時的時候,還沒有收到被動關閉一段發來的FIN,

那麼就直接釋放這個這個鏈接。FIN_WAIT_2定時器的時間可以從/proc/sys/net/tcp_fin_timeout中查看和設置。

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

TIME_WAIT是主動關閉的一段最後進入的狀態,而不是直接變成CLOSED的狀態,爲什麼呢?第一,萬一被動關閉的一段在超時時間內沒有收到最後一個ACK,則會重發最

後的FIN,2MSL(報文段最大生存時間)等待時間保證了重發的FIN會被主動關閉的一段收到且重新發送最後一個ACK;另外一個原因是在2MSL等待時間時,任何遲到的報文

段會被接受並丟棄,防止來的TCP連接的包在新的TCP連接裏面出現。不可避免的,在這個2MSL等待時間內,不會建立同樣(源IP,源端口,目的IP,目的端口)的連接。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章