NET // communication networks
LESSON 23 / 標準編

リンク層 ── Ethernet・ARP・スイッチング

同じネットワーク内の 隣り合うノード同士 はどうやってデータをやり取りしているのでしょうか。本講では 48 ビット MAC アドレスEthernet フレーム の構造、L2 スイッチの自己学習IP から MAC を引く ARP の動作までを、フレーム図と動かせる手順で踏み込みます。基本情報技術者・学部 1〜2 年向け。

学習目標

本講を終えると、以下の問いに答えられるようになります。

本講は 標準 ネットワーク全体像とレイヤー観標準 IP・CIDR・サブネット の続きにあたります。基礎の 第 3 回 プロトコルと TCP/IP 階層モデル で「リンク層 = 隣の機器との実際のやり取り」とだけ捉えていた内容を、フレーム図と動作で再構成します。L2 スイッチの上位機能 (VLAN / STP) は発展編で扱い、次の標準編では 無線 LAN (CSMA/CA) に進みます。

このレッスンの目次

01 リンク層の役割 リンク層 (データリンク層、L2) は TCP/IP モデルの最下層に位置し、 同じ… 02 MAC アドレス MAC アドレス (Media Access Control address) は、… 03 Ethernet フレーム Ethernet は LAN で最も広く使われている 有線リンク層プロトコル で、 … 04 CSMA/CD と全二重 Ethernet の仕様書には CSMA/CD (Carrier Sense Mul… 05 スイッチの動作 現代の有線 LAN の中心は L2 スイッチ (= スイッチングハブ) です。スイッ… 06 ARP (IP→MAC) 上位層から見ると「相手のIPアドレスは分かっている」のですが、 そのIPに紐づいたM… 07 発展へ ARP の信頼ベースの弱点や対策は、発展編で扱う話題として位置づける 08 まとめと用語 本講の重要語句を整理 09 確認問題 理解度を問題でチェック

リンク層の役割 ── 「隣の人」までのバトンリレー

リンク層 (データリンク層、L2) は TCP/IP モデルの最下層に位置し、同じ物理リンク (同じサブネット) 上の隣接ノード間 でフレームを正しく届けることを担当します。世界中への経路設定はネットワーク層 (IP) の仕事ですが、その IP データグラムは 1 ホップごとに必ずリンク層フレームに包み直されて 隣の機器へ運ばれていきます。
POINT リンク層 = 「隣のノードまで」 の運搬係。世界中への経路は IP が決めるが、実際にケーブルや電波の上を流れるのは 常にリンク層のフレーム。1 ホップ走るたびに フレームヘッダ (MAC アドレス) は付け替えられる

リレー走者のたとえ

長距離リレーで考えてみましょう。スタートからゴールまでの 全体経路 を計画するのはコーチ (= IP)、各区間で 次の走者にバトンを渡す のが選手 (= リンク層) です。選手は次の走者の顔さえ知っていればよく、ゴールまでの全体像を把握する必要はありません。

大きな図 ① エンドツーエンドで見るリンク層の働き

IP は端から端まで不変、MAC は 1 ホップごとに書き換え ホスト A IP: 133.71.192.102 MAC: AA-AA-AA-AA-AA-AA ルータ R1 MAC(左): BB-...-B1 MAC(右): BB-...-B2 ルータ R2 MAC(左): CC-...-C1 MAC(右): CC-...-C2 ホスト B IP: 133.71.240.21 MAC: DD-DD-DD-DD-DD-DD 区間 1 のフレーム 宛先 MAC: BB-...-B1 送信元 MAC: AA-...-AA 区間 2 のフレーム 宛先 MAC: CC-...-C1 送信元 MAC: BB-...-B2 区間 3 のフレーム 宛先 MAC: DD-...-DD 送信元 MAC: CC-...-C2 IP ヘッダ (送信元 133.71.192.102 → 宛先 133.71.240.21) は端から端まで 不変

図の見方:1 つの IP データグラムは A → R1 → R2 → B と 3 区間を通るとき、IP ヘッダ (発・着 IP) は 変わらない のに対し、MAC ヘッダ (宛先・送信元 MAC) は 区間ごとにルータが書き換える。MAC アドレスは「次の隣のノード」を指す印として使われている。

リンクの種類とアクセス制御

リンクには大きく 2 種類あり、それぞれ メディアアクセス制御 (MAC: Medium Access Control) の必要性が異なります。

ポイントツーポイントリンク

2 つのノードだけが線でつながっているリンク。専用線・PPP・HDLC などが代表例。邪魔されない ので特別な調停は不要 (フレーム形式の合意があれば話せる)。

ブロードキャストリンク (共有リンク)

同じ媒体を複数ノードが共有するリンク。古典的な同軸 Ethernet や無線 LAN がこれに当たる。誰がいつ送るかを 調停 しないと信号が衝突するため、CSMA/CD・CSMA/CA といった MAC プロトコルが必要。

考えてみよう: 「IP アドレスがあるなら、MAC アドレスは要らないのでは?」と感じる人もいるはず。実は MAC が必要なのは、(1) 同じセグメント上の どの口 宛てかを示すため (IP は論理アドレスなので物理ポートを指せない)、(2) 付け替え ができるため経路上の各リンクの事情に合わせられるため、です。詳しくは次の節で。

MAC アドレス ── ハードウェアに刻まれた 48 ビット ID

MAC アドレス (Media Access Control address) は、Ethernet・Wi-Fi・Bluetooth などで使われる 48 ビット (6 バイト) の識別子です。NIC (Network Interface Card) の出荷時にハードウェアに焼き付けられており、原則として 世界で一つに割り当てる ことになっています (ベンダ管理によって衝突を避けています)。
POINT MAC アドレスは 「物理アドレス」。前半 24 bit が OUI (ベンダ ID)、後半 24 bit が 各ベンダ内のシリアル。先頭バイトの最下位 2 ビットで ユニキャスト/マルチキャストグローバル/ローカル を判別する。

表記と構造

MAC アドレスは 8 ビットごとに区切って 16 進で書きます (例: 1A-23-F9-CD-06-9B1a:23:f9:cd:06:9b)。先頭から 24 ビットがベンダを識別する OUI (Organizationally Unique Identifier) で、後半 24 ビットがそのベンダがシリアルとして自由に振る部分です。

大きな図 ② MAC アドレスのビット構造

MAC アドレス: 48 ビット = OUI 24 bit + シリアル 24 bit 1A 23 F9 CD 06 9B バイト 1 バイト 2 バイト 3 バイト 4 バイト 5 バイト 6 OUI (24 bit / ベンダ ID) NIC シリアル (24 bit) 先頭バイトのビット拡大 (0x1A = 0001 1010) 0 0 0 1 1 0 1 0 b7 b6 b5 b4 b3 b2 b1 b0 b1 (= 第 7 ビット): U/L ビット ─ 0=グローバル / 1=ローカル管理 b0 (= 第 8 ビット): I/G ビット ─ 0=ユニキャスト / 1=マルチキャスト 先頭バイトの 16 進が FF (= 1111 1111) は全ビット 1 で、ブロードキャスト

図の見方:48 ビットを 6 バイトに分け、前 3 バイトが OUI (ベンダ ID)、後 3 バイトが シリアル。先頭バイトの 最下位 2 ビット (b0/b1) で配信種別 (ユニキャスト/マルチキャスト) と管理種別 (グローバル/ローカル) を表す。FF-FF-FF-FF-FF-FF は全ビット 1 で ブロードキャスト

3 種類の宛先

種別宛先 MAC の例意味
ユニキャスト1A-23-F9-CD-06-9B (b0=0)特定の 1 台宛て。最も普通の通信
マルチキャスト01-00-5E-XX-XX-XX (b0=1)同じグループに参加した複数台宛て (例: IPv4 マルチキャストは 01-00-5E プレフィックスにマップ)
ブロードキャストFF-FF-FF-FF-FF-FF同じセグメント上の 全員 宛て。ARP リクエストや DHCP DISCOVER で使う
小問: ARP リクエストはどの宛先 MAC アドレスに送るのが正しいか。
正解:B。ARP リクエストは「この IP の持ち主は誰?」を 同じセグメント上の全員 に問いかけるため、宛先 MAC を ブロードキャスト にして送ります。問われている本人だけが ARP リプライを ユニキャスト で返します。なお IPv6 では類似機能を 近隣探索 (NDP) がマルチキャストで行うため、D 寄りに変わります。

なぜ IP に加えて MAC が要るのか

「IP アドレスだけでは世界中の機器を識別しきれない」のではなく、役割が違う から両方が要ります。IP は 論理アドレス で、ネットワーク (サブネット) の場所をエンコードしています。MAC は 物理アドレス で、特定の NIC (= 物理ポート) を一意に指します。IP は付け替え可能 (DHCP で配布される/サブネット移動で変わる) なのに対し、MAC は出荷時に固定。この組み合わせで「どこのサブネットの、どの NIC か」を 2 段階で表せるのです。

もっと詳しく:MAC アドレスは本当に世界で一つ?

原則は「世界で一つ」ですが、現代の OS は MAC アドレスをソフト的に変更 できます (Linux の ip link set ... address、macOS / Windows でも可)。さらにスマートフォンの Wi-Fi では プライバシー保護のためのランダム MAC が標準的に使われており、接続するアクセスポイントごとに別の MAC を提示することで追跡を防いでいます。U/L ビット = 1 (ローカル管理) でランダム MAC を表すのが定石です。

また、仮想マシンや Docker コンテナの NIC にも MAC が割り当てられます (ハイパーバイザがランダム生成・OUI も予約済みのもの:VMware の 00:50:56、VirtualBox の 08:00:27 など)。

Ethernet フレーム ── 1 枚のフレームを丸ごと読む

Ethernet は LAN で最も広く使われている 有線リンク層プロトコル で、IEEE 802.3 として標準化されています。データは フレーム という単位で送出され、その先頭 8 バイトの同期信号 (プリアンブル + SFD) のあとに、宛先 MAC・送信元 MAC・EtherType・ペイロード・FCS が続きます。

大きな図 ③ Ethernet II フレームの全フィールド

Ethernet II フレーム ── 数字はバイト数 プリアンブル 7 バイト SFD 1 宛先 MAC 6 送信元 MAC 6 タイプ 2 ペイロード (上位層のデータ) 46 〜 1500 バイト FCS 4 同期 (NIC が破棄) ヘッダ (14 バイト) データ (46〜1500 バイト) トレーラ (誤り検出) フィールドの中身 プリアンブル + SFD (8 B) = 10101010 × 7 + 10101011。受信側 NIC のクロック同期用。フレーム本体には含めず、サイズ計算からも除く慣習。 宛先 MAC / 送信元 MAC (各 6 B) = 隣の機器を指す印。順番は「宛先が先」。 タイプ (EtherType, 2 B) = 上位プロトコルの識別。0x0800=IPv4、0x86DD=IPv6、0x0806=ARP など。 ペイロード (46〜1500 B) = 上位層 (IP データグラム等) を載せる。46 B より短ければ パディング で 46 B に揃える。 FCS (Frame Check Sequence, 4 B) = ヘッダ + ペイロード全体の CRC32。受信側で再計算して一致しなければフレームを破棄。 フレーム本体 (= ヘッダ + データ + FCS) のサイズは 最小 64 / 最大 1518 バイト (標準)。

図の見方:Ethernet II フレームは「同期 8 B → ヘッダ 14 B → データ 46〜1500 B → FCS 4 B」の順。色は機能ごとの分類で、緑=同期桃=アドレス黄=上位層識別藍=データ水色=誤り検出

主要フィールド早見表

フィールド長さ役割
プリアンブル7 バイト10101010 を 7 回繰り返したパターン。受信 NIC のビット同期用
SFD (Start Frame Delimiter)1 バイト10101011。「このあと宛先 MAC が来るぞ」の開始合図
宛先 MAC アドレス6 バイトこのフレームの直接の受け取り手の MAC
送信元 MAC アドレス6 バイトこのフレームを直接出した NIC の MAC (スイッチの自己学習に使う)
タイプ (EtherType)2 バイトペイロードの上位プロトコル (IPv4 = 0x0800 など)
ペイロード46〜1500 バイトIP データグラムなど。46 未満ならパディングで埋める
FCS (CRC)4 バイトCRC-32 によるエラー検出。一致しなければ受信側はフレームを破棄

フレームサイズ ── 64〜1518 バイト

Ethernet 標準のフレーム本体 (ヘッダ + データ + FCS) は 最小 64 バイト・最大 1518 バイト です。最大ペイロード長を MTU (Maximum Transmission Unit) と呼び、Ethernet では 1500 バイト がデフォルト。1518 = 14 (ヘッダ) + 1500 (データ) + 4 (FCS) という算数になります。

最小 64 バイトは CSMA/CD の 衝突検出に必要な時間 (フレームを送り切る前に衝突を検出できなければならない) から決まった値です。短すぎるペイロードは パディング で 46 バイトまで膨らませます。

もっと詳しく:EtherType の代表値 (0x0800 / 0x86DD / 0x0806)
EtherType上位プロトコル用途
0x0800IPv4最も一般的。IP データグラムを Ethernet で運ぶ
0x86DDIPv6IPv6 データグラム
0x0806ARPIP→MAC 解決のリクエスト/リプライ
0x8100IEEE 802.1Q (VLAN)VLAN タグ付きフレーム (4 バイト追加で最大 1522 B に)
0x8035RARP逆 ARP (MAC→IP)。歴史的
0x88CCLLDP近隣機器探索 (Link Layer Discovery Protocol)

※ EtherType は値が 0x0600 (1536) 以上のときに「タイプ」として、それ未満のときは「IEEE 802.3 のレングス」として解釈する仕様です。

ジャンボフレーム

標準の MTU 1500 バイトは、衝突検出時代の制約や歴史的な経緯で決まった値です。ギガビット Ethernet 以降のスイッチ環境 では ジャンボフレーム (典型的にペイロード 9000 バイト前後) を使う運用があり、データセンタ間や大量転送 (ストレージ・バックアップ) で ヘッダオーバーヘッドの比率を下げる ことができます。ただし、経路上のすべての機器が同じ MTU をサポートしている必要があり、設定ミスはパケットドロップ・MTU ブラックホールの原因になります。対応サイズや既定値は機器や設定で異なります。

つながる知識: このフレームの中の ペイロード こそが、標準 で扱った IP データグラム です。さらにその中に TCP セグメント (標準) や UDP データグラム (標準)、HTTP メッセージ (標準) と入れ子になります。1 フレームを Wireshark で開けば、これらの階層が ヘッダの順 に剥がれて見えるはずです。

CSMA/CD と全二重 ── 「共有時代」と「スイッチ時代」

Ethernet の仕様書には CSMA/CD (Carrier Sense Multiple Access with Collision Detection) というメディアアクセス制御が書かれていますが、現代の Ethernet (スイッチ + 全二重) では 事実上発動しません。なぜそうなったのかを順を追って見ていきましょう。

古典的な共有 Ethernet ── バス型と CSMA/CD

1980 年代までの Ethernet は 1 本の同軸ケーブル をすべての PC が共有する バス型 構成でした。同時に複数の PC が送信すると信号が 衝突 (collision) し、双方のフレームが破壊されます。これを管理する仕組みが CSMA/CD です。

共有同軸ケーブル (= 1 本の媒体) A B C D ① キャリアセンス:誰もデータを送っていない (静か) A は媒体を聞き、無音であることを確認 ② A がフレームを送信開始 (ブロードキャストで全員に届く) 送信中も媒体上の電圧を監視 (CD = Collision Detection) ③ ほぼ同時に C も送信 → 衝突発生 (信号が重なる) 電圧異常により両者が衝突を検出 ④ ジャム信号を 32〜48 ビット送って、確実に他者にも衝突を伝える 送信を中断、フレームは破棄 ⑤ 二進指数バックオフでランダム待機 → 再送試行 衝突回数 n のとき [0, 2^n − 1] 個のスロット時間からランダム選択 (上限 10 回)
ステップ 1. 送りたい局はまず媒体の電圧を聴き、誰も送信していない (= キャリア無し) ことを確認します。これが「Carrier Sense」の意味です。
ステップ 2. 静かなら送信を開始します。CSMA/CD では送信中も電圧を監視し続けます。これが「Collision Detection」。バス型なので信号は両方向に伝わり、全員が同じものを受け取ります。
ステップ 3. ところが、もう 1 つの局 C もちょうど「無音だ」と判断して送信を始めると、ケーブル上で信号が重なって 衝突 します。電圧の重畳でこれは検出可能です。
ステップ 4. 衝突を検出した局は、即座に ジャム信号 (jam signal, 32〜48 ビット) を送って、他の局にも「いま衝突したよ」を確実に伝え、自分の送信は破棄します。
ステップ 5. その後、二進指数バックオフ (binary exponential backoff) でランダムな時間だけ待機してから再送します。連続衝突するほど待ち時間の上限が指数的に伸びる仕掛けで、混雑時の再衝突を抑えます。
1 / 5

図の見方:CSMA/CD は「聞いてから送る → 送りながら衝突監視 → 衝突したらジャム + バックオフ」のループ。バス型のように 1 本の媒体を共有 しているからこそ衝突が起きうる。スター型 + スイッチでは別の口同士が干渉しないのでこの仕組みは原則不要になる。

全二重と半二重

半二重 (half-duplex)

送信と受信を 同時に 行えない方式。古典的なバス型 Ethernet・ハブ環境がこれ。送信中は受信できず、衝突に備えて CSMA/CD が必要。

全二重 (full-duplex)

送信ペアと受信ペアが 分かれている 方式。スイッチと PC を 1 対 1 で結ぶ現代の構成では、行きと帰りで物理的にペアが違うので、衝突が起こりえない。CSMA/CD はオフが標準。

コリジョンドメインとブロードキャストドメイン

古典的なバス型 Ethernet やハブで結ばれた範囲が コリジョンドメイン ── 同時送信で衝突が起こりうる範囲です。スイッチを 1 段挟むと、各ポートが 独立したコリジョンドメイン になります (これがスイッチの大きな価値)。一方で、ブロードキャストドメイン (ブロードキャストフレームが届く範囲) は ルータでしか分割できません。スイッチはブロードキャストをそのまま転送します。

Q. ハブ (リピータハブ) とスイッチングハブを混ぜた LAN では、コリジョンドメインはどこで切れるか?

歴史的補足: 1990 年代後半までは「Ethernet = CSMA/CD」と教科書で書かれていました。しかし 1Gbps 以上のスイッチ全二重環境では衝突自体が起きえないため、規格上の歴史的な説明としては残りつつも、実務では「衝突が起きないので CSMA/CD は意識しない」が標準です。

L2 スイッチの動作 ── 自己学習する転送装置

現代の有線 LAN の中心は L2 スイッチ (= スイッチングハブ) です。スイッチは 到着フレームの送信元 MAC を見てテーブルを学習 し、宛先 MAC を見てそのポートにだけ転送 します。ハブ (全ポートに垂れ流し) と違って 無駄な帯域を使わず、コリジョンドメインも分離 します。
POINT L2 スイッチの 3 つの基本動作:
① 学習 (Learning) = 到着フレームの送信元 MAC とポート番号を MAC アドレステーブルに記録
② フォワーディング (Forwarding) = 宛先 MAC がテーブルにあれば、そのポートにのみ転送
③ フラッディング (Flooding) = 宛先 MAC が 未知 またはブロードキャストなら、到着ポート以外の全ポートに 流す
(④ フィルタリング = 同じセグメント内で完結する場合は転送しない)

3 種類のハブ・スイッチを比較

ハブ (リピータハブ)

動作層:物理層 (L1)。受信した電気信号を全ポートに そのまま増幅して垂れ流す だけ。MAC アドレスを見ない。

L2 スイッチ

動作層:データリンク層 (L2)MAC アドレステーブル を持ち、宛先 MAC を見て該当ポートにのみ転送する。

ルータ

動作層:ネットワーク層 (L3)IP アドレス を見てルーチングテーブルから次ホップを決め、MAC ヘッダを付け替えて 転送する。

大きな図 ④ スイッチの自己学習プロセス (アニメーション)

下のアニメーションは、空っぽの MAC アドレステーブルを持つスイッチが、フレームを受け取るたびに 送信元を学習 し、宛先をテーブルで確認して出口ポートを決める 様子を表します。再生・一時停止・最初から再生のボタンで観察してください。

端末 A MAC: AA... 端末 C MAC: CC... 端末 B MAC: BB... 端末 D MAC: DD... L2 スイッチ P1 P3 P2 P4 到着したら表を確認 A→B D→C MAC アドレステーブルを参照 1. 送信元を学習: AA → P1 2. 宛先を検索: BB → P2 未登録なら全ポートへ

図の見方:フレームがスイッチに到着した瞬間、スイッチはまず 送信元 MAC を到着ポートに紐づけて学習し、次に 宛先 MAC をテーブルで確認して出口ポートを決める。宛先が未登録なら到着ポート以外へフラッディングし、登録済みならそのポートにだけ転送する。実機ではこのテーブルに エージング (一定時間で自動消去。時間は機種・設定依存) がある。

順を追って:学習のステップ

  1. 初期状態: MAC アドレステーブルは空。
  2. A → B のフレームが到着: スイッチは送信元 MAC = AA を入ってきた P1 と紐づけて記録。宛先 MAC = BB はテーブルに 無い ので、到着ポート (P1) 以外の全ポート にフラッディング。
  3. B が応答 (B → A): 送信元 MAC = BB を P2 と紐づけて記録。宛先 MAC = AA は すでに知っている ので、P1 にだけフォワーディング (これでフラッディングは止む)。
  4. D → C のフレーム到着: 送信元 MAC = DD を P4 と紐づけて記録。宛先 MAC = CC は未知なのでフラッディング。応答で CC も P3 として学習される。
  5. その後: テーブルは {AA→P1, BB→P2, CC→P3, DD→P4} で安定。以降は 常にユニキャスト転送 となり、無駄な帯域消費がなくなる。

Q. もし「スイッチが MAC アドレスを学習しない」(常にフラッディングする) と仮定したら、何が困るだろうか?

スイッチとブリッジの違い (歴史的)

機能的には同じ 「MAC を見てフレームを転送する L2 装置」 ですが、歴史と接続形態が違います。ブリッジ は 1980 年代に登場した 2 ポート程度 の装置で、ソフトウェアで MAC を学習・転送していました。スイッチ (スイッチングハブ) はその後継で、多ポート + ASIC によるハードウェア高速化で、現代の LAN の中心になっています。「ブリッジを多ポート化したのがスイッチ」と覚えてかまいません。

つながる知識: 同じ L2 ネットワーク内に ループ (スイッチ間に冗長経路) があると、フラッディングしたフレームが永久に巡回して ブロードキャストストーム を起こします。これを防ぐ STP (Spanning Tree Protocol)発展 VLAN(802.1Q・トランク) で扱います。

ARP ── IP アドレスから MAC を引く 2 段階の通信

上位層から見ると「相手のIPアドレスは分かっている」のですが、そのIPに紐づいたMACアドレスを知らない ことがほとんどです。ここで活躍するのが ARP (Address Resolution Protocol、RFC 826)。同じセグメント上に向かって「このIPの持ち主、いますか?」とブロードキャストで尋ね、本人がユニキャストで「私です」と返す、シンプルな 2 段階のやり取りです。
POINT ARP の流れ:
ARP リクエスト = 宛先 MAC を FF-FF-FF-FF-FF-FF (ブロードキャスト) にして「IP=192.168.1.124 の人いる?」と全員に問い合わせる
ARP リプライ = 該当する 1 台だけが「私です。MAC は ... です」と ユニキャスト で答える
③ 結果は ARP キャッシュ にしばらく保持し、次回からはキャッシュで即解決

ARP リクエストとリプライをステップで歩く

ホスト A IP: 192.168.1.100 MAC: 11:11:11:11:11:11 ホスト B IP: 192.168.1.124 MAC: 08:00:21:72:CE:CB ホスト C (傍観) IP: 192.168.1.50 同一セグメント 192.168.1.0/24 A は B (192.168.1.124) に通信したい A の ARP キャッシュには 192.168.1.124 のエントリが無い ① ARP リクエスト (ブロードキャスト) 宛先 MAC=FF-FF-FF-FF-FF-FF, "192.168.1.124 の MAC を教えて" ② 全員が受信、宛先 IP が自分か照合 A 自身は無視、C も「うちじゃない」で破棄、B だけが "私だ" と気付く ③ ARP リプライ (ユニキャスト) 宛先 MAC=11:11:11:11:11:11, "私の MAC は 08:00:21:72:CE:CB" ④ A は ARP キャッシュに記録 192.168.1.124 → 08:00:21:72:CE:CB を保存 (TTL 数分間) ⑤ 本来の IP パケットを Ethernet フレームで送信 宛先 MAC=08:00:21:72:CE:CB に乗せて、IP データグラムを送信
ステップ 1. ホスト A が「192.168.1.124 と通信したい」と思いつきますが、IP データグラムを Ethernet フレーム に包むには 宛先 MAC が必要です。A の ARP キャッシュには該当エントリが無いので、まず ARP で解決する必要があります。
ステップ 2. A は ARP リクエスト を作ります。EtherType = 0x0806 (ARP)、宛先 MAC は FF-FF-FF-FF-FF-FF (ブロードキャスト)。中身は「Sender IP=192.168.1.100, Sender MAC=11:11..., Target IP=192.168.1.124, Target MAC=00:00...(未知)」です。スイッチはブロードキャストを全ポートにフラッディングします。
ステップ 3. 同じセグメントの全員 (A 自身は除く) がこのフレームを受信し、ARP リクエスト内の Target IP と自分の IP を比較します。一致しないホスト C 等は 静かに破棄。一致したホスト B だけが応答に進みます。
ステップ 4. B は ARP リプライ を返します。これは ユニキャスト (宛先 MAC = A の MAC = 11:11:11:11:11:11) です。中身は「Sender IP=192.168.1.124, Sender MAC=08:00:21:72:CE:CB」。「私が 192.168.1.124 で、MAC はこれです」と直接 A にだけ返します。
同時に B 自身も「相手 A の IP→MAC マッピング」を 自分の ARP キャッシュに記録 します (リプライしたついでに学習)。
ステップ 5. A は ARP リプライを受け取り、ARP キャッシュ に「192.168.1.124 → 08:00:21:72:CE:CB」を記録します。Linux なら ip neigh、Windows なら arp -a で見られます。エントリには TTL (数十秒〜数分など、OS や設定で変わる) があり、期限が切れたら再度 ARP します。
ステップ 6. ようやく A は本来送りたかった IP データグラム を Ethernet フレームに包んで送信できます。EtherType=0x0800 (IPv4)、宛先 MAC=08:00:21:72:CE:CB。これ以降の通信は ARP キャッシュ有効期間中はリクエストせず直送できます。
重要: ARP は 同じサブネット内 でのみ意味を持ちます。サブネット外の宛先 IP に対しては、A は「デフォルトゲートウェイの IP」の MAC を ARP で解決し、IP の宛先はそのままで MAC だけゲートウェイ宛て に乗せます。
1 / 6

図の見方:① リクエストは全員に飛ぶブロードキャスト、③ リプライは本人 → 質問者の 1:1 ユニキャスト。⑤ で実フレームの送信が初めて成立する。「ARP は通信の前準備」 と覚えるとよい。

サブネット越え: 宛先 IP の MAC ではなくゲートウェイの MAC を ARP する

「世界中どこへでも届く IP」とは違って、ARP の問い合わせ範囲は 同じセグメントのみ です。なぜならブロードキャストはルータで止まるからです。では、サブネット外への通信ではどうするのでしょうか?

結果として、フレームの 宛先 MAC はゲートウェイの MAC宛先 IP は最終目的地の IP という組み合わせで送出されます。ルータはこのフレームを受け取り、IP ヘッダの宛先を見て次ホップを決め、新しい MAC ヘッダを付け替えて 送り直します (1 節で見たリレーの仕組み)。

ARP キャッシュをのぞく

OSコマンド備考
Linuxip neigh show / arp -nSTATE 列で REACHABLE/STALE などが見える
macOS / BSDarp -a(incomplete) は ARP 失敗
Windowsarp -a動的/静的の区別が表示される
もっと詳しく:Gratuitous ARP (ガーシュアス ARP) とは

Gratuitous ARP (GARP)「自分の IP に対する ARP リクエストを、自分自身が送る」 ちょっと変わった ARP です。Target IP に 自分の IP を入れて送出します。期待する応答はありません (もし返ってきたら IP アドレスの重複!)。主な用途は次の通り。

GARP は便利な反面、嘘の対応関係を流す攻撃にも悪用されます。標準編では「ARP は信頼ベース」とだけ押さえ、詳しいセキュリティ(スプーフィング・DAI 等)は実機運用で必要になったときに学習してください。

考えてみよう: IPv6 では ARP が無くなり、代わりに ICMPv6 上の 近隣探索プロトコル (NDP: Neighbor Discovery Protocol) がブロードキャストではなく マルチキャスト で同等の機能を実現しています。「ブロードキャストは無駄が多い」を避けるための再設計です。

発展へ ── ARP のセキュリティ

ARP は「IP アドレスに対応する MAC アドレスをたずねる」ための素朴な仕組みです。そのため、標準編では ARP リクエスト、ARP リプライ、ARP キャッシュ の動作を中心に押さえます。嘘の ARP を使った攻撃や、スイッチ側で検査する対策は、運用・セキュリティ寄りの発展話題に分けます。
POINT ここでは 「ARP は認証を持たない信頼ベースの仕組み」 という位置づけだけ分かれば十分です。攻撃手順や対策名を覚えるより先に、通常の ARP がどう動くかを固めます。

標準編で覚えること: ARP は 同じセグメント内で IP→MAC を解決する前準備。セキュリティ面では「嘘の ARP を信じると問題になる」(ARP スプーフィング)という認識を持ち、対策(静的 ARP、Dynamic ARP Inspection、ポートセキュリティ等)は実機運用で都度学んでください。

まとめと用語チェック

本講の要点 5 つ

用語チェック

用語一行説明
MAC アドレス48 ビットのハードウェア識別子。前半 OUI、後半シリアル
OUIIEEE がベンダに割り振る 24 ビットの識別子
ユニキャスト / マルチキャスト / ブロードキャスト1 対 1 / 1 対グループ / 1 対全員 の宛先種別
EtherTypeEthernet ペイロードの上位層識別 (0x0800=IPv4, 0x86DD=IPv6, 0x0806=ARP)
FCS / CRC32フレーム末尾 4 バイトの誤り検出符号
MTU最大ペイロード長。Ethernet 標準で 1500 バイト
ジャンボフレーム標準 MTU を超えた大きなフレーム (典型 9000 B)
CSMA/CD半二重共有メディア用のアクセス制御。聞いて送る + 衝突したら再送
全二重 / 半二重送受信を同時に行えるか/行えないか
コリジョンドメイン衝突が起こりうる範囲。スイッチで分割される
ブロードキャストドメインブロードキャストが届く範囲。ルータで分割される
L2 スイッチの自己学習送信元 MAC + 入力ポートをテーブルに記録すること
フォワーディング / フラッディング / フィルタリング宛先既知時の転送 / 未知時の全ポート送出 / 同一ポート向けの抑制
MAC アドレステーブルスイッチ内の MAC ↔ ポート対応表 (エージングあり)
ARPIP→MAC を解決するプロトコル (RFC 826, EtherType 0x0806)
ARP リクエスト / リプライブロードキャストで問い合わせ / 本人がユニキャストで応答
ARP キャッシュ解決結果を一定時間 (典型: 数十秒〜数分) 保持する一時表
Gratuitous ARP自分の IP に対する ARP を自分で送る。重複検知・キャッシュ更新に利用
ARP セキュリティ (発展)嘘の ARP や対策は 発展編 で扱う
NEXT: 次の標準編は 標準 無線 LAN(802.11) です。L2 スイッチの発展話題を先に確認したい場合は、発展 VLAN(802.1Q・トランク) で、VLAN による論理分割と STP によるループ防止を読めます。

確認問題

問1. MAC アドレスに関する記述として、最も適切なものを 1 つ選べ。

次の選択肢から最も適切なものを選択してください。
A. MAC アドレスは 32 ビットで、ネットワーク部とホスト部に分かれる
B. MAC アドレス FF-FF-FF-FF-FF-FF は自分自身を意味するループバック
C. MAC アドレスは 48 ビットで、前半 24 ビットがベンダ識別子 (OUI)、後半 24 ビットがベンダ内シリアル
D. MAC アドレスは DHCP サーバから動的に配布されるため、再起動するたびに変わる
正解:C
MAC アドレスは 48 ビット (= 6 バイト)。前半 24 ビットの OUI は IEEE がベンダに割り振る識別子で、後半 24 ビットがベンダ内シリアル。A は IPv4 アドレスのビット長と混同。B はブロードキャスト (ループバックは IP の 127.0.0.1 など) なので誤り。D は DHCP の対象は IP アドレスで MAC は出荷時に NIC に焼き付けられているのが原則。

問2. Ethernet II フレームの最大フレーム長 (本体: ヘッダ + データ + FCS) として、最も適切なものを 1 つ選べ。

次の選択肢から最も適切なものを選択してください。
A. 1500 バイト
B. 1518 バイト
C. 1522 バイト
D. 9000 バイト
正解:B
Ethernet II の標準フレーム本体は 14 (ヘッダ) + 46〜1500 (ペイロード) + 4 (FCS) = 64〜1518 バイト (プリアンブル+SFD は同期信号のためサイズに含めない慣習)。A はペイロードのみの最大 (= MTU)。C は VLAN タグ付き (802.1Q) で 4 バイト追加された場合の値で、これも正しい場面はあるが「Ethernet II 標準」とは言わない。D はジャンボフレームで、標準ではない。

問3. L2 スイッチの動作に関する記述として、誤っている ものを 1 つ選べ。

次の選択肢から最も適切なものを選択してください。
A. 受信したフレームの送信元 MAC アドレスと到着ポートを MAC アドレステーブルに記録する
B. 宛先 MAC アドレスがテーブルに無いユニキャストフレームは、到着ポート以外の全ポートにフラッディングする
C. ブロードキャストフレーム (宛先 MAC=FF-FF-FF-FF-FF-FF) は、到着ポート以外の全ポートにフラッディングする
D. 異なるサブネット間のフレームを、IP ヘッダを参照してルーチングする
正解:D
D は L3 ルータの仕事 であり、L2 スイッチは IP ヘッダを参照しない。スイッチは MAC ヘッダだけを見て動作する純粋な L2 装置で、異なるサブネット (= 異なるブロードキャストドメイン) をつなぐにはルータが必要。A・B・C はいずれもスイッチの基本動作 (学習・フラッディング・フォワーディング) として正しい。

問4. ARP に関する記述として、最も適切なものを 1 つ選べ。

次の選択肢から最も適切なものを選択してください。
A. ARP リクエストは宛先 MAC をブロードキャスト (FF-FF-FF-FF-FF-FF) として送信し、応答は本人からユニキャストで返ってくる
B. ARP リクエストもリプライも、いずれもブロードキャストで送信される
C. ARP は IP アドレスからドメイン名を引くプロトコルで、DNS と同じ働きをする
D. ARP は TCP コネクションを確立してから IP↔MAC の対応を交換する
正解:A
ARP リクエストは 同セグメント全員 に問い合わせるため宛先 MAC がブロードキャスト、ARP リプライは 質問者 1 人 宛なのでユニキャストです。B はリプライまでブロードキャストにすると無駄なので誤り。C は DNS と混同 (ARP は IP↔MAC、DNS は ドメイン名↔IP)。D は誤り (ARP は L2 で動く独立したプロトコルで、TCP/IP の上には乗らない。EtherType=0x0806 で識別)。

問5. PC の IP は 192.168.1.100 / サブネットマスク 255.255.255.0、デフォルトゲートウェイ 192.168.1.1。この PC が 10.0.0.5 宛てに通信するとき、最初に作成されるイーサネットフレームの宛先 MAC は誰の MAC か。

次の選択肢から最も適切なものを選択してください。
A. 10.0.0.5 の MAC アドレス
B. ブロードキャスト (FF-FF-FF-FF-FF-FF)
C. デフォルトゲートウェイ (192.168.1.1) の MAC アドレス
D. 自分自身 (192.168.1.100) の MAC アドレス
正解:C
宛先 IP 10.0.0.5 は自分のサブネット (192.168.1.0/24) の にあるので、フレームはまず デフォルトゲートウェイ 宛てに送ります。送信側 PC は ゲートウェイの IP (192.168.1.1) の MAC を ARP で解決 し、その MAC を Ethernet ヘッダの宛先に入れて送出します。IP ヘッダの宛先は 10.0.0.5 のまま です。A はサブネット外の MAC は ARP では解決できない (ブロードキャストはルータで止まる) ため誤り。B は ARP 自体ならブロードキャストだが、本問は「実データの IP パケットを乗せたフレーム」を問うているので不適。D はトラフィックが流れない。
← PREV
第22回 ルーティング
NEXT →
第24回 Wi-Fi(802.11)