ブラウザでWebサイトを開くと何が起きる?
ブラウザにURLを入力してから、パケットがクライアントのLANを出てインターネットへ向かうまでを追います(Phase 1: ネットワーク編)。サーバー側の処理は Phase 2 でこのシナリオに追加されます。
丸い点が通信(パケット)です。ステップを進めると、パケットが機器の間を移動し、そのステップで働く機器が光ります。
ドラッグで回転 / ホイールでズーム — パケット(光る球)が機器の間を移動します
Runtime プレイヤー
フロー図(全体の流れ)
ステップをクリックすると下の詳細へ移動します。各ステップで登場する概念はチップから開けます。
全ステップ(静的表示)
1. ブラウザでURLを開く
ユーザーがブラウザにURLを入力します。ブラウザはホスト名を取り出しますが、通信に必要なのはIPアドレスです。まず名前解決が必要になります。なお通信の前提条件(自分のIPアドレス等)は、次のDHCPのステップでネットワーク接続時に揃っています。
2. DHCPでIPアドレス等を取得する
PCがネットワークに接続したときの処理です。IPアドレスを持たない状態からブロードキャストでDHCPサーバーを探し、IPアドレス、サブネットマスク、デフォルトゲートウェイ、DNSサーバーの一式をリースとして受け取ります。
DHCPDHCP ServerDHCP ScopeBroadcastIP AddressSubnet MaskDefault GatewayDNS ServerNIC
3. DNSでサーバーのIPアドレスを調べる
OSのリゾルバが、DHCPで教えられたDNSサーバーへ問い合わせます。サーバーのホスト名からIPアドレスが分かり、通信の宛先が確定します。
4. 宛先が同じネットワークか判断する
端末は自分のIPアドレスとサブネットマスクから、宛先が同じネットワーク内か外かを判断します。Webサーバーは通常は外にあるため、送り先はデフォルトゲートウェイに決まります。
5. ゲートウェイのMACアドレスを調べる(ARP)
フレームを送るには、同じリンク内での宛先——この場合はゲートウェイ——のMACアドレスが必要です。ARPのブロードキャストで問い合わせ、ゲートウェイが自分のMACアドレスを返します。
6. スイッチがフレームを転送する
NICから出たフレームはスイッチに届きます。スイッチは宛先MACをMACアドレステーブルで引き、ゲートウェイ(ルーター)のつながるポートへだけ転送します。フレームは同じVLANの範囲内でのみ運ばれます。
7. ルーターが転送先を決める
ルーターはフレームからIPパケットを取り出し、宛先IPをルーティングテーブルで引きます。ロンゲストマッチで最適なルートを選び、ネクストホップへ送り出します。
8. ACLで転送可否を判断する
ルーターのインターフェースに適用されたACLが、条件に照らして転送してよいパケットかどうかを判断します。一致した最初のルールで判定が確定し、どこにも一致しなければ暗黙のdenyで落とされます。
9. NATで送信元IPを変換する
送信元がプライベートIPのままではインターネットを進めません。NAT(NAPT)が送信元をルーターのグローバルIPとポートに変換し、戻りのための変換表に記録します。
10. インターネットを経由してサーバー側へ
パケットはISPとインターネットのルーター群を経由し、サーバー側のネットワークへ向かいます。サーバー側での受け取り以降の処理は、Phase 2 でこのシナリオに追加されます。
What If(事前計算された障害状態 §6.10)
DHCPサーバーが停止したら
ブラウザでURLを開く ✓ okDHCPでIPアドレス等を取得する ✕ failDNSでサーバーのIPアドレスを調べる ■ blocked宛先が同じネットワークか判断する ■ blockedゲートウェイのMACアドレスを調べる(ARP) ■ blockedスイッチがフレームを転送する ■ blockedルーターが転送先を決める ■ blockedACLで転送可否を判断する ■ blockedNATで送信元IPを変換する ■ blockedインターネットを経由してサーバー側へ ■ blocked
DHCPサーバーが応答しないため、新規接続した端末はIPアドレスを取得できません。Discoverを再送しても応答が無く、多くのOSは 169.254.x.x のリンクローカルアドレス(APIPA)を自己設定しますが、ゲートウェイもDNSも無いため通常の通信は始まりません。
すでにリースを持つ端末は期限まで影響を受けません。「新規だけつながらない」部分障害になるのが特徴です。
関連ノード: DHCP Server
DNSサーバーが停止したら
ブラウザでURLを開く ✓ okDHCPでIPアドレス等を取得する ✓ okDNSでサーバーのIPアドレスを調べる ✕ fail宛先が同じネットワークか判断する ■ blockedゲートウェイのMACアドレスを調べる(ARP) ■ blockedスイッチがフレームを転送する ■ blockedルーターが転送先を決める ■ blockedACLで転送可否を判断する ■ blockedNATで送信元IPを変換する ■ blockedインターネットを経由してサーバー側へ ■ blocked
サーバーのIPアドレスが分からないため、通信が始まりません。サーバーもネットワークも正常なのに「サイトが開けない」状態です。
キャッシュに残っている名前は開けることがあり、IPアドレス直打ちで到達できる場合もあります。また、別のDNSサーバー(例: 公開DNS)を指定すれば回避できます。
関連ノード: DNS Server
デフォルトゲートウェイを間違えたら
ブラウザでURLを開く ✓ okDHCPでIPアドレス等を取得する ✓ okDNSでサーバーのIPアドレスを調べる ■ blocked宛先が同じネットワークか判断する ✕ failゲートウェイのMACアドレスを調べる(ARP) ■ blockedスイッチがフレームを転送する ■ blockedルーターが転送先を決める ■ blockedACLで転送可否を判断する ■ blockedNATで送信元IPを変換する ■ blockedインターネットを経由してサーバー側へ ■ blocked
端末は「外の宛先はゲートウェイへ」という判断自体はできても、託す先が間違っています。パケットは存在しない(または無関係な)機器へ送られ、捨てられます。
同じネットワーク内の通信はゲートウェイを使わないため正常です。また、DNSサーバーが外部にある場合、名前解決の段階でも失敗します。「LANは生きているのに外だけ死んでいる」が典型的な症状です。
関連ノード: Default Gateway
サブネットマスクを間違えたら
ブラウザでURLを開く ✓ okDHCPでIPアドレス等を取得する ✓ okDNSでサーバーのIPアドレスを調べる ■ blocked宛先が同じネットワークか判断する ✕ failゲートウェイのMACアドレスを調べる(ARP) ✕ failスイッチがフレームを転送する – not-reachedルーターが転送先を決める – not-reachedACLで転送可否を判断する – not-reachedNATで送信元IPを変換する – not-reachedインターネットを経由してサーバー側へ – not-reached
マスクが実際より大きい(例: 本当は /24 なのに /8 と設定)ケースです。端末は外部のサーバーまで「同じネットワーク内」と誤認します。
その結果、ゲートウェイではなく宛先サーバーへ直接ARPしようとしますが、ARPは自分のネットワーク内にしか届かないため応答がありません。名前解決の宛先(外部DNS)も同じ理由で到達できず、途中で止まります。LAN内の通信だけは正常に見えるため、原因が分かりにくい障害です。
関連ノード: Subnet Mask
同じIPアドレスが2台にあったら
ブラウザでURLを開く ✓ okDHCPでIPアドレス等を取得する ✓ okDNSでサーバーのIPアドレスを調べる ✓ ok宛先が同じネットワークか判断する ✓ okゲートウェイのMACアドレスを調べる(ARP) ✕ failスイッチがフレームを転送する ■ blockedルーターが転送先を決める ■ blockedACLで転送可否を判断する ■ blockedNATで送信元IPを変換する ■ blockedインターネットを経由してサーバー側へ ■ blocked
同じIPアドレスを持つ2台が、ARP問い合わせに交互に応答します。ARPキャッシュが2台のMACアドレスの間で行ったり来たりし(フラッピング)、パケットが誤った方へ届いたり、届かなかったりします。
症状は「断続的につながる」「片方の端末だけ不安定」などで、時間帯によって変わるため厄介です。固定IPの付け間違いや、DHCP範囲との重なりが典型原因です。
関連ノード: IP Address
同じVLANでMACアドレスが重複したら
ブラウザでURLを開く ✓ okDHCPでIPアドレス等を取得する ✓ okDNSでサーバーのIPアドレスを調べる ✓ ok宛先が同じネットワークか判断する ✓ okゲートウェイのMACアドレスを調べる(ARP) ✓ okスイッチがフレームを転送する ✕ failルーターが転送先を決める ■ blockedACLで転送可否を判断する ■ blockedNATで送信元IPを変換する ■ blockedインターネットを経由してサーバー側へ ■ blocked
スイッチのMACアドレステーブルは「1つのMACは1つのポートの先」という前提で学習します。同じMACが2ポートから現れると、エントリが交互に書き換わり(フラッピング)、フレームの行き先が安定しません。
2台とも通信が不安定になり、スイッチのログにはMAC flappingの警告が残ることがあります。VMのクローンや、NIC交換時の設定コピーが原因の典型例です。
関連ノード: MAC Address
別VLANならMACアドレスが重複しても大丈夫?
ブラウザでURLを開く ✓ okDHCPでIPアドレス等を取得する ✓ okDNSでサーバーのIPアドレスを調べる ✓ ok宛先が同じネットワークか判断する ✓ okゲートウェイのMACアドレスを調べる(ARP) ✓ okスイッチがフレームを転送する ✓ okルーターが転送先を決める ✓ okACLで転送可否を判断する ✓ okNATで送信元IPを変換する ✓ okインターネットを経由してサーバー側へ ✓ ok
結論から言うと、このケースは壊れません。MACアドレステーブルはVLANごとに分けて管理されるため、VLAN 10 の AA:AA と VLAN 20 の AA:AA は別エントリとして共存します。
「重複=即障害」ではなく、「同じテーブル(同じVLAN)の中で衝突するか」が本質だということを示すためのWhat Ifです。なお、設定ミスで2つのVLANが結合すると、その瞬間に同VLAN重複と同じ状態になります。
関連ノード: MAC Address
トランクのVLAN設定が食い違ったら
ブラウザでURLを開く ✓ okDHCPでIPアドレス等を取得する ✓ okDNSでサーバーのIPアドレスを調べる ✓ ok宛先が同じネットワークか判断する ✓ okゲートウェイのMACアドレスを調べる(ARP) ✓ okスイッチがフレームを転送する ✕ failルーターが転送先を決める ■ blockedACLで転送可否を判断する ■ blockedNATで送信元IPを変換する ■ blockedインターネットを経由してサーバー側へ ■ blocked
トランクの両端で「このVLANを運んでよいか」の設定が食い違うと、そのVLANのフレームは境界で捨てられます。物理リンク自体は上がっているため、一見正常に見えます。
影響は食い違ったVLANだけに限定されます。「特定の部署/フロアだけ通信できない」「片方向だけ届かない」といった部分障害になり、原因として疑いにくい種類の障害です。
関連ノード: VLAN