流控是乙太網路的一項準系統,可以防止在連接埠擁塞的情況下出現丟幀。在深入分析之前,先看一個簡單的應用情境:
連接埠A和B接收報文,連接埠C向外轉寄報文。如果連接埠A和B的收包速率之和大於連接埠C的頻寬,那麼部分報文就會緩衝在裝置內部的報文buffer中。當buffer的佔用率達到一定程度時,連接埠A和B就會向外發送PAUSE幀,通知對端暫停發送一段時間。PAUSE幀只能阻止對端發送普通的資料幀,不能阻止發送MAC控制幀。
以上的描述有個先決條件,那就是連接埠A和B工作在全雙工系統模式下,並且使能了流控功能。另一方面,我們也一廂情願地認為對端可以識別PAUSE幀,並可以做出適當的響應。換句話說,對端的連接埠也要開啟流控功能。
需要注意的是,有的乙太網路裝置只能對PAUSE幀做出響應,但是並不能發送PAUSE幀。
流控的基本原理不難理解,比較容易忽視的一點是--連接埠收到PAUSE幀之後,停止發送報文多長時間。其實,PAUSE幀中攜帶了時間參數。收到PAUSE幀的裝置通過簡單的解析,就可以確定停止發送的時間長度。對端裝置出現擁塞的通常情況下,本端連接埠通常會連續收到多個PAUSE幀。只要對端裝置的擁塞狀態沒有解除,相關的連接埠就會一直發送PAUSE.
PAUSE幀的結構
PAUSE幀的幀長為64位元組,結構非常簡單。如下所示:
PAUSE幀的目的MAC地址是保留的MAC地址01-80-C2-00-00-01(MAC Control的PAUSE幀使用),源MAC則是發送PAUSE幀的裝置的MAC地址。
Length/Type域是十六進位數8808.
MAC Control Opcode域的值是0x0001.其實,PAUSE幀是MAC控制幀的一種,其他類型的MAC控制幀使用不同的opcode值,此處不做詳細說明。後面會談到和PAUSE類似的PFC幀,PFC幀中該域的取值是0x0101.
MAC Control Parameters域需要根據MAC Control Opcode的類型來解析。對於PAUSE幀而言,該域是個2位元組的無符號數,取值範圍是0~65535.該域的時間單位是pause_quanta,每個pause_quanta相當於512位元時間。
流控的自協商
現實中,大多數廠商的乙太網路交換器都有流控開關命令。部分廠商的裝置可以在自協商功能中對流控進行協商,這種行為有IEEE標準作為依據。
在自協商的資訊中,有兩個流控的位元位,即PAUSE和ASM_DIR,分別表示Symmetric PAUSE和Asymmetric PAUSE.Symmetric PAUSE表示既可以發送又可以接收PAUSE幀,而Asymmetric PAUSE表示只能發送或只能接收PAUSE幀。
IEEE 802.3標準的28B.3中,描述了這兩個位元位的解析方式。簡單來講,如果雙方發送的協商資訊中PAUSE位都是1,那麼雙方都能發送和接收PAUSE幀。如果有一方的PAUSE位是0,那麼就需要根據ASM_DIR位的值結合PAUSE位的值來具體分析。
半雙工模式如何?流控。
在本文開頭兒的地方說過,連接埠A和B要工作在全雙工系統模式下,這是有原因的。如果連接埠工作在半雙工模式下,那麼PAUSE幀很可能和對端發送過來的報文產生衝突,對端收不到完好的PAUSE幀,也就無法實現PAUSE的功能。
對於半雙工模式的問題,業界常見的解決方式是"back pressure"或者"jamming"機制。對於這兩種機制,筆者都沒有找到相應的標準,或許本來指的就是同一種機制。半雙工模式下,連接埠向外發送一些訊號來佔用鏈路,對端也就沒有機會發送報文。這樣,可以間接達到和流控類似的效果。
基於優先順序的流控(PFC)
乙太網路的資料轉寄是儘力而為的,並不能保證傳輸過程中不丟包。像FTP這樣的上層協議,通過自身的確認機制來保證資料的完整性,一旦發現報文丟失,可以要求對端重傳。正因為如此,乙太網路的這種儘力而為的轉寄方式,長期以來也沒有遇到過太大的問題。
IEEE 802.3x流控雖然可以預防丟包,但是有一個不容忽視的問題。PAUSE幀會導致一條鏈路上的所有報文停止發送,在服務需求品質較高的網路中,這顯然是不能接受的。由於這個原因,業界一度出現過對流控的反對聲音。IEEE 802.1Qbb標準解決了這個問題。
IEEE 802.1Qbb的核心思想是,針對同一鏈路上不同優先順序的流量,單獨發送PASUSE幀。當某一優先順序的業務發生擁塞時,只讓該類報文暫停發送,而其他類型的業務不受影響。IEEE 802.1Qbb可以針對特定優先順序的流量實現流控功能,因此也被稱為PFC(Priority-based Flow Control)。
FCoE技術將Fiber Channel的資料幀封裝在乙太網路幀中進行傳輸,FCoE的一個基本要求就是不能丟包。PFC成功地滿足了FCoE的需求,同時也不會對其他業務造成影響。