イーサネットフロー制御

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

方式は大きく2種類あり、半二重通信で用いる「バックプレッシャ制御」と、全二重通信で用いる「PAUSEフレーム」がある[1]

バックプレッシャ制御 編集

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

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

PAUSEフレーム 編集

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

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

PAUSEフレームのデータはイーサネットフレームの書式を踏襲しており、その内容は以下の通り[3]

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

宛先アドレス 01-80-C2-00-00-01 は特殊なマルチキャストアドレス[5]で、この場合は対向機器のMACアドレスを知らなくても使える。また、対向機器がスイッチならこの宛先のフレームを転送せず、スイッチ内でのみ処理されることを意図したものであると解釈する[6]

PAUSEフレームは、非対称な動作設定も可能であり、送信(停止要求)のみまたは受信(停止要求に応じる)のみを行うことができる[7]

用途 編集

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

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

拡張規格 編集

輻輳管理 編集

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

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

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

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

PFCのPAUSEフレームの書式は、ヘッダ部分は従来のものと同一であるが、データ部分が以下のように異なる[12]

  • 制御コード (2バイト): 0x0101 (PFC)
  • 一時停止時間 (16バイト): 8つのCoSそれぞれに16ビット値を指定できる。

脚注 編集

  1. ^ a b イーサネット(その4) - フロー制御とVLAN
  2. ^ IEEE Standards for Local and Metropolitan Area Networks: Supplements to Carrier Sense Multiple Access with Collision Detection (CSMA/CD) Access Method and Physical Layer Specifications - Specification for 802.3 Full Duplex Operation and Physical Layer Specification for 100 Mb/S Operation on Two Pairs of Category 3 or Better Balanced Twisted Pair Cable (100BASE-T2). Institute of Electrical and Electronics Engineers. (1997). doi:10.1109/IEEESTD.1997.95611. ISBN 978-1-55937-905-2. https://standards.ieee.org/ieee/802.3x/1082/ 
  3. ^ IEEE 802.3-2022, Annex 31B.3.1 Transmit operation
  4. ^ IEEE 802.3-2022, Table 31A-1 - MAC Control opcodes
  5. ^ IEEE 802.1Q-2022, Table 8-1, C-VLAN and MAC Bridge component Reserved addresses
  6. ^ IEEE 802.3-2022, Annex 31B.1 PAUSE description
  7. ^ IEEE 802.3-2022, Clause 37.2.1.4 Pause
  8. ^ “Vendors on flow control”. Network World Fusion. (1999年9月13日). オリジナルの2012年2月7日時点におけるアーカイブ。. https://web.archive.org/web/20120207133926/http://www.networkworld.com/netresources/0913flow2.html  Vendor comments on flow control in the 1999 test.
  9. ^ IEEE P802.3ar Congestion Management Task Force” (2008年12月18日). 2011年5月10日閲覧。
  10. ^ IEEE 802.1Q Priority-based Flow Control”. Institute of Electrical and Electronics Engineers (2010年6月7日). 2011年5月10日閲覧。
  11. ^ Priority Flow Control: Build Reliable Layer 2 Infrastructure”. White Paper. シスコ・システムズ (2009年6月). 2011年5月10日閲覧。
  12. ^ IEEE 802.3-2022, Clause 31D.3 PFC transmit