Feb 2, 2008

TCP/IP 明確擁塞通知 (ECN)

當路由器擁塞的程度已經達到填滿傳入封包緩衝區而開始捨棄封包時,會影響網路而縮減頻寬,對資料損失敏感或具時效性的傳輸量流動會進而受到衝擊,而且可能在擁塞之後產生連結閒置時間。TCP/IP 明確擁塞通知 (ECN) 讓路由器能夠通知「傳輸控制通訊協定」(TCP) 對等體,由於網路擁塞,緩衝區已滿。TCP 對等體會以減緩資料傳輸來回應,協助防止封包損失。

明確擁塞通知(Explicit Congestion Notification)
TCP/IP 的 ECN 支援同時使用 IP 及 TCP 標頭中的未使用位元。

• 在 (IP) 網際網路層上,轉送封包時,傳送主機必須能夠表示有能力執行 ECN,而路由器則必須能夠指出所遇到的擁塞狀況。

• 在 (TCP) 傳輸層,TCP 對等體必須彼此表明有能力執行 ECN。接收端對等體必須能夠通知傳送端對等體,已經從遇到擁塞狀況的路由器接到封包;傳送端對等體必須能夠通知接收端對等體,已經從接收端對等體接到擁塞指標,並且已經降低傳輸速率。

IP 中的 ECN 支援
IP 標頭中的 8 位元 [Type of Service (TOS)] 欄位最先定義於 RFC 791 中,指出封包由路由器進行非預設傳送的傳送優先順序、延遲、輸送量、可靠性,以及成本等特性。TOS 欄位在 RFC 2474 中重新定義,以包含 6 位元區別服務代碼點 (Differentiated Services Code Point, DSCP) 及兩個未使用的位元。DSCP 值表示的傳送優先順序會對應於先前在內部網路的路由器中設定的佇列。IP 中的 ECN 支援使用 RFC 2474 所定義 TOS 欄位的兩個未使用位元。[圖 1] 顯示 ECN 中 TOS 欄位的新定義。



圖 1:ECN 中 TOS 欄位的新定義


RFC 2474 所定義 TOS 欄位中的兩個未使用位元在 RFC 3168 中定義為 ECN 欄位,欄位的值如下:

• 00 傳送主機不支援 ECN。

• 01 或 10 傳送主機支援 ECN。

• 11 路由器已遇到擁塞狀況。


具備 ECN 功能的主機傳送其封包時,會將 ECN 欄位設定為 01 或 10。對於具備 ECN 功能的主機所傳送的封包,如果路徑中的路由器具備 ECN 功能,但是正遇到擁塞狀況,則 ECN 欄位會設定為 11。一旦 ECN 欄位設定為 11 之後,路徑中通往目的地的下游路由器都不會修改其值。

TCP 中的 ECN 支援
當路由器將 IP 封包的 ECN 欄位設定為 11 時,接收端 (而不是傳送端) 就會接到路徑中擁塞的通知。ECN 使用 TCP 標頭向傳送端指出網路正遇到擁塞狀況,同時向接收端指出傳送端已經從接收端接到擁塞指標,並且降低傳輸速率。

TCP 中的 ECN 支援使用 TCP 標頭中的兩個未使用位元 (先前定義為保留)。為 ECN 支援定義的兩個新旗標如下所示:

ECN-Echo (ECE) 旗標是用來指出,在 TCP 三方信號交換程序期間,TCP 對等體具備 ECN 功能,並指出 ECN 欄位在 IP 標頭中設定為 11 的連線上接到 TCP 區段。如需有關 TCP 三方信號交換程序的資訊,請參閱 RFC 793。

Congestion Window Reduced (CWR) 旗標是由傳送主機設定,指出已接到設定 ECE 旗標的 TCP 區段。擁塞視窗是由 TCP 維護的內部變數,可管理傳送視窗的大小。


[圖 2] 顯示 TCP 標頭中 ECE 和 CWR 旗標相對於其它旗標的位置。如需有關 TCP 標頭中其它旗標的資訊,請參閱 RFC 793。



圖 2:TCP 標頭中的 ECE 和 CWR 旗標觀看完整大小的影像


當兩個具備 ECN 功能的 TCP 對等體建立 TCP 連線時,它們交換 Synchronize (SYN)、SYN-Acknowledgement (SYN-ACK)ACK 區段。SYN 區段已經針對具備 ECN 功能的 TCP 對等體同時設定 ECE 和 CWR 旗標;但是 SYN-ACK 區段則是設定 ECE 旗標,同時清除 CWR 旗標。

具備 ECN 功能的主機為具備 ECN 功能的 TCP 連線傳送 TCP 區段,其 IP 標頭中的 ECN 欄位設定為 10 或 01;具備 ECN 功能而且遇到擁塞的路由器會將 IP 標頭中的 ECN 欄位設定為 11。當接收端 TCP 對等體傳送 ACK (其中包含 ECN 欄位設定為 11 的已接收 TCP 區段) 時,會設定 TCP 標頭中的 ECE 旗標,並繼續在後續 ACK 中設定 ECE 旗標。

當傳送主機接到設定了 ECE 旗標的 ACK 時,所表現的行為就好像已經捨棄了封包,開始縮減其傳送視窗,並執行慢速啟動演算法及擁塞避免演算法。在下一個區段,傳送端會設定 CWR 旗標。在接到設定了 CWR 旗標的新區段時,接收端會停止在後續 ACK 中設定 ECE 旗標。

ECN 範例
[圖 3] 顯示具備 ECN 功能的 TCP 對等體之間的 TCP 連線範例,其具備 ECN 功能的路由器正遇到擁塞狀況。



圖 3:TCP 連線的 ECN 範例 觀看完整大小的影像


在此範例中,TCP 對等體 A 正傳送資料給 TCP 對等體 B。TCP 對等體 A 傳送區段 1 到 5,區段 2 由遇到擁塞而具備 ECN 功能的路由器轉送,路由器將 IP 標頭中的 ECN 欄位設定為 11;當 TCP 對等體 B 接到此區段時,會傳送已設定 ECE 旗標的 ACK。當 TCP 對等體 A 接到第一個已設定 ECE 旗標的 ACK 時,便開始降低其傳輸速率,並傳送下一個已設定 CWR 旗標的區段 (區段 6)。在接到設定了 CWR 旗標的區段 6 時, TCP 對等體 B 便開始傳送已清除 ECE 旗標的後續 ACK。

如需各種不同 TCP 資料流程之行為的詳細資訊,請參閱 RFC 3168。

Windows 中的 ECN 支援
Window Vista 發行的 Release Candidate 1 支援 ECN,但預設為停用。若要啟用 ECN 支援,請使用 netsh interface tcp set global ecncapability=enabled 命令。由於 ECN 是使用 IP 和 TCP 標頭中先前定義為未使用或保留的位元,中介網路裝置 (如路由器和防火牆) 可能會在 ECN 欄位設定為非零值時,在幕後捨棄封包。若要確保網路不會捨棄具有 ECN 標示的 TCP/IP 流量,請調查您的網路配備並執行適當的設定或更新,以確保不會捨棄具有 ECN 標示的封包。
Post a Comment