イーサネットフレームと CSMA/CD・スイッチング原理
スイッチが「学習」と「フラッディング」で賢くなる仕組みが腑に落ちる。フレーム構造からCSMA/CD、MACテーブルの内部動作までL2の原理を一気通貫で押さえられる。
- 1.イーサネットフレームは プリアンブル・宛先/送信元MAC・タイプ長・ペイロード・FCS から成り、最小64バイトという下限が衝突検出を成立させている。
- 2.CSMA/CDは半二重の共有媒体での衝突を前提とした方式で、検出後はジャム信号と二進指数バックオフで再送する。全二重スイッチング環境では衝突自体が消える。
- 3.L2スイッチは送信元MACでテーブルを学習し、宛先MACで転送先を決める。未知宛先・ブロードキャストはフラッディングされ、ループはSTPで防ぐ。
イーサネットは「共有媒体の調停」から始まった
イーサネット(IEEE 802.3)の出発点は、1本の同軸ケーブルを全端末で共有する 半二重のバス型ネットワーク でした。複数の端末が同時に送信すると信号が重なって壊れる。この「衝突(collision)」をどう扱うかが初期イーサネットの中心問題であり、その解が CSMA/CD です。現在主流のスイッチ+全二重環境では衝突は起きませんが、フレーム構造の最小サイズなど 当時の設計が今も制約として残っている ため、原理を押さえる価値があります。層構造の位置づけは /network/osi/ を参照してください。
イーサネットフレームの構造
L2で運ばれる1単位がフレームです。各フィールドの役割を正確に押さえます。
| フィールド | サイズ | 役割 |
|---|---|---|
| プリアンブル + SFD | 7 + 1 バイト | 受信側のクロック同期。SFDはフレーム本体の開始を示す区切り |
| 宛先MACアドレス | 6 バイト | 受信先の指定。先頭ビットでユニキャスト/マルチキャストを区別 |
| 送信元MACアドレス | 6 バイト | 送り主。スイッチはこれを見て学習する |
| タイプ/長さ | 2 バイト | 0x0600以上なら上位プロトコル種別(EtherType)、未満なら長さ |
| ペイロード | 46〜1500 バイト | 上位層のデータ。下限46は最小フレーム長を満たすため |
| FCS | 4 バイト | CRC-32による誤り検出。壊れたフレームは破棄 |
ポイントが3つあります。第一に、宛先MACの 先頭バイトの最下位ビット(I/Gビット) が1ならマルチキャスト/ブロードキャスト、0ならユニキャストです。全ビット1の FF:FF:FF:FF:FF:FF がブロードキャストアドレスで、扱いは /network/multicast-broadcast/ に詳しいです。
第二に、ペイロード下限が46バイトなのは、ヘッダ18バイトと合わせて 最小フレーム長64バイト を保証するためです。データが46バイトに満たなければパディングで埋めます。この64という数字はCSMA/CDの衝突検出可能性から逆算された値で、後述します。
第三に、最大ペイロード1500バイトが標準的なMTUの根拠です。これを超える転送やジャンボフレームの扱いは /network/mtu/ で補完できます。
タイプ/長さフィールドが 0x0600(1536)以上なら EtherType(例: IPv4=0x0800、ARP=0x0806、VLANタグ=0x8100)。それ未満なら「長さ」を表し、上位プロトコルは後続のLLCヘッダで示します。同じ2バイトを値域で切り替える設計です。
CSMA/CD:衝突を前提とした再送アルゴリズム
CSMA/CD は Carrier Sense Multiple Access with Collision Detection の略です。3つの要素を分けて理解します。
- CS(Carrier Sense): 送る前に媒体が空いているか確認する。使用中なら待つ。
- MA(Multiple Access): 複数端末が同じ媒体を共有する前提。
- CD(Collision Detection): 送信中も媒体を監視し、自分の信号と異なる電圧を検知したら衝突と判断する。
衝突を検知した端末の動作は次の手順です。
1. 送信中に衝突を検出
2. ジャム信号(32ビット)を送出し、衝突を全端末に確実に伝える
3. 試行回数 n に応じて待ち時間を決める(二進指数バックオフ)
待ちスロット数 = 0 以上 (2^k - 1) 以下の一様乱数
ただし k = min(n, 10)
4. 決めた時間だけ待ってから再送
5. 16回連続で失敗したら上位層にエラーを返して諦める
二進指数バックオフ(binary exponential backoff)の肝は、衝突が繰り返されるほど待ち時間の上限を指数的に広げる点です。k が n とともに増えるので候補スロットが倍々に増え、再衝突の確率が下がります。ただし k は10で頭打ち(最大1023スロット)になり、再送は16回で打ち切ります。
衝突を「自分の送信が終わる前に」検知できなければ、その端末は衝突に気づけません。最悪ケースの往復伝搬遅延の間、送信し続けている必要があり、それを満たす最小ビット数が64バイト分です。逆に言えば、最小フレーム長・最大ケーブル長・伝送速度は スロットタイム という1つの制約で結ばれています。10/100Mイーサで64バイトなのはこの帰結です。
全二重スイッチングが衝突を消した
現在のスイッチドイーサネットでは、各ポートと端末が 専用の全二重リンク で結ばれます。送信用と受信用の経路が物理的に分かれるため、同時送受信しても衝突しません。結果として CSMA/CD は不要になり、ギガビット以降は事実上使われません。
| 観点 | 半二重(共有媒体・ハブ) | 全二重(スイッチ) |
|---|---|---|
| 衝突 | 発生する。CSMA/CDで調停 | 原理的に発生しない |
| 帯域 | 全端末で共有(1つの衝突ドメイン) | ポートごとに専有 |
| 距離・最小長の制約 | スロットタイムに縛られる | 衝突検出が不要で緩和 |
| 代表機器 | リピータ・ハブ | L2スイッチ |
ハブは受信した信号を 全ポートに電気的に中継するだけ で、全体が1つの衝突ドメインでした。スイッチはポートごとに衝突ドメインを分割し、さらにフレームを宛先ポートにだけ送る「賢さ」を持ちます。この賢さの正体が次のMACアドレステーブルです。
L2スイッチの内部動作:学習とフォワーディング
スイッチの仕事は2つの単純な規則に集約されます。送信元MACで学習し、宛先MACで転送する ことです。
1. 学習(learning)
フレームを受信すると、スイッチは 送信元MACアドレスと受信ポート番号 の対応をMACアドレステーブル(CAMテーブル、フォワーディングテーブル)に記録します。「このMACはこのポートの先にいる」という地図を、流れてくるフレームから自動で作ります。各エントリにはタイマがあり、一定時間(既定で多くは300秒)通信がなければ エージング で削除され、機器の移動に追従します。
2. 転送判断(forwarding/filtering)
宛先MACでテーブルを引き、結果に応じて動作が分かれます。
| 宛先MACの状態 | スイッチの動作 | 呼称 |
|---|---|---|
| テーブルにあり、受信ポートと別 | そのポートにだけ送る | フォワーディング |
| テーブルにあり、受信ポートと同じ | 送らず破棄する | フィルタリング |
| テーブルにない(未知ユニキャスト) | 受信ポート以外の全ポートへ複製 | フラッディング |
| ブロードキャスト/マルチキャスト | 受信ポート以外の全ポートへ複製 | フラッディング |
未知の宛先をフラッディングするのは、「どのポートの先にいるか分からないから、とりあえず全方向に投げて本人に届ける」ためです。やがてその宛先が応答すれば、今度はその送信元MACが学習され、次回からはピンポイント転送になります。ARPの問い合わせがブロードキャストで飛ぶ仕組みは /network/arp/ と合わせて読むと、L2の挙動が一本につながります。
受信フレーム到着
│
├─ 送信元MAC → 受信ポート をテーブルに登録/更新(学習)
│
└─ 宛先MACでテーブル検索
├─ ヒットして別ポート → そのポートへ転送
├─ ヒットして同一ポート → 破棄(フィルタ)
└─ 未ヒット or ブロードキャスト → 全ポートへフラッディング
受信フレームをどこまで読んでから転送するかで方式が分かれます。フレーム全体を受け切ってFCS検証してから送る ストアアンドフォワード、宛先MACの6バイトだけ読んで即転送する カットスルー、衝突起因の壊れフレーム(最小長未満)を最初の64バイトで弾く フラグメントフリー です。後者ほど低遅延ですが、誤りフレームをそのまま流す危険があります。
ループ・テーブル溢れという落とし穴
L2には致命的な弱点があります。フレームにはL3の TTLに相当する寿命がありません。スイッチを冗長配線して物理ループができると、ブロードキャストやフラッディングしたフレームが永遠に回り続け、指数的に増殖して帯域を食い尽くします。これが ブロードキャストストーム です。
L3パケットはTTLが0になれば破棄されますが、イーサネットフレームにその仕組みはありません。ループした1フレームが各スイッチでフラッディングのたびに複製され、ネットワーク全体が数秒で麻痺します。この対策が STP(Spanning Tree Protocol) で、冗長リンクを論理的にブロックして木構造を作り、ループを根絶します。
セキュリティ面では MACフラッディング攻撃 に注意します。偽の送信元MACを大量に送りつけてテーブルを溢れさせると、スイッチは正規エントリを保持できず、本来ピンポイント転送すべきフレームまでフラッディングしてしまいます。これは盗聴の足がかりになり、対策がポートあたりの学習MAC数を制限する ポートセキュリティ です。
「最小フレーム長64バイトの理由は」→ 衝突を送信完了前に検出するためのスロットタイム。「スイッチの学習と転送の鍵は」→ 送信元MACで学習し宛先MACで転送。「未知ユニキャストの扱いは」→ フラッディング。「全二重スイッチでCSMA/CDが不要な理由は」→ 専用リンクで衝突自体が起きない。「L2ループが危険な理由は」→ TTLがなくフレームが増殖、対策はSTP。この5点を構造と結びつけられれば上級。
まとめ
イーサネットは「共有媒体での衝突調停」という制約から生まれ、CSMA/CDの二進指数バックオフでそれを乗り越え、最小フレーム長64バイトという痕跡を今に残しました。スイッチはこの世界を全二重リンクで作り替え、衝突を消すと同時に、送信元MACでの学習と宛先MACでの転送 というシンプルな規則で賢い配送を実現します。未知宛先のフラッディング、ループに対するSTP、テーブル溢れへのポートセキュリティまで一続きで捉えれば、L2の動作は「自動で育つ地図とその防御」として読み解けます。
ネットワーク Article
イーサネットフレームと CSMA/CD・スイッチング原理を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
イーサネット
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 5
導入後に効く点
CSMA/CDは半二重の共有媒体での衝突を前提とした方式で、検出後はジャム信号と二進指数バックオフで再送する。全二重スイッチング環境では衝突自体が消える。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「イーサネット / CSMA/CD」に近いか確認する。
- 強みである「イーサネットフレームは プリアンブル・宛先/送信元MAC・タイプ長・ペイロード・FCS から成り、最小64バイトという下限が衝突検出を成立させている。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。