超時
事件發生前允許經過的時間周期
系統中某個特殊事件發生之前允許經過的特定時間周期。例如,以撥號方式進入ISP時,通訊軟體設計成等待一個特定的秒數,若在規定的時間內得不到響應,建立起正確的握手信號,則此次撥號被掛斷。另外,當要求進入一個 Web頁面時,如果在規定的時間內不能得到滿足,瀏覽器將會顯示“連接超時”的信息。如果計算機沒有這樣的功能,它會在一直等待一個事件的發生,等到用戶也不耐煩的時候,它還在等,那就不合適了。
超時即當網路設備想在某個特定時間內從另一網路設備上接 收信息,但是失敗的情況。其結果常為:重新傳輸信息或解除兩設備間的會話。若伺服器超時但尚未掉線,則表明你的網路連接處於超微弱鏈接狀態。此時,你可查看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套接字選項,這兩個選項自動對套接字的讀寫設置超時處理。
這三種方法既可用於輸入也可用於輸出。