弱者は決して許すことができない。許しは強者の態度である── ガンディー
ネットワーク

同じネットワークの中では、宛先 MAC が相手そのものを指す

図 1 の土台に PC-A から PC-B への通信を 1 本流し、空だった ARP テーブルと MAC アドレステーブルが、どのフローで何を覚えて育つのかを 5 つの番号で追う

ぴぐおv1人の校閲なし(AI のみ)訂正なし
ネットワークarpスイッチconcept
目次

図 1 では、スイッチの MAC アドレステーブルも ARP テーブルも空のままでした。表は通信が流れてから育ちます。そこで、この 2 本目では 1 本だけ流します。

流すのは PC-A から PC-B へ、同じネットワークの中の通信です。同じネットワークとは、ルータを通さず直接届く範囲のことです。

この連載は、ネットワークの言葉をもの(物理と論理)、結びつき(手動、自動、固定)、通信フロー(1 本の通信がこれらを順に通る流れ)の 3 層に置いています。ここで動くのは、結びつきの層のうち自動の 2 つです。

登場するもの

新しい「もの」は増えません。箱もケーブルも図 1 と同じです。

動くのは 2 つの表です。MAC アドレステーブルは、MAC アドレスとその先の物理ポートの対応をスイッチが持つものです。ARP テーブルは、IP アドレスと MAC アドレスの対応を PC やルータが持つものです。どちらも論理で、自動で育ちます。

結びつき

IP アドレス ⇄ MAC アドレス(ARP)

PC-A は PC-B の IP アドレスを知っていても、MAC アドレスを知りません。届けるには相手の MAC アドレスが要ります。そこで全員あてで問い合わせます。ARP 要求はブロードキャスト、ARP 応答はユニキャストです。

要求を受け取った側も、その中に入っている送信元の IP アドレスと MAC アドレスを自分の表に書きます(RFC 826)。だから PC-B は返事のときに ARP を引き直しません。

MAC アドレス ⇄ 物理ポート

スイッチは、フレームが入ってきたその瞬間に、送信元 MAC アドレスと受信した物理ポートの対応を表に書きます。宛先 MAC アドレスが表に無ければ受信ポート以外の全ポートへ流し、有ればその物理ポートだけへ出します。

通信フロー

① PC-A が「192.168.10.20 の MAC は?」を全員あてに送ります。スイッチはこのとき MAC A がポート 1 の先だと覚えます。

② スイッチは受信ポート以外の全ポートへ流します。PC-B にも PC-D にも届きます。

③ PC-B だけが「私の MAC は B」と PC-A に返します。スイッチはこのとき MAC B がポート 2 の先だと覚えます。

④ ここまでで表に 2 行が育ちました。この番号では新しいフレームは流れず、① と ③ で覚えた 2 行を確認するだけです。

⑤ PC-A は PC-B の MAC アドレスを宛先にして送ります。スイッチは表を見て、ポート 2 だけへ出します。

スイッチは IP を見ていません。ただし送り出す PC-A は、相手が自分のネットワークの中かどうかを IP アドレスとサブネットマスクで判断してから ARP を出しています。

同じネットワークの中では、宛先 MAC アドレスが相手そのものを指します。IP アドレスと MAC アドレスが同じ相手を指している状態です。ルータをまたぐとこの一致が崩れますが、それは図 5 で見ます。

図 2

上が構成図で、番号のバッジが ①〜⑤ に対応します。下の帯は左が各表の推移(どのフローで行が増えたか)、右が通信の中身の推移(フローごとのフレームとパケット)です。

