🎓 レベル:基礎 | 重要度:A(必須) 📎 前提:カプセル化とデータの流れ
要点(BLUF)
- イーサネットは有線LANの事実上の標準で、データをフレームという単位で運びます。
- MACアドレスは48ビットのハードウェア識別子で、フレームの「隣接ノード間の宛先/送信元」を表します。
- 昔のハブ時代は1本の線を共有し衝突を避ける CSMA/CD が必要でしたが、スイッチ+全二重の現在は衝突そのものが起きません。
イーサネットフレームの構造
L2のPDUであるフレームは、おおむね次の並びです。
graph LR P["プリアンブル+SFD(同期8B)"] DA["宛先MAC(6B)"] SA["送信元MAC(6B)"] T["タイプ/長さ(2B)"] D["ペイロード(46〜1500B)"] F["FCS(4B・誤り検査)"] P --> DA --> SA --> T --> D --> F
- 宛先MAC / 送信元MAC:このフレームを「次に受け取るべき機器」と「直前に送った機器」。
- タイプ:中身のL3プロトコル(
0x0800=IPv4、0x86DD=IPv6、0x0806=ARP)。 - ペイロード:46〜1500バイト。上限1500が標準MTU。下限46に満たないときはパディングします。
- FCS:CRCによる誤り検査。壊れていれば受信側が破棄します(再送はしない=信頼性はL4の仕事)。
MACアドレスの読み方
48ビットを16進2桁ずつ、6組で表記します(例 00:1A:2B:3C:4D:5E)。前半24ビットと後半24ビットで意味が分かれます。
- 前半24ビット OUI:ベンダー識別子(メーカーにIEEEが割当)。
- 後半24ビット:ベンダー内の通し番号。
- 先頭バイトの下位2ビットが特別な意味を持ちます。
- 最下位ビット(I/Gビット):0=ユニキャスト、1=マルチキャスト/ブロードキャスト。
- その隣(U/Lビット):0=グローバル一意(焼き込み)、1=ローカル管理(任意設定)。
- 全ビット1の
FF:FF:FF:FF:FF:FFはブロードキャスト(同一LANの全員宛て)。
# MACアドレスの種別を判定する(標準ライブラリのみ)
def classify(mac):
first = int(mac.split(":")[0], 16)
if mac.lower() == "ff:ff:ff:ff:ff:ff":
return "broadcast"
return "multicast" if (first & 1) else "unicast"
for m in ["00:1A:2B:3C:4D:5E", "01:00:5E:00:00:01", "FF:FF:FF:FF:FF:FF"]:
print(m, "->", classify(m))
実行結果:
00:1A:2B:3C:4D:5E -> unicast
01:00:5E:00:00:01 -> multicast
FF:FF:FF:FF:FF:FF -> broadcast
01:00:5E... はIPv4マルチキャスト用に予約されたOUIで、先頭バイト 01 の最下位ビットが1なのでマルチキャスト判定になります。
CSMA/CD と全二重への進化
- ハブ時代(半二重):全員が1本の線を共有。同時に話すと衝突。そこで「送る前に聞き、衝突したら止めてランダム時間待つ」CSMA/CDで調停していました。
- スイッチ時代(全二重):各ポートが専用線で送受信を分離。衝突が起きないため CSMA/CD は無効化され、帯域を100%使えます。
graph TD H["ハブ接続(1つのコリジョンドメイン)"] H --> N1["全員が衝突を共有→CSMA/CD必須"] S["スイッチ接続(ポートごとに分離)"] S --> N2["衝突なし→全二重で帯域フル活用"]
「コリジョンドメイン」はスイッチのポートごとに分割され、「ブロードキャストドメイン」はVLAN/ルータで分割されます(次トピック以降)。
なぜMACとIPの両方が要るのか(設計の直観)
MACは「製造時に焼かれた、場所に依らない名前」、IPは「ネットワーク上の住所」。引っ越しても名前は変わりませんが住所は変わる、のと同じです。配送はまず近所(同一LAN内)はMACで、遠方はIPで経路を決めてから各区間をMACで運びます。役割が違うため両方必要なのです。
⚠️ よくある誤解
- 「MACはグローバルに一意だから世界中で経路に使える」ではない。MACは平坦(階層なし)なので、世界規模の経路選択には使えません。だからL3でIPという階層アドレスを使います。
- 「FCSがあるから再送される」ではない。FCSは検出のみ。壊れたフレームは黙って捨てられ、回復はTCP(L4)に委ねられます。
- 「MACは絶対に変えられない」ではない。U/Lビットの通り、ソフトでローカル管理アドレスに上書きできます(仮想化・MACスプーフィング)。
対応 lab
[[networking-study/labs/02-01_mac_classify.py]]— MAC種別判定とOUI抽出
関連
- 前:
[[01-03_カプセル化とデータの流れ]]/次:[[02-02_スイッチの動作]] - このMACを学習する装置:
[[02-02_スイッチの動作]]/MACとIPの対応付け:[[03-04_ARPとICMP]]