在網絡通信中,擁塞是一個常見的問題,尤其是在高負載時期或網絡拓撲結構不完善的情況下。傳統的擁塞控制方法主要通過丟包來指示網絡擁塞,當路由器的緩沖區滿時,會丟棄數據包,發送方通過檢測丟失的數據包來進行擁塞控制。然而,丟包會導致重傳,增加網絡負擔,降低網絡性能。
ECN(Explicit Congestion Notification)是一種改進后的擁塞控制方法,它不依賴于丟包來指示擁塞,而是在數據包的頭部標記擁塞發生的信號。ECN通過向數據包的 IP 頭部添加一個特殊的標記位告知發送方網絡發生了擁塞。
ECN的工作原理
ECN 的工作原理可以分為三個主要階段:標記、回傳、響應。
標記(第一階段):當路由器的緩沖區開始出現擁塞時,它會檢查傳入的數據包。如果緩沖區超過了某個閾值,路由器會修改數據包的 IP 頭部,在其中設置 ECN 位,表示網絡出現了擁塞。
回傳(第二階段):標記了 ECN 位的數據包繼續在網絡中傳輸,它們不會被丟棄。這使得接收方能夠收到所有數據包,無需等待重傳。
響應(第三階段):接收方收到帶有 ECN 標記的數據包后,會向發送方發送一條特殊的通知(CNP),告知發送方網絡發生了擁塞。發送方收到通知后,會根據接收方的指示適當調整發送速率,以降低網絡擁塞的程度。
通過這種方式,ECN 可以更及時地指示網絡擁塞,并且避免了丟包帶來的額外開銷,從而提高了網絡的性能和效率。
ECN在網絡層的實現
ECN在IP頭部中需要2個比特位來承載信息,它在IPv4位于IP頭部TOS字段中,示意圖如下:

(Differentiated Services Field (區分服務領域):DS Field的兩個部分DSCP和CU組合成一個可擴展性相對較強的方法以此來保證IP的服務質量。)
ECN在 IPv4 和 IPv6 頭部中的位置和功能是類似的,但由于兩者頭部結構不同,其具體位置也存在差異。如下表:
| 特性維度 | IPv4 | IPv6 |
| ?頭部結構? | 可變長度頭部(通常20字節,可帶選項) | 固定40字節基本頭部,擴展功能通過擴展頭部實現 |
| ?ECN字段位置? | 重新定義的 ?ToS(服務類型)字節的后2位(第7-8位) | ?Traffic Class(流量類別)字節的后2位(第7-8位) |
| ?ECN字段大小? | 2比特 | 2比特 |
| ?ECN碼點含義? | 00: Non-ECT (不支持ECN) 01: ECT(1) (支持ECN) 10: ECT(0) (支持ECN) 11: CE (經歷擁塞) | 00: Non-ECT (不支持ECN) 01: ECT(1) (支持ECN) 10: ECT(0) (支持ECN) 11: CE (經歷擁塞) |
| ?所屬字段? | 該8位字段前6位為DS(差分服務)字段,后2位為ECN字段?(如圖) | 該8位字段前6位為Traffic Class字段,后2位為ECN字段? |
支持ECN的標識
支持ECN的發送端(如服務器)在發出IP數據包時,會將其IP頭部的ECN字段設置為 ECT(0)或 ECT(1)。這相當于向網絡宣告:“我這個數據包是可以被ECN標記的,如果遇到擁塞,請標記我,不要丟棄我。”
擁塞標記
當支持ECN的網絡設備(如路由器、交換機)檢測到其緩沖區隊列開始出現擁塞(但尚未滿到需要丟包的程度)時,它會檢查正在通過的數據包的ECN字段。如果該字段是 ECT(0)或 ECT(1),設備就會將其修改成 CE (11)。這個動作是ECN的核心—顯式擁塞通知。
信息回傳
接收端收到帶有 CE 標記的數據包后,會通過其傳輸層協議(如 TCP ACK 包中的 ECN-Echo 標志位)通知發送端。發送端接到通知后,便會像檢測到丟包一樣降低發送速率,從而緩解擁塞。
ECN在傳輸層的實現
TCP
ECN在傳輸層的實現,是其發揮“端到端”擁塞控制作用的關鍵一環。在數據傳輸前,發送方和接收方必須通過三次握手 (Three-Way Handshake) 建立一個穩定的連接。TCP協議負責接收來自網絡層(IP)的擁塞信號,并將其反饋給發送方,最終觸發發送方的速率調整。
TCP 通過其首部中的兩個標志位來實現 ECN 功能。

