Ethernetの標準規格(IEEE 802.3) MAC制御
Ethernetの心臓部ともいうべきCSMA/CDによるアクセス手法が、この第4章で定義されています。
MACサブレイヤーの機能
以下の項目がMACサブレイヤーが備えるべき機能として定義されています。
送信・受信におけるデータのカプセル化
- フレーム処理(フレームの分離や同期)
- アドレス処理(送信先・送信元)
- エラー検出(物理層の伝送エラー検出)
通信メディアのアクセス管理
- メディアの分配(衝突回避)
- 競合の解決(衝突処理)
ここでの定義は主にフローチャートとパスカル風の論理記述によってなされています。紙面の都合上、そのすべてを載せることは到底無理ですので、送信・受信時の処理の流れを簡単に整理しておきます。
送信処理
- 上位層からデータを受け取り、送信フレームに加工します。この時、必要に応じてPADデータを付加した後、フレームのCRC値を計算してフレームチェック部に設定します
- 他の通信ノードが物理層を使用中の場合は、送信待機状態となります(Carrier Sense)。
- 物理層が空いて送信可能になってもすぐには送信できません。所定のフレーム間隔(InterFrame Gap)を確保するために規定時間(9.6us)待ってから送信を開始し、フレームをシリアルビット列として物理層に送出します。
- 送信中に衝突を検出した場合でも、フレームの送出はすぐには停止されません。衝突状態を他のノードでも確実に検出できるようにするためにジャム(Jam)と呼ばれる特殊なパターンに切り替え、それを32ビット分送出します。ジャムのパターンに特別な規定はありませんが、ジャム直前までの転送フレームのCRC値に一致するものであってはなりません。
- 衝突発生時には、規定のアルゴリズムに基づいて再送を試みます。MAC部における再送は最大16回であり、16回連続で衝突が発生した場合には、上位層へ送信失敗が報告されます。
受信処理
物理層からのシリアルビット列を受信を開始し、先に述べたSFD部を検出するとフレームへの再組み立てを開始します。 フレームの受信が完了すると、先ずその大きさをチェックします。規定最小値より小さい場合は、衝突によるイリーガルなフレームとして廃棄します。これような極小フレームは、通常ラントパケット(Runt Packet)と呼ばれます。 次に自局宛かどうか、その送信先アドレス部をチェックします。自局に設定されているMACアドレスもしくはマルチキャストアドレスに一致するか、ブロードキャストアドレスの場合は処理を続け、いずれにも該当しない場合はフレームを破棄し、次の受信待ち状態になります。
次にエラーの有無をチェックします。フレームが大きすぎないか、CRCエラーがないか、オクテット単位のフレーム再構築でビット余りが発生しなかったかどうかがチェックされます。これらのエラーは、それぞれ上位層に通知されます。最後のビット余りが出るエラーはアラインメントエラー(Alignment Error)と呼ばれています。
正常に受信されたフレームは、上位層に転送します。
衝突発生時の再送処理のアルゴリズム
それでは、衝突発生時の再送処理のアルゴリズムについて詳しくみてみましょう。
図12にこのアルゴリズムにおける再送信間隔と衝突回数の関係を示しておきます。
Ethernet/IEEE 802.3では、再送処理アルゴリズムに、再送信間隔に上限を設けた台形型バイナリエクスポネンシャルバッックオフ(Truncated Binary Exponential Backoff)が採用されており、再送信間隔はスロットタイム(51.2us)を基準に以下の式で表現されます。
再送信間隔 T = 51.2us * n
ここで整数nは0≦n< 2kの範囲からランダムに選択する。ただし、kは衝突回数で最大値は10である。
このアルゴリズムでは、物理層が混み合って衝突が増加してきた場合に、衝突フレームの平均再送間隔を指数関数的に増加することによってその衝突確率を減らします。但し、再送間隔の上限は衝突回数が10回以降は同一とする規定ですので、システムとしての最大再送待ち時間は52.4ms(=51.2us*1023)となります。一方、衝突回数が1-2回程度と少ない場合には、その平均再送時間は短く、あまり待たずに送信を開始することができます。
衝突回数によって物理層の混み具合を想定し、再送信の確率を変動させながらそれに対応する優れたアルゴリズムです。これにより、混雑時には物理層の衝突確率が減ってその利用率が向上しますし、非混雑時には衝突による再送遅延が小さくなるように調整されますので、ここでも利用率が向上します。このしくみが不思議な程うまく機能するのは、みなさんよくご存じのとおりです。