TCP協議裡的時間

2021-08-22 19:00:47 字數 2122 閱讀 5037

一、建立連線

在傳送syn報文段後,如果在75秒沒有收到相應相應,連線建立將中止。這個時間也就是阻塞connect系統呼叫的超時時間。

二、保活

so_keepalive選項保持連線檢測對方主機是否崩潰,避免(伺服器)永遠阻塞於tcp連線的輸入。設定該選項後,如果2小時內在此套介面的任一方向都沒有資料交換,tcp就自動給對方 發乙個保持存活探測分節(keepalive probe)。這是乙個對方必須響應的tcp分節.它會導致以下三種情況:對方接收一切正常:以期望的ack響應。2小時後,tcp將發出另乙個探測分節。對方已崩潰且已重新啟動:以rst響應。套介面的待處理錯誤被置為econnreset,套介面本身則被關閉。對方無任何響應:源自berkeley 的tcp傳送另外8個探測分節,相隔75秒乙個,試圖得到乙個響應。在發出第乙個探測分節11分鐘 15秒後若仍無響應就放棄。套介面的待處理錯誤被置為etimeout,套介面本身則被關閉。如icmp錯誤是「host unreachable(主機不可達)」,說明對方主機並沒有崩潰,但是不可達,這種情況下待處理錯誤被置為 ehostunreach。

注意這裡面有三個數字:

1.開始首次keepalive探測前的tcp空閉時間,2小時

2.兩次keepalive探測間的時間間隔,75秒

3.判定斷開前的keepalive探測次數,10次

也就是說,總共需要2小時+75秒*10次 = 7950秒

三、重傳

重傳定時器在傳送資料時設定,超時值是計算出來的,取決於rtt和報文已被重傳次數(並沒有包括在以下公式內,但是bsd的實現確實用到了這個資料)。

rtt估計其,r是rtt,m是測量到的rtt,a推薦值為0.9

r = a * r + (1-a) * m

重傳超時時間rto, b推薦值為2

rto = r * b

例外:快速重傳,收到3個重複的ack會立即重傳

四、延時確認,捎帶確認

tcp協議棧收到資料後並不立即傳送ack,而是等待200ms(推薦值,但是這個值不能高於500ms),如果在這段時間有使用者資料需要傳送則一同隨著這個ack傳送。

五、fin_wait_2定時器

某個連線準備關閉連線時,呼叫close函式,傳送fin報文,狀態從syn_rcvd遷移到fin_wait_1,收到這個fin的ack後,遷移到fin_wait_2狀態。

為了防止對端一直不傳送fin,在等待10分鐘後再等待75秒(定時器確實被設定了兩次,所以分開說),超時,連線關閉。

六、2msl定時器

msl是最大報文段生存時間,rfc1122建議是2分鐘,但bsd傳統實現採用了30秒。當連線轉移到time_wait狀態時,即連線主動關閉時,定時器啟動,為兩倍的msl。定時器超時,這時才能重新使用之前連線使用的埠號。這也是為了避免一些意想不到的邊界情況,tcpip詳解第一卷的18.6.1給出了乙個極端的例子。

七、平靜時間

對於來自某個連線的較早替身的遲到報文段, 2 m s l等待可防止將它解釋成使用相同插口對的新連線的一部分。但這只有在處於2 m s l等待連線中的主機處於正常工作狀態時才有效。

如果使用處於2 m s l等待埠的主機出現故障,它會在m s l秒內重新啟動,並立即使用故障前仍處於2 m s l的插口對來建立乙個新的連線嗎?如果是這樣,在故障前從這個連線發出而遲到的報文段會被錯誤地當作屬於重啟後新連線的報文段。無論如何選擇重啟後新連線的初始序號,都會發生這種情況。

為了防止這種情況,rfc 793指出tcp在重啟動後的msl秒內不能建立任何連線。這就稱為平靜時間(quiet time)。

八、so_linger的時間

這個選項會影響close的行為。如果linger結構中的l_onoff域設為非零,並設定了零超時間隔,則close不被阻塞立即執行,不論是否有排隊資料未傳送或未被確認。這種關閉方式會傳送rst報文段,且丟失了未傳送的資料。在遠端的讀呼叫將以econnreset出錯。

若設定了so_linger並確定了非零的超時間隔,則closes呼叫阻塞程序,直到所剩資料傳送完畢或超時。這種關閉稱為「優雅的」關閉。如果套介面置為非阻塞且so_linger設為非零超時,則close呼叫將以ewouldblock錯誤返回。

若在乙個流類套介面上設定了so_dontlinger(等效於so_linger中將linger結構的l_onoff域設為零),則close呼叫立即返回。但是,如果可能,排隊的資料將在套介面關閉前傳送。

TCP協議裡的七種定時器

tcp ip協議,或稱為tcp ip協議棧,或網際網路協議系列,在核心中tcp協議棧有七個型別的定時器。1 連線建立 connection establishment 定時器在傳送syn報文段建立一條新連線時啟動。如果在75秒內沒有收到響應,連線建立將中止。2 重傳 retransmission 定...

TCP IP協議 TCP協議

今天算是對了tcp協議有個膚淺的理解了 儘管tcp和udp都是一樣的網路層ip,但是tcp卻和udp實現著不一樣的服務,tcp是乙個面向連線的,可靠地位元組流服務!面向連線是指 兩個使用tcp的程式要建立乙個tcp連線才能交換資料。tcp以以下方式提供可靠性 1 應用程式被分為tcp認為合適傳送的資...

TCP協議 UDP協議

tcp是面向連線的傳輸層的協議,它在程序互動時,會建立乙個鏈結,然後在傳輸資料之後會取消連線,tcp的鏈結是虛連線。每一條tcp連線只能有兩個端點,只能是點對點的資料鏈結,不能進行廣播。tcp提供可靠的按時交付的 無差錯的 不重複的 按序到達的服務 可靠有序 不丟不重 tcp提供全雙工通訊 傳送快取...