イーサネットフロー制御
PAUSEフレーム(ポーズフレーム)は、全二重通信で用いるフロー制御で、対向機器に動作の一時停止を要求するもの。1997年にIEEE 802.3xとして標準化された。
スイッチはバッファメモリの容量が少なくなると、受信側はデータの送信を抑制するためにPAUSEフレームと呼ばれるデータを送信元に送る。送信側は、その内容に基づいて一定時間データ送信を停止する。
PAUSEフレームのデータはイーサネットフレームの書式を踏襲しており、その内容は以下の通り。
宛先アドレス (6バイト): 01-80-C2-00-00-01 or 対向のMACアドレス
送信元アドレス (6バイト): 自身のMACアドレス
EtherType (2バイト): 0x8808 (フロー制御)
制御コード (2バイト): 0x0001 (一時停止コマンド)
一時停止時間 (2バイト): 16ビット値として0~65535のいずれかを指定。値は512ビット時間を単位とする (100Mbps通信では5.12マイクロ秒、1Gbps通信では512ナノ秒に相当)。
宛先アドレス 01-80-C2-00-00-01 は特殊なマルチキャストアドレスで、この場合は対向機器のMACアドレスを知らなくても使える。また、対向機器がスイッチならこの宛先のフレームを転送せず、スイッチ内でのみ処理されることを意図したものであると解釈する。
PAUSEフレームは、非対称な動作設定も可能であり、送信(停止要求)のみまたは受信(停止要求に応じる)のみを行うことができる。
一般にフロー制御は、多ポートスイッチ内部の輻輳が発生したときに使う。内部の輻輳は、送信元の接続ポートより宛先の接続ポートの速度が遅い場合や、複数の送信元から同じ宛先へ送るときの合計データ量が宛先の接続ポートの速度を超える場合などで発生する。いずれの場合も最終的にはスイッチ内部のバッファがすべて消費され、古いフレームから破棄されてしまう。フロー制御を用いると、自身の転送処理が完了してバッファに余裕ができるまで送信元機器を待機させることができる。
停止要求に応じている間は、特に旧式のスイッチにおいてバッファ内の以降の全データが待機状態となり、輻輳に関係のないポートを宛先とするフレームであっても遅延してしまうことがあった。これを、待ち行列の先頭が後方に影響を与える状態に例えて「ヘッドオブライン(HOL)ブロッキング」と呼ぶ。HOLブロッキングに対応するために、多くのスイッチではバッファ処理に出力キューを仮想的に設けており、停止要求のあったポート以外へのフレームは待機せずに送信できるようになっている。
イーサネットにおけるフロー制御は、ネットワークの輻輳によるパケット損失を防ぐために、データリンク層がフレーム送信を一時的に停止する機能を指す。
方式は大きく2種類あり、半二重通信で用いる「バックプレッシャ制御」と、全二重通信で用いる「PAUSEフレーム」がある。