細流與TCP¶
大量使用可靠傳輸協議的網際網路服務都表現出我們所稱的“細流”特性。這意味著應用程式傳送資料的速率非常低,以至於傳輸協議的重傳機制無法完全有效。在依賴時間的場景(如線上遊戲、控制系統、股票交易等)中,使用者體驗取決於資料傳輸延遲,丟包對服務質量而言可能是毀滅性的。極高的延遲是由於TCP依賴於應用程式新資料的到達,才能透過快速重傳有效觸發重傳,而不是等待長時間的超時。
在分析了大量依賴時間的互動式應用程式後,我們發現它們通常產生細流,並且在整個生命週期內都保持這種流量模式。時間依賴性與使用TCP時這些流會導致高延遲的結合是不幸的。
為了減少丟包時的應用層延遲,已經開發了一系列機制,以解決細流的這些延遲問題。簡而言之,如果核心檢測到細流,重傳機制將按以下方式修改:
如果流是細流,則在第一個重複ACK時進行快速重傳。
如果流是細流,則不應用指數退避。
這些增強功能僅在流被檢測為細流時應用。這透過定義在途資料包數量的閾值來實現。如果正在傳輸的資料包少於4個,則無法觸發快速重傳,並且該流容易出現高重傳延遲。
由於這些機制是針對依賴時間的應用程式,因此必須由應用程式使用 TCP_THIN_LINEAR_TIMEOUTS 和 TCP_THIN_DUPACK IOCTLS 或 tcp_thin_linear_timeouts 和 tcp_thin_dupack sysctls 來專門啟用它們。預設情況下,這兩種修改都是關閉的。
參考文獻¶
有關這些修改以及大量實驗資料的更多資訊,請參閱此處:
“透過可靠傳輸提高互動式細流應用的延遲” http://simula.no/research/nd/publications/Simula.nd.477/simula_pdf_file