ethernetのフロー制御

フロー制御

全二重通信と半二重通信で大きく異なる

10Base-Tなどのハブ(通称バカハブ)を使っている場合は、半二重通信でしたが最近はもうほとんど見かけないですね。基本的に最近の通信はほとんど全二重通信です。

※補足
  • 全二重通信(full duplexともいう)
    • uplinkとdownlinkで独立して伝送路を使用する方式。100Base-TXでは100Mbpsの帯域幅があるが、実質uplinkとdownlinkで100Mbpsずつの帯域幅を持つ。
  • 半二重通信(half duplexともいう)
    • 一つの伝送路をuplinkとdownlinkで共有する方式。10Base-Tでは、10Mbpsの帯域をuplinkとdownlinkでそれぞれ送信・受信を切り替えて使っている。

-

半二重通信の場合

バックプレッシャ輻輳制御
  • 半二重通信方式のイーサネットでは、フロー制御の方法が規格化されていない。その中でもよく使われている方法の1つとして「バックプレッシャ(Back Pressure)輻輳制御」と呼ばれる方法がある。
  • バックプレッシャ輻輳制御
    • 概要
      • CSMA/CDのメカニズムを応用したものであり、送信側に対して衝突信号を送出して、セグメント上のステーションの送信を待機させるという方法
  1. スイッチング・ハブの空きメモリ容量が少なくなった状態でさらにフレームが送られてきた場合、スイッチング・ハブはそのセグメントに対して、(データを受け取る代わりに)衝突信号を送出し、故意に衝突状態を作り出す。半二重のイーサネットでは、送信中に衝突信号を検出した場合は、他のステーションからの送信とぶつかることを意味するためである。
  2. 衝突信号を検出した送信側のステーションでは、送信を中断して送信のバックオフ(送信が失敗した場合の再試行フェーズ)に入り、送信待機状態となる。この間に、スイッチング・ハブはメモリ中にあるフレームを送出して、空きメモリ容量を増やすようにする。

全二重通信の場合

PAUSEフレームを使った輻輳制御
  • 全二重の場合はCSMA/CDを使用しないため、バックプレッシャ輻輳制御を行うことができない。これは送信中に受信も可能なためである。
  • フロー制御のために、IEEE 802.3xのオプションとしてMAC制御プロトコルが規定されている。
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フレームを送信する
    • 十分な空きできたときに中断時間を0にしたPAUSEフレームを送信する。送信ステーション側では、指定された中断時間のタイムスロット分待つか、中断時間が0と指定されるまで、送信を中断する。
  • PAUSEフレーム用宛先アドレス「01:80:C3:00:00:01」
    • PAUSEフレーム用に予約されたマルチキャストアドレス
    • マルチキャストアドレスを使用するのは、PAUSEフレームを送るときに、相手(PAUSEさせたいステーション)のMACアドレスを特定しなくてもかまわないようにするためである。
    • PAUSEフレームを受け取った場合、受け取ったスイッチングハブは他のセグメントにPAUSEフレームを中継しない。
    • 一般的なマルチキャストアドレス( 01:00:5Eで始まるMACアドレス)ではなく、PAUSEフレーム用に予約されたマルチキャストアドレスを使用するのは、スイッチングハブがdataフィールドまで受信しなくても、宛先アドレスだけを調べただけで中継する必要がないことを理解できるようにするためである。