連線建立(connection establishment)定時器,在傳送syn報文段建立一條新連線時啟動。如果沒有在72秒內收到響應,連線建立將中止。
重傳(retransmission)定時器,在tcp傳送資料時設定。如果定時器已超時而對方的確認還未到達,tcp將重傳資料。重傳定時器的值(即tcp等待對方確認的時間)是動態計算的,取決於tcp為該連線測量的往返視覺和該報文段已被重傳的次數。延遲應答(delayed ack)定時器,接收端收到資料必須確認但無需馬上發出確認的資料時設定。tcp等待200ms後傳送確認響應。如果,在這200ms內,有資料要在該連線上傳送,延遲的ack響應就可隨著資料一起傳送回對端,稱為捎帶確認。
堅持(persist)定時器,在接收端通告接受視窗為0,阻止tcp繼續傳送資料時設定。由於接受端傳送的視窗通告不可靠(只有資料才會被確認,ack不會被確認),允許tcp繼續傳送資料的後續視窗更新有可能丟失。因此,如果tcp有資料要傳送,但接受端通告接受視窗為0,則堅持定時器啟動,超時後向接收端傳送1個位元組的資料,判定接收端接收視窗是否已經開啟。與重傳定時器類似,堅持定時器的值也是動態計算的,取決於連線的往返時間,在5秒和60秒之間取值。
保活(keepalive)定時器,如果連線的連續空閒視覺超過2小時,保活定時器超時,向對方傳送連線探測報文段,強迫對方響應。如果收到了期待的響應,tcp可確定對方主機正常工作,否則,tcp可確定對方主機已經重啟或者故障。在通訊程序選取了socket的so_keepalive選項時生效。2小時太長,一般獨自設定心跳協議。
fin_wait2定時器,主動關閉的一端呼叫完close以後(即發fin給被動關閉的一端,並且收到其對fin的確認ack)則進入fin_wait_2狀態。如果這個時候因為網路突然斷掉、被動關閉的一段宕機等原因,導致主動關閉的一端不能收到被動關閉的一端發來的fin,主動關閉的一端總不能一直等著,這是設定fin_wait_2定時器,如果在該定時器超時的時候,還是沒收到被動關閉一端傳送來的fin,那麼直接釋放這個鏈結。time_wait定時器,也稱為2msl(maximum segment lifetime,報文段最大生存時間)定時器。即兩倍最大報文段生存時間定時器(window:msl=2min,linux:msl=60s,unix:msl=30s)。主動關閉連線的一端最後進入的狀態不是直接變成closed的狀態而是time_wait狀態。
time_wait定時器主動關閉連線的一端最後進入的狀態不是直接變成closed的狀態而是time_wait狀態。原因:
(1)如果被動關閉的一端在超時時間內沒有收到最後乙個ack,則會重發最後的fin,2msl等待時間保證了重發的fin會被主動關閉的一端收到且重新傳送最後乙個ack;(2)在2msl等待時間內,任何遲到的報文段會被接受並丟棄,防止老的tcp連線的包在新的tcp連線裡出現。
TCP協議裡的七種定時器
tcp ip協議,或稱為tcp ip協議棧,或網際網路協議系列,在核心中tcp協議棧有七個型別的定時器。1 連線建立 connection establishment 定時器在傳送syn報文段建立一條新連線時啟動。如果在75秒內沒有收到響應,連線建立將中止。2 重傳 retransmission 定...
TCP協議中的定時器
tcp協議中的定時器 1 連線建立 connection establishment 定時器 在傳送syn報文段建立一條新連線時啟動。如果在75秒內沒有收到響應,連線建立將中止。2 重傳 retransmission 定時器 在tcp傳送某個資料段時設定。在滑動視窗協議中,接受視窗會在連續收到的包序...
TCP協議中的定時器
1 連線建立 connection establishment 定時器 在傳送syn報文段建立一條新連線時啟動。如果在75秒內沒有收到響應,連線建立將中止。2 重傳 retransmission 定時器 在tcp傳送某個資料段時設定。在滑動視窗協議中,接受視窗會在連續收到的包序列中的最後乙個包向接收...