イーサネットフロー制御

イーサネットにおけるフロー制御は、ネットワークの輻輳によるパケット損失を防ぐために、データリンク層がフレーム送信を一時的に停止する機能を指す。

方式は大きく2種類あり、半二重通信で用いる「バックプレッシャ制御」と、全二重通信で用いる「PAUSEフレーム」があるイーサネット（その４） - フロー制御とVLAN。

バックプレッシャ制御
バックプレッシャ (Back Pressure)は、半二重通信で広く用いるフロー制御で、CSMA/CDを応用して対向機器の送信待機を発生させるもの。この語は元々、ポンプなどの出口に逆方向の圧力をかけて全体の流量を緩和する背圧制御を意味する。

スイッチは受信フレームをバッファメモリに格納し、そのデータ量を監視する。バッファメモリの容量が少なくなると、送信側にジャム信号を送る。フレームの送信元端末は衝突 (コリジョン)が発生したと認識し、CSMA/CDに従ってランダムな時間待ってから再送する。

 PAUSEフレーム 
PAUSEフレーム(ポーズフレーム)は、全二重通信で用いるフロー制御で、対向機器に動作の一時停止を要求するもの。1997年にIEEE 802.3xとして標準化された。

スイッチはバッファメモリの容量が少なくなると、受信側はデータの送信を抑制するためにPAUSEフレームと呼ばれるデータを送信元に送る。送信側は、その内容に基づいて一定時間データ送信を停止する。

PAUSEフレームのデータはイーサネットフレームの書式を踏襲しており、その内容は以下の通りIEEE 802.3-2022, Annex 31B.3.1 Transmit operation。

 宛先アドレス (6バイト): 01-80-C2-00-00-01 or 対向のMACアドレス
 送信元アドレス (6バイト): 自身のMACアドレス
 EtherType (2バイト): 0x8808 (フロー制御)
 制御コード (2バイト): 0x0001 (一時停止コマンド)IEEE 802.3-2022, Table 31A-1 - MAC Control opcodes
 一時停止時間 (2バイト): 16ビット値として0～65535のいずれかを指定。値は512ビット時間を単位とする (100Mbps通信では5.12マイクロ秒、1Gbps通信では512ナノ秒に相当)。

宛先アドレス 01-80-C2-00-00-01 は特殊なマルチキャストアドレスIEEE 802.1Q-2022, Table 8-1, C-VLAN and MAC Bridge component Reserved addressesで、この場合は対向機器のMACアドレスを知らなくても使える。また、対向機器がスイッチならこの宛先のフレームを転送せず、スイッチ内でのみ処理されることを意図したものであると解釈するIEEE 802.3-2022, Annex 31B.1 PAUSE description。

PAUSEフレームは、非対称な動作設定も可能であり、送信(停止要求)のみまたは受信(停止要求に応じる)のみを行うことができるIEEE 802.3-2022, Clause 37.2.1.4 Pause。

 用途 
一般にフロー制御は、多ポートスイッチ内部の輻輳が発生したときに使う。内部の輻輳は、送信元の接続ポートより宛先の接続ポートの速度が遅い場合や、複数の送信元から同じ宛先へ送るときの合計データ量が宛先の接続ポートの速度を超える場合などで発生する。いずれの場合も最終的にはスイッチ内部のバッファがすべて消費され、古いフレームから破棄されてしまう。フロー制御を用いると、自身の転送処理が完了してバッファに余裕ができるまで送信元機器を待機させることができる。

停止要求に応じている間は、特に旧式のスイッチにおいてバッファ内の以降の全データが待機状態となり、輻輳に関係のないポートを宛先とするフレームであっても遅延してしまうことがあった。これを、待ち行列の先頭が後方に影響を与える状態に例えて「ヘッドオブライン(HOL)ブロッキング」と呼ぶ。HOLブロッキングに対応するために、多くのスイッチではバッファ処理に出力キューを仮想的に設けており、停止要求のあったポート以外へのフレームは待機せずに送信できるようになっている Vendor comments on flow control in the 1999 test.。

 拡張規格 
 輻輳管理 
2004年5月に IEEE P802.3arとして策定プロジェクトが発足し、送信レートを約1%の精度で対向に要求する輻輳管理機能を検討したが、最終的に2008年に取り下げとなった。

 優先度ベースのフロー制御 (PFC) 

PFC (Priority-based Flow Control)は、データの優先度に応じたフロー制御で、PAUSEフレームの方式を拡張したもの。2010年にIEEE 802.1Qbbで標準化された。この標準化は、シスコ・システムズが独自拡張した仕様を元にしている。

PFCでは、CoS (Class of Service)で与えられる8段階の優先度ごとに個別にフロー制御できる。これにより、指定した優先度のトラフィックのみにPAUSEフレームを発行できるようになった。輻輳時にVoIPを優先させて通常データやファイル転送を遅延させるなどの制御が可能となり、CEEネットワーク環境などで広く用いられる。

PFCのPAUSEフレームの書式は、ヘッダ部分は従来のものと同一であるが、データ部分が以下のように異なるIEEE 802.3-2022, Clause 31D.3 PFC transmit。
 制御コード (2バイト): 0x0101 (PFC)
 一時停止時間 (16バイト): 8つのCoSそれぞれに16ビット値を指定できる。

 脚注 

*
Category:IEEE 802
Category:有線通信