TCPにもフロー制御の機能がありましたが、Ethernetにもフロー制御が定められています。IEEE802.3Xという規格です。
IEEE802.3X とは
Ethernet のフロー制御規格です。
スイッチはインタフェース単位で輻輳を検知し、受信リングバッファ (rx-ring) がオーバーフローする前に、そのインタフェースからマルチキャスト (0180:c200:0001) 宛に PAUSE フレームを送り、受信した端末は一定時間通信を止めます。
PAUSE フレームのフォーマット
IEEE802.3X のフロー制御の PAUSE フレームのフォーマットを以下に示します。
操作コードには PAUSE を示す「1」が入ります。
このフレームを受け取った端末は、「中断時間 * 512」の bit 数分の時間、送信を止めます。例えば中断時間 = 10000、インタフェースの速度 = 1 Gbps であれば、bit 数分の時間、というのは
送信停止時間 = (10000*512[bit])/ (1*1024*1024*1024[bit/sec]) = 4.7[msec]
となります。
また、この時間が経過する前であっても、バッファに空きができたら「中断時間 = 0」の PAUSE フレームを送ることで、相手方に転送開始をしてよいことを伝えることができます。
Ethernet の中身データの最小サイズは 46 bit なので、残りを 46 bit 目まで Padding で埋めます。
cisco のコマンド
cisco では IEEE802.3X はデフォルトで無効になっています。
PAUSE フレームを送る設定にしたいときは、インタフェースで以下コマンドを打ちます。
(config-if)# flowcontrol send on
また、PAUSE フレームを受信した時に、PAUSE フレームに従って通信停止させたい場合は、インタフェースで以下コマンドを打ちます。
(config-if)# flowcontrol receive on
コメント