VLAN なし:A → B の通信(同じネットワークの中) ルータの口(ポート 8)は省略。同じネットワークの中だけを描く スイッチ MAC アドレステーブル(自動で育つ) A → ポート 1、B → ポート 2 1 2 3 PC-A 192.168.10.10 MAC A PC-B 192.168.10.20 MAC B PC-D 192.168.10.30 MAC D 1 2 2 3 3 5 5 フロー ① A が「192.168.10.20 の MAC は?」を全員あてに 送る(ARP)。スイッチは MAC A → ポート 1 を覚える ② スイッチは受信ポート以外の全ポートへ流す → B にも D にも届く ③ B だけが「私の MAC は B」と A に返す。 スイッチは MAC B → ポート 2 を覚える ④ ここまでで育ったテーブル(① と ③ で覚えた 2 行) ⑤ A は宛先 MAC = B で送る。スイッチは テーブルを見てポート 2 だけへ出す 全員あて(①②) 返事(③) 本番(⑤) 効いているもの ①③ ARP(IP ⇄ MAC の結びつき・自動) ②⑤ スイッチの転送(MAC を見る) ④ MAC アドレステーブル(MAC ⇄ 物理ポートの結びつき・自動) スイッチは IP を見ていない。ただし送り出す A は、相手が自分のネットワークの中かどうかを IP とマスクで判断してから ARP を出している 各テーブルの推移(○番のフローで追加された行。青字) スイッチ: MAC アドレステーブル ① 追加: MAC A → ポート 1(① が入ってきた時) ③ 追加: MAC B → ポート 2(③ が入ってきた時) PC-A: ARP テーブル ③ 追加: 192.168.10.20 → MAC B(応答から) PC-B: ARP テーブル ① 追加: 192.168.10.10 → MAC A(要求を受けて) 通信の中身の推移(フローごとのフレーム/パケット) ① A → スイッチ:ARP 要求(全員あて) 宛先 MAC ff:ff:ff:ff:ff:ff(全員) 送信元 MAC MAC A 知りたい IP 192.168.10.20 自分の IP 192.168.10.10 データ ARP 要求 ARP は IP パケットではない(Ethernet の種類の欄が IP とは別の値)。中身が IP を扱うので同じ並びで描いている。ルータは ARP を中継しない ② スイッチ → B・D 中身は ① と同じ。スイッチはコピーして流すだけで、書き換えない ③ B → スイッチ → A:ARP 応答 宛先 MAC MAC A 送信元 MAC MAC B 相手の IP 192.168.10.10 自分の IP 192.168.10.20 データ ARP 応答 ④ ここまでで育ったテーブル 通信は流れない。① と ③ で覚えた行を上の表で確認する ⑤ A → スイッチ → B:本番 宛先 MAC MAC B 送信元 MAC MAC A 宛先 IP 192.168.10.20 送信元 IP 192.168.10.10 データ ping フレーム=全部。ただしスイッチが見るのは MAC とタグの部分だけ パケット=この部分。ルータはここ(IP)を見る 同じネットワークの中では、宛先 MAC = 相手そのもの。IP と MAC が同じ相手を指している ARP は、要求を出した側だけでなく、要求を受け取った側も相手を覚える(だから B は A に返すとき ARP を引き直さない)

図 1・図 3 との接続

図 1 で空だった 2 つの表は、① と ③ で育ちました。ルーティングテーブルは動きません。この通信はルータを通っていないからです。

次の図 3 では、箱もケーブルもこのままで、PC-D だけを別の VLAN に置きます。変わるのは ② の流す範囲と ⑤ の探す範囲です。

未検証・注意

  • ARP は IP パケットではありません。Ethernet の種類の欄が IP とは別の値です。図では中身が IP アドレスを扱うので同じ並びで描いていますが、ルータは ARP を中継しません。
  • ARP テーブルの行にも寿命があり、時間が経つと引き直します。既定値は機種によって違い、確認していません。
  • 勉強会の配布資料は非公開のため、設定値や画面は引用せず、一般化した構成で描いています。

出典

関連

この記事の校閲記録

誰が・いつ・どの版の・どの段落を・何の観点で見て、何と言ったかを全件そのまま出す(追記のみ・削除しない)。

段落 32 のうち出典つき 12・出典なし 20

v1 1 件
  • AIAI (claude-fable-5) が AI 確認未解決

    出典 3 件を WebFetch で取得して確認した。ARP 要求はブロードキャスト・応答はユニキャストはインフラエキスパート、要求を受け取った側も送信元の対応を表に書くことは RFC 826 の Merge_flag の記述(sender protocol address が表にあれば更新する)で確認した。フローの番地とポート番号と学習の時点は、技術レビュー後の図(学習はフレームが入った瞬間)に本文を合わせた。ARP テーブルの寿命の既定値は出典を確認できず、未検証として本文に明記。守秘検査(人名、社名、会場名、地名、連絡先の機械検査)で該当なし

参考文献

更新履歴

  • 連載のトピックを「ネットワーク基礎」から「ネットワーク」へ改名(32 本+目次。slug と URL は不変)
  • 公開: 連載「ネットワーク基礎」の土台 11 本(入口・図 1〜7・補 1〜3)と目次

機械可読の記録