OSI 各層のアドレッシング体系を1枚で俯瞰
MAC・IP・ポート・URL がどの層でどう対応し、ARP・DNS・NAT がどこで橋渡しするかを1枚で整理。パケットを追うときに「どの識別子が誰の仕事か」が即座に切り分けられるようになる。
- 1.識別子は層ごとに別物。L2=MAC(隣の機器)、L3=IP(最終的な相手)、L4=ポート(アプリの口)、L7=URL/FQDN(人間向けの名前)と役割が分かれる。
- 2.橋渡しは3つ。名前→IP を DNS(L7→L3)、IP→MAC を ARP/NDP(L3→L2)、内部IP:ポート→外部IP:ポート を NAT(L3/L4)が担う。
- 3.1ホップ進むと宛先MACは書き換わるが宛先IPは不変。NAT境界ではIPとポートも書き換わる。この不変・可変の境界を押さえると経路追跡が速い。
識別子は層ごとに「別の宇宙」
ネットワークのトラブル切り分けが速い人は、頭の中に1枚のアドレッシング対応表を持っています。MAC・IP・ポート・URL は同じ「宛先指定」に見えて、有効範囲も書き換わるタイミングも寿命もまったく違うからです。まずは各層の識別子を、その「スコープ(届く範囲)」で並べます。
| 層 | 識別子 | 例 | スコープ(誰が見る/届く範囲) | 代表的な書式 |
|---|---|---|---|---|
| L7 アプリ | URL / FQDN | https://api.example.com/v1 | 人間とアプリ。全世界で一意 | 名前(階層的ラベル) |
| L4 トランスポート | ポート番号 | 443 / 53 / 22 | 1ホストの中でアプリ(ソケット)を区別 | 16ビット整数(0〜65535) |
| L3 ネットワーク | IPアドレス | 192.0.2.10 / 2001:db8::1 | ルータを越えて最終宛先まで | 32ビット(v4) / 128ビット(v6) |
| L2 データリンク | MACアドレス | 00:1a:2b:3c:4d:5e | 同一リンク(同じL2セグメント)内のみ | 48ビット(24ビットOUI+24ビット) |
肝は「上の層ほど安定して遠くまで届き、下の層ほど局所的で揮発しやすい」という性質です。URL は何年も変わらないことがあるのに、宛先MACは1ホップごとに書き換わります。同じ「宛先」という言葉でも指している対象がまるで違う、というのが上級者の出発点です。
1枚の対応図:識別子と橋渡しの全体像
文章で1枚にまとめます。左が「人間に近い・抽象的」、右が「ハードウェアに近い・具体的」で、矢印が変換(橋渡し)です。
[L7] URL / FQDN api.example.com:443/v1
│ DNS(名前 → IP) … L7 で名前解決、結果は L3 の住所
▼
[L4] ポート番号 443(送信元は一時ポート、例 51000)
│ (変換なし/NAPT で書き換わることはある)
▼
[L3] IPアドレス 宛先 203.0.113.5 / 送信元 192.0.2.10
│ ARP / NDP(IP → MAC) … 次ホップの MAC を解決
│ NAT / NAPT … 内部 IP:ポート ⇄ 外部 IP:ポート
▼
[L2] MACアドレス 次ホップ(ルータ or 相手)の MAC へ
ここで決定的に重要なのは、橋渡しが起きる層と方向です。
- DNS は L7 で動き、L3 の値(IP)を生み出す。下りの「名前→住所」変換。
- ARP / NDP は L3 の値から L2 の値を引く。さらに下りの「住所→受け取り口」変換。
- NAT/NAPT は同じ L3(と L4)の中で値を別の値に置換する。層をまたがず、境界(ルータ)で水平に書き換える。
DNS と ARP は 層をまたぐ縦の変換(名前→IP、IP→MAC)。NAT は 同じ層の中で値を入れ替える横の書き換え です。この2種類を混同すると「NAT が名前を解決する」式の誤解が生まれます。NAT は名前もMACも一切触りません。
なぜ各層に別々の識別子が要るのか
「IP だけで全部やればいい」と思える疑問に、原理で答えます。層が識別子を分けるのは、変化の速度(更新頻度)と一意性の範囲が層ごとに違うからです。
- MAC(L2)はハードウェアに固定:NIC 製造時に焼き込まれ、所属ネットワークに依存しません。だから「世界中で一意だが、経路情報をまったく持たない」。集約できないので、これで全世界をルーティングするとフォワーディングテーブルが爆発します。
- IP(L3)は位置に応じて割り当て:所属ネットワーク(プレフィックス)を反映するため、
203.0.113.0/24のように集約できます。これがルータが世界規模の経路表を持てる理由です(プレフィックス設計の基礎は /network/ip-subnet/ に譲り、本記事は層間の対応に集中します)。 - ポート(L4)は1ホスト内の多重化:同じ IP に届いたパケットを、どのアプリ(プロセスのソケット)へ渡すかを決めます。IP が「建物」なら、ポートは「部屋番号」。
- URL/FQDN(L7)は人間と組織のための名前:覚えやすさと、サーバ移転で IP が変わっても名前を変えずに済む「間接参照」を提供します。
つまり MAC は「不変だが位置を持たない」、IP は「集約できる位置」、ポートは「ホスト内多重化」、URL は「人間向けの安定した別名」。それぞれが異なる問題を解いているので統合できないのです。
「MAC アドレスはなぜ集約できず、IP はできるのか」と問われたら、MAC は製造時固定で位置情報を含まない/IP はネットワークプレフィックスを反映するから longest-prefix で集約できる、と答えるのが核心です。
1パケットの一生で何が不変・何が可変か
ブラウザが https://api.example.com/v1 を叩いてから、隣のルータを1つ越えるまでを擬似的に追います。送信元ホストの IP を 192.0.2.10、デフォルトゲートウェイを 192.0.2.1、最終宛先サーバを 203.0.113.5 とします。
# 1. L7: アプリが名前を解決(DNS, 通常は UDP/53 か DoH/DoT)
resolve("api.example.com") -> 203.0.113.5 # 名前→IP(縦の変換)
# 2. L4: ソケットを開く。宛先ポート 443、送信元は一時ポート
src = 192.0.2.10:51000 , dst = 203.0.113.5:443
# 3. L3: 宛先 IP は別セグメント → ゲートウェイへ送ると判断
next_hop_ip = 192.0.2.1 # ルーティング判定
# 4. L3→L2: 次ホップの MAC を ARP で解決(IPv6 なら NDP)
arp_resolve(192.0.2.1) -> 00:11:22:33:44:55 # IP→MAC(縦の変換)
# 5. L2: フレーム送出
dst_mac = 00:11:22:33:44:55 (ゲートウェイ)
src_mac = aa:bb:cc:dd:ee:ff (自分)
このフレームがゲートウェイ(ルータ)を1ホップ越えると、次の不変・可変が起きます。
| フィールド | 1ホップ越えた後 | 理由 |
|---|---|---|
| 宛先IP | 203.0.113.5 のまま(不変) | IP は最終宛先を指すエンドツーエンドの住所 |
| 送信元IP | 原則そのまま(NAT 境界では書き換え) | 通常は不変。NAPT を越える時だけ外部IPへ |
| 宛先MAC | 次ホップの MAC に書き換え | MAC はリンクローカル。各ホップで作り直す |
| 送信元MAC | 送り出すルータの MAC に書き換え | 同上。1リンクごとに張り替わる |
| TTL / Hop Limit | 1 減る | ループ防止のためルータが各ホップで減算 |
合言葉は「IP は変わらず、MAC は1ホップごとに変わる」。この対比が、traceroute の各ホップで MAC が違って IP が一貫している現象の説明そのものです。MAC 解決の詳細は /network/arp/ を参照してください。
NAT 境界だけは IP とポートも書き換わる
上の「IP は不変」には例外があります。家庭やオフィスのルータが行う NAPT(NAT オーバーロード) を越えるときです。ここでは送信元の 内部IP:ポート が 外部IP:別ポート に置換され、戻りパケットを正しい内部ホストへ戻すための変換表が作られます。
# 内部 → 外部(NAPT ルータ通過時の書き換え)
192.0.2.10:51000 ---> 198.51.100.7:60000 # 送信元 IP+ポートを置換
# ルータ内の変換テーブル(戻りを内部へ戻すための対応)
[outside 198.51.100.7:60000] <-> [inside 192.0.2.10:51000] -> 203.0.113.5:443
ここでポートが「ただのアプリ識別」から「多重化の鍵」へ役割を広げる点が上級者の着眼点です。1つの外部 IP の背後に何百台もぶら下げられるのは、ポート番号という 16 ビットの空間を使って内部ホストを区別しているからです。NAT の原理と限界は /network/nat/ に、ポートとソケットの多重化の基礎は /network/socket-port/ にまとめています。
NAPT は本来 L3 の機器でありながら、ポート(L4)まで書き換えます。これが「IPだけ見ていれば層はきれいに分かれる」という素朴な理解が崩れる典型例です。だからこそ NAT 越えの通信(P2P や SIP)はやっかいで、専用の穴あけ手法が要ります。
3つの橋渡しを並べて覚える
最後に、層をつなぐ3つの変換器を1表に圧縮します。「どの識別子から、どの識別子へ、どの層で」を縦に揃えるのが俯瞰のコツです。
| 橋渡し | 変換の向き | 動く層 | 問い合わせ方式 | 結果の寿命 |
|---|---|---|---|---|
| DNS | FQDN → IP | L7 → L3 | リゾルバへ再帰問い合わせ | TTL(秒〜時間)でキャッシュ |
| ARP / NDP | IP → MAC | L3 → L2 | 同一リンクへブロードキャスト/マルチキャスト | ARPテーブルに数分キャッシュ |
| NAT / NAPT | 内部IP:ポート ⇄ 外部IP:ポート | L3(+L4) | ルータ内部の状態テーブル | コネクション存続中+アイドルタイムアウト |
この3つを押さえると、障害切り分けの定石が機械的に出ます。名前が引けない→DNS(L7→L3)、同一LANで届かない→ARP(L3→L2)、外には出るが戻ってこない→NAT/ファイアウォールの状態表(L3/L4)。各識別子の役割分担を1枚で持っておくことが、結局いちばん速い武器になります。
ネットワーク Article
OSI 各層のアドレッシング体系を1枚で俯瞰を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
アドレッシング
比較で見る軸
難易度: advanced / カテゴリ: ネットワーク / タグ数: 5
導入後に効く点
橋渡しは3つ。名前→IP を DNS(L7→L3)、IP→MAC を ARP/NDP(L3→L2)、内部IP:ポート→外部IP:ポート を NAT(L3/L4)が担う。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ネットワーク
- タグ数
- 5
判断チェックリスト
- 自社の用途が「アドレッシング / OSI」に近いか確認する。
- 強みである「識別子は層ごとに別物。L2=MAC(隣の機器)、L3=IP(最終的な相手)、L4=ポート(アプリの口)、L7=URL/FQDN(人間向けの名前)と役割が分かれる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。