ethernetのフロー制御
フロー制御
全二重通信と半二重通信で大きく異なる
10Base-Tなどのハブ(通称バカハブ)を使っている場合は、半二重通信でしたが最近はもうほとんど見かけないですね。基本的に最近の通信はほとんど全二重通信です。
※補足
- 全二重通信(full duplexともいう)
- uplinkとdownlinkで独立して伝送路を使用する方式。100Base-TXでは100Mbpsの帯域幅があるが、実質uplinkとdownlinkで100Mbpsずつの帯域幅を持つ。
- 半二重通信(half duplexともいう)
- 一つの伝送路をuplinkとdownlinkで共有する方式。10Base-Tでは、10Mbpsの帯域をuplinkとdownlinkでそれぞれ送信・受信を切り替えて使っている。
-
半二重通信の場合
バックプレッシャ輻輳制御
- コリジョン検出手順
- スイッチング・ハブの空きメモリ容量が少なくなった状態でさらにフレームが送られてきた場合、スイッチング・ハブはそのセグメントに対して、(データを受け取る代わりに)衝突信号を送出し、故意に衝突状態を作り出す。半二重のイーサネットでは、送信中に衝突信号を検出した場合は、他のステーションからの送信とぶつかることを意味するためである。
- 衝突信号を検出した送信側のステーションでは、送信を中断して送信のバックオフ(送信が失敗した場合の再試行フェーズ)に入り、送信待機状態となる。この間に、スイッチング・ハブはメモリ中にあるフレームを送出して、空きメモリ容量を増やすようにする。
全二重通信の場合
PAUSEフレームを使った輻輳制御
MAC制御プロトコル
- ステーション間での送受信処理をリアルタイムで制御するためのもの
- イーサネットフレームの各フィールドに以下の値をセットしたもの
length/typeフィールド | 0x8808(MAC制御プロトコルをサポートしていないステーションは、このフレームを無視すればよい) |
dataフィールド | 46 (octet)固定、最初の2 (octet)が操作コード、そのコードによってさまざまな制御を行うことができるようになっている |
MAC制御フレームの宛先アドレス | 01:80:C3:00:00:01 |
操作コード | 0x0001 |
制御コードに続く2オクテット | 「中断時間(0〜65535)」を指定 |
PAUSEフレームを受け取ったステーションは、そのdataフィールドに指定されている「中断時間×512bit時間」の間(512bitはフレームの最小サイズ)、送信を中断することでフロー制御を実現する。
- PAUSEフレームを送信するタイミング
- PAUSEフレーム用宛先アドレス「01:80:C3:00:00:01」
- PAUSEフレーム用に予約されたマルチキャストアドレス
- マルチキャストアドレスを使用するのは、PAUSEフレームを送るときに、相手(PAUSEさせたいステーション)のMACアドレスを特定しなくてもかまわないようにするためである。
- PAUSEフレームを受け取った場合、受け取ったスイッチングハブは他のセグメントにPAUSEフレームを中継しない。
- 一般的なマルチキャストアドレス( 01:00:5Eで始まるMACアドレス)ではなく、PAUSEフレーム用に予約されたマルチキャストアドレスを使用するのは、スイッチングハブがdataフィールドまで受信しなくても、宛先アドレスだけを調べただけで中継する必要がないことを理解できるようにするためである。