這2位有4種可能組合,每種組合被稱為碼點
| CWR | ECE | 碼點 | 發送自 | 目標 | |
| 1 | 0 | 0 | Non-ECN set up | 任意 | 任意 |
| 2 | 0 | 1 | ECN Echo | 接收方 | 發送方 |
| 3 | 1 | 0 | Congestion window reduced | 發送方 | 接收方 |
| 4 | 1 | 1 | ECN Setup | 發送方 | 接收方 |
- ECE (ECN-Echo):用于接收方向發送方回顯擁塞通知。當接收方收到一個被網絡設備標記為擁塞體驗(CE)的數據包時(接上一節內容),它會在后續返回的 ACK 包中設置 ECE=1,以此通知發送方網絡發生了擁塞。
- CWR (Congestion Window Reduced):用于發送方向接收方確認已降低發送速率。當發送方收到一個 ECE=1 的 ACK 包并做出降速響應后,它會在下一個數據包中設置 CWR=1,以此告知接收方:“我已收到擁塞通知并已采取行動”。
UDP
UDP也是網絡中傳輸層的一個核心協議,那么它和TCP的區別又是什么呢?
| 特性 | UDP (用戶數據報協議) | TCP (傳輸控制協議) |
| ?連接性? | ?無連接? 發送數據前無需建立連接,直接發送。 | ?面向連接? 通信前需通過“三次握手”建立可靠連接。 |
| ?可靠性? | ?不可靠? 不保證數據包順序、不重傳丟失或出錯包。 | ?可靠? 通過確認、重傳等機制確保數據正確有序送達。 |
| ?控制機制? | 無流量控制、無擁塞控制。 | 有復雜的流量控制和擁塞控制機制(如滑動窗口)。 |
| ?數據單元? | ?面向報文? 應用層交給UDP多長的報文,UDP就發送多長。 | ?面向字節流? 將數據視為無結構的字節流進行傳輸。 |
| ?速度開銷? | ?傳輸速度快? 頭部開銷?。ü潭?字節),延遲低。 | 相對較慢 頭部開銷大(最小20字節),延遲較高。 |
| ?適用場景? | 實時應用:音視頻通話、直播、在線游戲、DNS查詢等。 | 可靠性要求高的應用:文件傳輸、網頁瀏覽、郵件等。 |

UDP 本身是無連接、無狀態的協議,不像 TCP 那樣有復雜的確認和重傳機制。因此,ECN 在 UDP 中的實現方式與 TCP 不同,通常需要應用程序的更多參與或依賴配套的反饋協議。
發送方(應用程序)需要通過特定的 API(如 IP_ECNsocket 選項)來檢測路徑是否支持 ECN,并在發出的 UDP 數據包的 IP 頭部設置 ECT 碼點(ECT(0) 或 ECT(1)),表明該數據包支持 ECN。
當支持 ECN 的網絡設備將 UDP 數據包標記為 CE 后,接收方需要檢測到這一標記。由于 UDP 沒有類似 TCP 的 ACK 機制,接收方需要生成一個專門的 CNP (Congestion Notification Packet, 擁塞通知報文),CNP報文內部會攜帶引發擁塞的原始數據流的關鍵信息(源和目標IP地址、傳輸層端口號、擁塞程度信息、QP(Queue Pair)信息),并將其發送回源發送方。發送方在收到 CNP 后,需要主動降低數據發送速率。

ECN在RDMA中的實現方式
在高性能計算和數據中心環境中,RoCEv2 也廣泛使用 ECN。其實現方式與 UDP 類似,因為 RoCEv2 運行在 UDP 之上。
支持 ECN 的交換機在檢測到擁塞時,會標記 RoCEv2 數據包的 IP 頭 ECN 字段為 CE。接收端網卡生成專門的 CNP(擁塞通知報文),其中包含導致擁塞的流量源信息,CNP 被發送回引發擁塞的發送端主機,發送端主機收到 CNP 后,會根據DCQCN(數據中心量化擁塞通知) 等算法調整相應數據流的發送速率。
智算中心的硬件核心在于為 RoCEv2提供穩定、高性能的無損網絡環境。這不僅需要網卡支持,更需要交換機的深度配合。CX-N系列數據中心交換機通過其超低時延、無損網絡技術、對大容量緩存的優化、高級遙測功能以及對自動化運維的支持,為DCQCN協議在AI計算、高性能計算等場景中的高效、穩定運行提供了堅實的硬件基礎。
-
數據中心
+關注
關注
18文章
5647瀏覽量
75009
發布評論請先 登錄
適用于數據中心和AI時代的800G網絡
PCIe協議分析儀在數據中心中有何作用?
數據中心太耗電怎么辦
數據中心網絡進行監控和管理如何操作
數據中心中網絡擁塞的危害及其疏散方法的介紹
基于數據中心網絡拓撲感知型擁塞控制算法
基于流調度代價的數據中心網絡擁塞控制路由算法
淺談數據中心網絡基礎技術
HPC和數據中心融合網絡面臨的技術挑戰
半導體存儲器在數據中心中的應用
信而泰PFC/ECN流量測試方案:打造智能無損網絡的關鍵利器
解析DCQCN:RDMA在數據中心網絡的關鍵擁塞控制協議
ECN如何在HPC和數據中心中應對網絡擁塞
評論