全二重/半二重について
フロー制御方式の話に入る前に、全二重/半二重通信について触れる。
全二重とは A と B 二台のホストがいたときに、片方向の通信路を 2 組使用することで、双方向のデータやりとりを行えるようにする仕組みのこと。
A の Tx Rx 、B の Tx Rx それぞれ組あわせて、単方向の通信路を 2 組用意する。
一方、半二重とは、1 組の通信路を双方向に使用するようなデータのやりとりのことを差す。
IEEE802.3x
IEEE802.3x はイーサネットの全二重モードにおけるフロー制御方式を規定したもの。
輻輳を検知したスイッチングハブは、フレームを送信している端末に対して PAUSE フレームを送信する。
PAUSE フレームを受け取ったステーションは一定時間フレームの送信を延期することになる。(PAUSE フレームの中に停止時間が格納されている)
こうしてフレームがスイッチングハブのバッファからあふれるのを防ぐ。
バッファに余裕ができた場合はスイッチから PAUSE 解除フレームを送信するようになり、その場合、すぐ再度フレームを送信できるようになる。
なお、PAUSE フレームのフォーマットは DIX 規格であり、宛先 MAC アドレスは 01-80-02-00-00-01 (フラッディングされないマルチキャストアドレス) であり、送信元 MAC アドレスは送信元ステーションの MAC アドレス、タイプは 0x8808 となる。
バックプレッシャ方式
半二重モードには、フロー制御方式に関する標準規格は存在しない。
ただ、多くのスイッチングハブはバックプレッシャ方式によりフロー制御を実現している。
バックプレッシャ方式では、スイッチングハブが衝突を検知すると、フレームを送信している端末に対し、架空のジャム信号を創出する。
半二重モードでは CMSA/CD の仕組みにより、ジャム信号を受け取った送信ステーションは、バックオフ時間 (乱数による待ち時間) が経過するまでフレームの送信を延期する。
このような仕組みによりフレームがスイッチングバッファから溢れるのを防ぐ。
オートネゴシエーション
ツイストペアケーブルを使用する 10BASE-T / 100BASE-TX / 1000BASE-T と光ファイバーケーブルを使用する 1000BASE-SX / 1000BASE-LX で分けて記載する。
10BASE-T / 100BASE-TX / 1000BASE-T
1 台のスイッチングハブに 10BASE-T, 100BASE-TX, 1000BASE-T のステーションを収容する場合、スイッチングハブの各ポートとステーションの間で、伝送速度と伝送モード (全二重/半二重) を同一にする必要がある。
これを自動的に判別して設定する仕組みがオートネゴシエーションである。
オートネゴシエーションは専用の制御フレームではなく、リンクパルスを送信することで制御をおこなっている。
オートネゴシエーションに対応している聞きの場合、NLP (Normal Link Pulse, 通信機器同士が互いの接続性を常時確認するためにアイドル期間中に送信する信号のこと) と同時に FLP バースト (Fast Link Pulse バースト) と呼ばれる NLP よりはるかにパルス幅が小さいパルスを送信する。
FLP に乗せて、自分がサポートする伝送速度/モードを相手に伝える (複数指定可能) 。自分と相手がサポートする伝送速度/モードのうち、最も優先度の高いものが選択されて、オートネゴシエーションは完了となり、それ以降 FLP バーストは送信されなくなる。
一方の危機のオートネゴシエーションを有効にし、他方の危機を無効にした場合、有効な側は FLP バーストを受信しないため、相手が全二重対応していないと判断する。無効な側からアイドル信号を受信した場合は 100M 半二重、NLP を受信した場合は 10M 半二重で接続される。
よって、全二重で通信したい場合は、両方の機器でオートネゴシエーションを有効にするか、無効にして手動で伝送速度と伝送モードを設定する必要がある。
また、IEEE により標準化された昨日ではないものの、一部のスイッチングハブはオート MDI/MDI-X と呼ばれる機能を有している。これはポートに接続されたツイストペアケーブルがストレートかクロスかを自動的に判別して Tx と Rx の極性の違いをポート側で吸収する機能である。
1000BASE-SX / 1000BASE-LX
1000BASE-SX / 1000BASE-LX では通常は全二重及び 1 Gbps 固定であるため、オートネゴシエーションをする必要がない。
しかし、オートネゴシエーションの規格に含まれるリモートフォルト機能を用いるために使用されることがある。
光ファイバーでは 2 芯あるファイバーのうち 1 芯だけが切断するという障害が発生することがある。このとき、一方のスイッチングハブ (受信側) ではリンクダウンを検出するが、もう一方 (送信側) はリンクアップのままという単方向通信状態に陥る。
リモートフォルト機能を動作させることで、両端の装置で障害を検知し、リンクダウンさせることができる。(その後は、スパニングツリーなどの仕組みにより、迂回ルートが設定される)