HUB
00 学習目標
01 リンク層の役割
02 MAC アドレス
03 Ethernet フレーム
04 CSMA/CD と全二重
05 スイッチの動作
06 ARP (IP→MAC)
07 発展へ
08 まとめと用語
09 確認問題
学習目標
本講を終えると、以下の問いに答えられるようになります。
リンク層 (データリンク層) が「同じサブネット内の隣接ノード間転送 」を担うことを説明できる
MAC アドレスの 48 ビット構造 (OUI 24 bit + シリアル 24 bit) と、ユニキャスト/マルチキャスト/ブロードキャスト の判別方法を述べられる
Ethernet フレームの主要フィールド (プリアンブル・SFD・宛先 MAC・送信元 MAC・EtherType・ペイロード・FCS ) の役割と長さを言える
標準フレームサイズ (64 〜 1518 バイト ) とジャンボフレームの存在を説明できる
CSMA/CD が半二重共有メディアの制御で、全二重スイッチ環境では発動しないことを区別できる
L2 スイッチの 自己学習 (送信元 MAC からの学習)、フォワーディング・フラッディング・フィルタリング を図解できる
ARP リクエスト (ブロードキャスト) と ARP リプライ (ユニキャスト) による IP→MAC 解決の手順、ARP キャッシュの目的を説明できる
ARP が信頼ベースの仕組みであり、セキュリティ上の詳しい話題は発展編で扱うことを説明できる
このレッスンの目次
リンク層の役割 ── 「隣の人」までのバトンリレー
リンク層 (データリンク層、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-9B や 1a: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 アドレスに送るのが正しいか。
A. 自分の MAC アドレス
B. FF-FF-FF-FF-FF-FF (ブロードキャスト)
C. 00-00-00-00-00-00 (ヌル)
D. 01-00-5E-XX-XX-XX (マルチキャスト)
正解: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 上位プロトコル 用途
0x0800 IPv4 最も一般的。IP データグラムを Ethernet で運ぶ
0x86DD IPv6 IPv6 データグラム
0x0806 ARP IP→MAC 解決のリクエスト/リプライ
0x8100 IEEE 802.1Q (VLAN) VLAN タグ付きフレーム (4 バイト追加で最大 1522 B に)
0x8035 RARP 逆 ARP (MAC→IP)。歴史的
0x88CC LLDP 近隣機器探索 (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 では、コリジョンドメインはどこで切れるか?
解答を見る
ハブはただの 物理層中継器 で、フレームを全ポートに 電気的にコピー するだけです。したがって ハブにつながった範囲全体が 1 つのコリジョンドメイン になります (ハブ配下の PC たちは衝突しうる)。一方、スイッチのポートごとに コリジョンドメインが切れるので、ハブとスイッチが混在する LAN では「ハブの島ごとに 1 つのコリジョンドメイン」になります。ブロードキャストドメインはそれら全体で 1 つのまま (ルータで初めて分割)。
歴史的補足: 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 アドレスを見ない。
全ポートが 1 つのコリジョンドメイン :衝突発生で速度低下
盗聴し放題 (どのポートにも全フレームが流れる)
半二重のみ。CSMA/CD が必要
現代では新規導入されない (歴史的遺物)
L2 スイッチ
動作層:データリンク層 (L2) 。MAC アドレステーブル を持ち、宛先 MAC を見て該当ポートにのみ転送する。
各ポートが 独立したコリジョンドメイン :衝突なし、全二重対応
未知宛先・ブロードキャストは フラッディング
異なる L2 ネットワークは つなげない (同じサブネット内専用)
現代の LAN の主役
ルータ
動作層:ネットワーク層 (L3) 。IP アドレス を見てルーチングテーブルから次ホップを決め、MAC ヘッダを付け替えて 転送する。
異なるネットワーク (サブネット) を つなぐ 装置
ブロードキャストドメインを分割 する (デフォルトでブロードキャスト/フラッディングを通さない)
TTL を 1 減らし、CRC・MAC を再計算
詳細は 標準 IP・CIDR・サブネット 参照
大きな図 ④ スイッチの自己学習プロセス (アニメーション)
下のアニメーションは、空っぽの 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 をテーブルで確認して出口ポートを決める。宛先が未登録なら到着ポート以外へフラッディングし、登録済みならそのポートにだけ転送する。実機ではこのテーブルに エージング (一定時間で自動消去。時間は機種・設定依存) がある。
順を追って:学習のステップ
初期状態: MAC アドレステーブルは空。
A → B のフレームが到着: スイッチは送信元 MAC = AA を入ってきた P1 と紐づけて記録。宛先 MAC = BB はテーブルに 無い ので、到着ポート (P1) 以外の全ポート にフラッディング。
B が応答 (B → A): 送信元 MAC = BB を P2 と紐づけて記録。宛先 MAC = AA は すでに知っている ので、P1 にだけフォワーディング (これでフラッディングは止む )。
D → C のフレーム到着: 送信元 MAC = DD を P4 と紐づけて記録。宛先 MAC = CC は未知なのでフラッディング。応答で CC も P3 として学習される。
その後: テーブルは {AA→P1, BB→P2, CC→P3, DD→P4} で安定。以降は 常にユニキャスト転送 となり、無駄な帯域消費がなくなる。
Q. もし「スイッチが MAC アドレスを学習しない」(常にフラッディングする) と仮定したら、何が困るだろうか?
解答を見る
帯域がもったいない: 関係ない端末にもすべてのフレームが届くので、ポート数 N に比例してケーブル上のトラフィックが膨らむ。実質的に「ハブ並み」になってしまう。
盗聴し放題: 同じセグメントの誰でも他人の通信を全部読める (= スイッチの セキュリティ的価値が消える )。
コリジョンドメインの分離はできても、効率は落ちる: 全二重で衝突は起きないが、各ポートが他人のトラフィックを処理し続けるので CPU や受信 NIC のフィルタリングコストが増える。
実は、MAC アドレステーブルが満杯になる攻撃 (MAC flooding) ではこの状態が 意図的に 引き起こされ、攻撃者が盗聴するのに使われる。これが「スイッチを使うだけではセキュアでない」と言われる理由の 1 つ。
スイッチとブリッジの違い (歴史的)
機能的には同じ 「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 の問い合わせ範囲は 同じセグメントのみ です。なぜならブロードキャストはルータで止まるからです。では、サブネット外への通信ではどうするのでしょうか?
送信側ホストは IP アドレス + サブネットマスクで「相手は同じサブネットか?」を判定
同じサブネット → 相手の IP を ARP
違うサブネット → デフォルトゲートウェイ (= 自セグメントのルータ) の IP を ARP
結果として、フレームの 宛先 MAC はゲートウェイの MAC 、宛先 IP は最終目的地の IP という組み合わせで送出されます。ルータはこのフレームを受け取り、IP ヘッダの宛先を見て次ホップを決め、新しい MAC ヘッダを付け替えて 送り直します (1 節で見たリレーの仕組み)。
ARP キャッシュをのぞく
OS コマンド 備考
Linux ip neigh show / arp -n STATE 列で REACHABLE/STALE などが見える
macOS / BSD arp -a (incomplete) は ARP 失敗
Windows arp -a 動的/静的の区別が表示される
もっと詳しく:Gratuitous ARP (ガーシュアス ARP) とは
Gratuitous ARP (GARP) は 「自分の IP に対する ARP リクエストを、自分自身が送る」 ちょっと変わった ARP です。Target IP に 自分の IP を入れて送出します。期待する応答はありません (もし返ってきたら IP アドレスの重複!)。主な用途は次の通り。
IP アドレス重複検知 (Duplicate Address Detection): インタフェースを上げたとき、誰か同じ IP を使っていないかをチェック
ARP キャッシュ更新: NIC を交換した・冗長系切替で MAC が変わった、といった場合に「私の MAC は今これですよ」と全員のキャッシュを更新
VRRP / HSRP の仮想ルータ切替: マスタ切替時に新マスタが GARP を出してスイッチ・近隣のキャッシュを書き換える
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 ヘッダは 1 ホップごとに付け替えられる
MAC アドレスは 48 ビット (OUI 24 + シリアル 24) 。FF-FF-FF-FF-FF-FF はブロードキャスト
Ethernet II フレーム = プリアンブル+SFD(8B) / 宛先MAC(6) / 送信元MAC(6) / EtherType(2) / ペイロード(46〜1500) / FCS(4) 、本体 64〜1518 B
L2 スイッチは 送信元 MAC からの自己学習 + 宛先 MAC でのフォワーディング/フラッディング 。コリジョンドメインを分割する
ARP は同セグメントで ブロードキャストで質問 → 本人がユニキャストで応答 。サブネット外宛は ゲートウェイの MAC を解決する。ARP セキュリティは発展編で扱う
用語チェック
用語 一行説明
MAC アドレス 48 ビットのハードウェア識別子。前半 OUI、後半シリアル
OUI IEEE がベンダに割り振る 24 ビットの識別子
ユニキャスト / マルチキャスト / ブロードキャスト 1 対 1 / 1 対グループ / 1 対全員 の宛先種別
EtherType Ethernet ペイロードの上位層識別 (0x0800=IPv4, 0x86DD=IPv6, 0x0806=ARP)
FCS / CRC32 フレーム末尾 4 バイトの誤り検出符号
MTU 最大ペイロード長。Ethernet 標準で 1500 バイト
ジャンボフレーム 標準 MTU を超えた大きなフレーム (典型 9000 B)
CSMA/CD 半二重共有メディア用のアクセス制御。聞いて送る + 衝突したら再送
全二重 / 半二重 送受信を同時に行えるか/行えないか
コリジョンドメイン 衝突が起こりうる範囲。スイッチで分割される
ブロードキャストドメイン ブロードキャストが届く範囲。ルータで分割される
L2 スイッチの自己学習 送信元 MAC + 入力ポートをテーブルに記録すること
フォワーディング / フラッディング / フィルタリング 宛先既知時の転送 / 未知時の全ポート送出 / 同一ポート向けの抑制
MAC アドレステーブル スイッチ内の MAC ↔ ポート対応表 (エージングあり)
ARP IP→MAC を解決するプロトコル (RFC 826, EtherType 0x0806)
ARP リクエスト / リプライ ブロードキャストで問い合わせ / 本人がユニキャストで応答
ARP キャッシュ 解決結果を一定時間 (典型: 数十秒〜数分) 保持する一時表
Gratuitous ARP 自分の IP に対する ARP を自分で送る。重複検知・キャッシュ更新に利用
ARP セキュリティ (発展) 嘘の ARP や対策は 発展編 で扱う
確認問題
問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 はトラフィックが流れない。