イーサネットにおける
フロー制御は、ネットワークの
輻輳によるパケット損失を防ぐために、
データリンク層がフレーム送信を一時的に停止する機能です。この機能は、ネットワークの効率性と信頼性を保つ上で不可欠であり、大きく分けて2つの主要な方式があります。
バックプレッシャ制御
バックプレッシャ制御は、主に半二重通信環境で使用される
フロー制御方式です。この方式は、
CSMA/CD|CSMA_CD(Carrier Sense Multiple Access with Collision Detection)プロトコルを応用しており、ネットワークデバイスが
輻輳状態を検知すると、送信元に送信待機を促すことで
輻輳を緩和します。
もともとバックプレッシャとは、
ポンプなどの出口に逆方向の圧力を加えて全体の流量を調整する背圧制御を指す言葉です。
イーサネットにおけるバックプレッシャ制御では、スイッチが受信フレームをバッファメモリに格納し、そのデータ量を常に監視しています。バッファメモリの容量が逼迫すると、スイッチは送信側にジャム信号を送信します。この信号を受信した端末は、
衝突(コリジョン)が発生したと認識し、
CSMA/CD|CSMA_CDの規定に従ってランダムな時間待機した後、フレームを再送します。
PAUSEフレーム
PAUSEフレームは、全二重通信環境で使用される
フロー制御方式で、対向機器に対してデータ送信の一時停止を要求します。この方式は、1997年に
IEEE 802.3xとして標準化されました。
スイッチがバッファメモリの容量不足を検知すると、受信側は送信元に対してPAUSEフレームを送信します。このPAUSEフレームを受信した送信側は、フレーム内の指示に従って一定時間データ送信を停止します。
PAUSEフレームのデータ構造は
イーサネットフレームの形式を踏襲しており、主に以下の情報を含みます。
宛先アドレス (6バイト): `01-80-C2-00-00-01`(特殊なマルチキャストアドレス)または対向機器のMACアドレス
送信元アドレス (6バイト): 自身のMACアドレス
EtherType (2バイト): `0x8808`(フロー制御を示す)
制御コード (2バイト): `0x0001`(一時停止コマンドを示す)
一時停止時間 (2バイト): 16ビットで表現される停止時間。単位は512ビット時間(例:100Mbpsで5.12マイクロ秒、1Gbpsで512ナノ秒)。
宛先アドレスに `01-80-C2-00-00-01` が指定された場合、このフレームは対向機器のMACアドレスを知らなくても利用でき、特にスイッチがこのアドレスを受信した場合は、フレーム転送せずにスイッチ内部でのみ処理されるように設計されています。
PAUSEフレームは、送信(停止要求)のみ、または受信(停止要求に応じる)のみといった非対称な設定も可能です。
フロー制御は、特に多ポートスイッチ内部で輻輳が発生した際に有効です。輻輳は、送信元ポートよりも宛先ポートの速度が低い場合や、複数の送信元から同じ宛先へのデータ量が宛先ポートの処理能力を超える場合に発生します。このような状況でフロー制御を行わないと、バッファメモリが溢れて古いフレームから破棄される事態を招きます。
フロー制御を用いることで、バッファに余裕ができるまで送信元機器を一時停止させることができ、データ損失を防ぎます。ただし、旧式のスイッチでは、停止要求に応じている間、バッファ内の全データが待機状態になり、輻輳に関係ないポート宛てのフレームも遅延する「ヘッドオブライン(HOL)ブロッキング」が発生する問題がありました。現在のスイッチでは、出力キューを仮想的に設けることで、この問題が改善されています。
拡張規格
IEEE P802.3arとして、送信レートを対向に要求する輻輳管理機能が検討されましたが、2008年に取り下げとなりました。
優先度ベースのフロー制御 (PFC)
PFC (Priority-based Flow Control)は、データの優先度に応じたフロー制御を行う機能で、PAUSEフレームを拡張したものです。IEEE 802.1Qbbとして2010年に標準化されました。この規格は、シスコシステムズが独自に拡張した仕様を基にしています。
PFCでは、CoS (Class of Service)で指定される8段階の優先度に基づいて個別にフロー制御が可能です。これにより、特定の優先度のトラフィックのみにPAUSEフレームを発行できます。例えば、VoIPのようなリアルタイム性が重要なトラフィックを優先し、通常データやファイル転送を遅延させることで、ネットワークの効率性を高めることができます。PFCは、CEEネットワーク環境などで広く用いられています。
PFCのPAUSEフレームは、ヘッダ部分は従来のものと同じですが、データ部分が異なります。
制御コード (2バイト): `0x0101`(PFCを示す)
*
一時停止時間 (16バイト): 各CoSに対応する16ビットの停止時間が指定できる。
まとめ
イーサネットの
フロー制御は、ネットワークの安定性と効率性を保つ上で重要な機能です。バックプレッシャ制御とPAUSEフレームは、異なる通信方式で
輻輳を管理し、PFCはより高度な優先度に基づいた制御を可能にします。これらの技術により、現代のネットワークはより信頼性が高く、効率的に動作しています。