定義
逾時即當網路設備想在某個特定時間內從另一網路設備上接收信息,但是失敗的情況。其結果常為:重新傳輸信息或解除兩設備間的會話。若
伺服器逾時但尚未掉線,則表明你的
網路連線處於超微弱連結狀態。此時,你可查看Modem的溫度是否過高。若不是很高,則可能你的
網線有問題。再者,這時恰逢
上網高峰期。
逾時訊息是指訊息傳送者發出訊息給接收者並按指定時間等待。如果接收者無法在指定時間內接收訊息。則傳送者放棄這個訊息。如右圖所示是逾時訊息的例子。
偽逾時
在很多情況下,即使沒有出現數據丟失也可能引發重傳。這種不必要的重傳稱為偽重傳(spurious retransmission),其主要造成原因是偽逾時(spurious timeout),即過早判定逾時,其他因素如包失序、包重複,或ACK丟失也可能導致該現象。在實際RTT顯著增長,超過當前RTO時,可能出現偽逾時。在下層協定性能變化較大的環境中(如無線環境),這種情況出現得比較多。
為處理偽逾時問題提出了許多方法。這些方法通常包含檢測(detection)算法與回響(response)算法。檢測算法用於判斷某個逾時或基於計時器的重傳是否真實,一旦認定出現偽逾時則執行回響算法,用於撤銷或減輕該逾時帶來的影響。
重組逾時
一個數據報的任何一個分片首先到達時,IP層就得啟動一個計時器。如果不這樣做的話,不能到達的分片(如右圖所示)可能會最終導致接收方用盡快取,留下一種攻擊機會。清單中的例子由一個特殊程式產生,該程式構造一個ICMPv4回顯請求報文,並且以一定延遲只傳送這個訊息的前面兩個分片,然後不再傳送任何其他分片。右圖顯示了回復(為了簡潔,某些行已被整理)。
這裡我們看到第一個分片(的時間和序列空間)被傳送,總長度是400。第二個分片20s後被傳送,但最後一個分片一直沒被傳送。接收到第一個分片30s後,目標機器回復一個ICMPv4逾時(代碼1)訊息,告訴傳送方數據報已丟失,包括第一個分片的拷貝。一般的逾時時間是30s或60s。正如我們所見,收到任何一個分片時計時器就開始計時,且收到新的分片也不會被重置。因此,計時器給出了同一數據報分片之間可被分隔的最大間隔時間的限度。
逾時處理
數據報套接字通信是不可靠的,傳送的數據有可能丟失。如果數據報丟失,則訊息不會到達服務,服務也不會返回回答。在這種情況下,程式將在recvfrom0調用無限地等待下去。另外,對於流套接字的連線和I/O也存在無限阻塞的情況。為了避免這種無限的等待,我們需要對涉及套接字的I/O操作設定逾時處理,當時間片耗盡時要么重新傳送訊息,要么關閉套接字並退出執行。有三種設定逾時的方法:
(1)調用alrm()使得系統在指定的時間片到期時生成SIGALRM信號。
(2)用select()建立一時間片等待套接字就緒。
(3)使用SO—RCVTIMEO和SO—SNDTIMEO套接字選項,這兩個選項自動對套接字的讀寫設定逾時處理。
這三種方法既可用於輸入也可用於輸出。