+ 作るログイン
図を読み込んでいます…
1 / 14
ネットワークのしくみ ― 場所を知らない相手に、なぜ届くのか / 全8章

ネットワークのしくみ 8:旅の全体 ― 家の PC から Web サーバーまで

発行
アニメモ公式
版
第1版
改訂
コマ
全14

シリーズの最終回。ブラウザに名前を打ってからページが表示されるまでを、最初から最後まで追いかけます。DHCP で設定をもらい、DNS で名前を番号にし、同じか外かを判定し、ARP で隣の MAC を知り、家のルーターの NAT を越え、各ルーターの表と BGP でバケツリレーされ、サーバーで開けられ、返事が戻るまで。traceroute と ping で自分の目で経路を見る方法も。

ブラウザに example.com と打った瞬間から

このシリーズの最終回です。ここまでの7本で、部品はすべて出そろいました。

本部品
1各ルーターは「次にどこへ渡すか」だけを知っている
2データは層ごとの荷札で包まれる
3同じネットワークの中はスイッチが MAC で届ける
4同じか外かを IP のネットワーク部で判定する
5隣の MAC は ARP で知り、区間ごとに付け替える
6ルーターは表の最長一致で次を決める
7表はルーター同士の話し合い(OSPF・BGP)で書かれる

この作品では、これらを全部つなげて、ブラウザのアドレス欄に `example.com` と打ってから、ページが表示されるまでを、最初から最後まで追いかけます。

図の道は、左から「あなたの PC → 家のルーター → プロバイダ → 大きな通信会社 → データセンター → サーバー」です。実際にはもっと多くのルーターを通りますが、やっていることは同じです。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 1 / 14
  • ブラウザに example.com と打った瞬間から
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • 1. 自分の設定をもらう(DHCP) 2. 名前を番号にする(DNS) 3. 同じか外か 4. ARP
  • 5. 家のルーターで番号を書き換える(NAT) 6. 表と BGP でバケツリレー 7. 到着して返事
  • ここまでの7本の部品を、全部つなげて最初から最後まで追いかける。

0. つないだ瞬間:自分の住所をもらう(DHCP)

話は、ブラウザを開くより前から始まります。PC が Wi-Fi につながった瞬間です。

つないだばかりの PC は、まだ IP アドレスを持っていません。4本目で見た「4つの設定」(IP アドレス、サブネットマスク、デフォルトゲートウェイ、DNS サーバー)が、どれもありません。

そこで PC は、DHCP(Dynamic Host Configuration Protocol)という仕組みで、設定をもらいます。

順番やりとり
1PC → 全員:「IP アドレスをください」
2家のルーター → PC:「192.168.1.10 をどうぞ。マスクは /24、出口と DNS は 192.168.1.1」
3PC → 家のルーター:「それを使います」
4家のルーター → PC:「了解」

PC はまだ IP アドレスを持っていないので、1の質問は MAC アドレスとブロードキャスト(3本目)で送ります。3本目で「IP アドレスをもらう前でも、線の上で話せる必要がある」と書いたのは、このためです。

家のルーターは、手の空いている番号をしばらくの間だけ貸し出します。期限が来たら延長を頼みます。だから、家に帰って Wi-Fi につないだ瞬間から、何も設定しなくてもインターネットが使えるのです。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 2 / 14
  • 0. つないだ瞬間:自分の住所をもらう(DHCP)
  • 設定ください
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • PC → 全員:「IP をください」(まだ IP が無いので MAC とブロードキャストで)
  • 家のルーター → PC:「192.168.1.10/24、出口は 192.168.1.1、DNS も 192.168.1.1」
  • → 4本目の「4つの設定」は、こうして自動でもらっている
  • Wi-Fi につないだ PC は、まだ IP を持っていない。全員宛てに「設定をください」と叫ぶ。

1. 名前を番号にする(DNS)

ブラウザに example.com と打ちました。でも、2本目で見たとおり、IP の札には番号を書かなければなりません。まず、名前を番号にする必要があります。

PC は、DHCP でもらった DNS サーバー(ここでは家のルーター)に「example.com の A レコードは?」と問い合わせます。家のルーターは、プロバイダの DNS サーバーにその質問を回し、プロバイダの DNS サーバーが、世界中の DNS サーバーを順にたどって答えを見つけてきます。答えは 203.0.113.10 です。

DNS の仕組みそのものは、メールのしくみシリーズの2本目で詳しく見ました。ここで大事なのは、この DNS の問い合わせ自体も、1つの小さな小包として、これから見る旅とまったく同じ道を通っているということです。名前を引くためにも、ネットワークの仕組みがすべて使われています。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 3 / 14
  • 1. 名前を番号にする(DNS)
  • 名前は?
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • PC → DNS(家のルーター経由でプロバイダの DNS):「example.com の A は?」
  • 答え:203.0.113.10
  • この問い合わせ自体も、小さな小包として、これから見る旅と同じ道を通る
  • example.com の番号が分からないと、宛先の IP が書けない。まず DNS に聞く。

2. 同じか外か:外だ → 出口のルーターへ

宛先の番号 203.0.113.10 が分かりました。PC は、4本目で見た判定をします。

自分は 192.168.1.10/24、相手は 203.0.113.10。ネットワーク部が 192.168.1 と 203.0.113 で違います。相手は外のネットワークにいます。

外宛てなので、デフォルトゲートウェイ(家のルーター、192.168.1.1)に渡します。その MAC アドレスを、5本目の ARP で確かめます(たいていは ARP テーブルに覚えています)。

荷札は、5本目で見たとおり、IP の宛先はサーバー、MAC の宛先は家のルーターになります。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 4 / 14
  • 2. 同じか外か:外だ → 出口のルーターへ
  • 小包
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • 自分 192.168.1.10/24 / 相手 203.0.113.10 → 外
  • ARP:192.168.1.1 の MAC は? → 家のルーターの MAC(5本目)
  • 荷札:宛先 IP 203.0.113.10 / 宛先 MAC 家のルーター
  • 192.168.1 と 203.0.113。ネットワーク部が違う。デフォルトゲートウェイに渡す(4本目)。

3. 荷札を重ねる:HTTP → TCP → IP → MAC

実際には、PC はまず TCP で相手のサーバーと「接続の準備」をやりとりし、安全な通信(HTTPS)のための鍵の交換もしますが、ここでは細部を省いて、本題の依頼の小包だけを追います。

2本目で見たとおり、ブラウザが作った中身に、荷札が順に重なります。

荷札中身
中身(アプリケーション層)GET /(ページをください。HTTPS なので暗号化されている)
TCP(トランスポート層)宛先ポート 443、送信元ポート 51234
IP(インターネット層)宛先 203.0.113.10、送信元 192.168.1.10、TTL 64
MAC(リンク層)宛先は家のルーター、送信元は PC

そして、Wi-Fi の電波として家のルーターへ送り出されます。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 5 / 14
  • 3. 荷札を重ねる:HTTP → TCP → IP → MAC
  • 小包
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • MAC
  • IP
  • TCP
  • GET /
  • 宛先 MAC:家のルーター / 宛先 IP:203.0.113.10 / 宛先ポート:443
  • 中身に TCP、IP、MAC の札を重ねて、Wi-Fi の電波に乗せる(2本目)。

4. 家のルーター:送信元の番号を書き換える(NAT)

家のルーターは、6本目で見たルーターの仕事(MAC の札を捨て、IP の宛先を見て、表で次を決め、TTL を減らす)をします。表はほぼデフォルトルートだけなので、次はプロバイダです。

ただし、家のルーターには、もう1つ大事な仕事があります。4本目で見たとおり、192.168.1.10 はプライベートアドレスで、インターネットでは使えません。このままでは、サーバーが返事を返せません。

そこで家のルーターは、小包の送信元の番号を、自分の外側の番号に書き換えます。これを NAT(Network Address Translation)と呼びます。

送信元 IP : ポート
書き換え前192.168.1.10 : 51234
書き換え後198.51.100.7 : 40001(家のルーターの外側の番号)

そして、「40001 番で返事が来たら、192.168.1.10 : 51234 に戻す」と自分の表に覚えておきます。家の中のスマホやゲーム機も、全部この1つの外側の番号を共有し、ポート番号で区別されています。

「IP の札は最後まで変わらない」と5本目で書きましたが、NAT だけは例外で、家の出口で送信元が書き換わります。宛先は変わりません。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 6 / 14
  • 4. 家のルーター:送信元の番号を書き換える(NAT)
  • 小包
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • 書き換え前:送信元 192.168.1.10 : 51234
  • 書き換え後:送信元 198.51.100.7 : 40001(家のルーターの外側の番号)
  • 「40001 番で戻ってきたら 192.168.1.10 : 51234 へ」と表に覚えておく
  • 家の中の番号は外で使えない。外側の番号に書き換える。

5. プロバイダ:表を見て、次へ渡す

小包はプロバイダのルーターに着きました。ここからが、1本目で見たバケツリレーの本番です。

プロバイダのルーターは、6本目で見た5つの仕事を、機械的にこなします。MAC の札を確かめて捨て、宛先 IP 203.0.113.10 を表と照らします。

表には、203.0.112.0/20 の行があります(4本目の集約)。この行は、7本目で見た BGP で、「203.0.112.0/20 へは、通信会社(AS 2)経由で行ける」と教わって書いたものです。最長一致でこの行を選び、TTL を1減らし、通信会社へ向けて、新しい MAC の札を付けて送り出します。

プロバイダのルーターは、その先の道を知りません。知っているのは「通信会社に渡せば近づく」ということだけです。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 7 / 14
  • 5. プロバイダ:表を見て、次へ渡す
  • 小包
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • 受け取る → MAC の札を捨てる → 宛先 IP 203.0.113.10 を表と照らす
  • 203.0.112.0/20 → 通信会社へ(BGP で覚えた行)
  • TTL を1減らす → 新しい MAC の札を付けて送り出す
  • 203.0.112.0/20 の行。BGP で「AS 2 経由」と教わっていた。

6. 通信会社:同じことを繰り返す

通信会社のルーターも、まったく同じことをします。

通信会社(AS 2)の中には、たくさんのルーターがあります。その中の道は、7本目で見た OSPF のような話し合いで、最短経路が計算されています。小包はその中をバケツリレーで進み、AS 2 の出口に着きます。

出口のルーターの表には、BGP でデータセンター(AS 3)から教わった「203.0.113.0/24 はうち(AS 3)の中」という行があります。そこで、データセンターへ渡します。

ここまで来ても、誰一人として、PC からサーバーまでの全体の道を知りません。各自が自分の表を見て、次の1歩を決めているだけです。それでも小包は、着実にサーバーに近づいています。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 8 / 14
  • 6. 通信会社:同じことを繰り返す
  • 小包
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • 203.0.113.0/24 → データセンター(AS 3)へ
  • 会社の中の道は OSPF、会社の間の道は BGP
  • 誰も全体の道を知らない。各自が次の1歩だけを決めている
  • AS 2 の中は OSPF で最短経路。出口で AS 3(データセンター)へ渡す。

7. データセンター:最後のルーター

データセンターのルーターの表では、203.0.113.0/24 の行が「直接」になっています。自分の口に、このネットワークがつながっているからです(6本目の「直結」)。

つまり、4本目の言葉で言えば、サーバーはこのルーターと「同じネットワーク」にいます。ほかのルーターに渡すのではなく、サーバー本人に直接渡します。

5本目で見たとおり、ARP でサーバーの MAC アドレスを確かめ、最後の MAC の札を付けて、送り出します。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 9 / 14
  • 7. データセンター:最後のルーター
  • 小包
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • 表:203.0.113.0/24 → 直接
  • ARP:203.0.113.10 の MAC は? → サーバーの MAC
  • 最後の MAC の札を付けて、サーバーへ
  • 203.0.113.0/24 は自分の口につながっている(直結)。サーバー本人に直接渡す。

8. サーバー:外側から開けて、中身を読む

サーバーは、2本目で見たとおり、小包を外側から1枚ずつ開けます。

MAC の札を見て「自分宛て」、IP の札を見て「自分宛て」、TCP の札のポート 443 を見て「Web サーバーのアプリ宛て」。そして、中身の GET / を Web サーバーのアプリに渡します。アプリは、ページを作って返事を用意します。

ここで振り返ってみると、IP の札の宛先 203.0.113.10 は、PC を出たときから、1度も変わっていません。MAC の札は区間ごとに何度も付け替わり、送信元は家の出口で NAT で書き換わり、TTL は少しずつ減りましたが、最終の宛先だけは最初から最後まで同じでした。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 10 / 14
  • 8. サーバー:外側から開けて、中身を読む
  • 着いた
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • MAC:自分宛て / IP:自分宛て / ポート 443:Web サーバー宛て
  • 中身:GET / → ページを作って返事を返す
  • IP の札の宛先は、PC を出たときから1度も変わっていない
  • MAC → IP → ポート 443 → Web サーバーのアプリが GET / を読む(2本目)。

9. 返事:宛先は家のルーターの外側の番号

サーバーの返事の小包は、宛先が 198.51.100.7 : 40001 です。サーバーから見ると、話し相手は家のルーターの外側の番号だからです。

返事も、行きとまったく同じやり方で戻っていきます。データセンター、通信会社、プロバイダの各ルーターが、自分の表で「198.51.100.7 へは次はここ」と決めて渡していきます。6本目で見たとおり、行きと帰りで別の道を通ることもあります。

家のルーターに着くと、NAT の表を見て「40001 番は 192.168.1.10 : 51234」と、宛先を書き戻します。そして家の中の PC に渡します。

PC のブラウザは返事を受け取り、画面にページを表示します。ここまで、ほんの数十ミリ秒の出来事です。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 11 / 14
  • 9. 返事:宛先は家のルーターの外側の番号
  • ← 返事
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • サーバー → … → 家のルーター(宛先 198.51.100.7 : 40001)
  • 家のルーター:覚えておいた表で 192.168.1.10 : 51234 に書き戻す
  • → PC のブラウザに届き、画面にページが出る
  • 返事は 198.51.100.7 : 40001 宛て。同じやり方で、各ルーターが次を決めて戻っていく。

自分の目で経路を見る:traceroute

小包が実際にどのルーターを通っているのかは、自分の PC から確かめられます。traceroute(Windows では tracert)というコマンドです。

仕組みは、6本目で見た TTL を逆手に取ったものです。

送る小包何が起きるか
TTL 11台目のルーターで TTL が 0 になり捨てられ、「寿命が尽きた」と知らせが返る → 1台目が分かる
TTL 22台目で捨てられる → 2台目が分かる
TTL 33台目で捨てられる → 3台目が分かる
…サーバーに着くまで繰り返す

TTL を1ずつ増やして送るだけで、途中のルーターが1台ずつ名乗り出てくれるわけです。表示された一覧が、あなたの PC からサーバーまでの、いまこの瞬間の経路です。時間をおいて打つと、経路が変わっていることもあります。7本目で見た「話し合いで道が変わる」を、自分の目で確かめられます。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 12 / 14
  • 自分の目で経路を見る:traceroute
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • $ traceroute example.com
  • 1 192.168.1.1(家のルーター) 2 ms
  • 2 (プロバイダのルーター) 8 ms
  • 3 (通信会社のルーター) 12 ms
  • 4 203.0.113.10(サーバー) 15 ms
  • TTL を1, 2, 3 … と増やして送り、捨てたルーターの知らせ(ICMP)で道を1つずつ知る。

つながっているか確かめる:ping

もう1つの定番の道具が ping です。相手に「生きてる?」という小さな小包(ICMP)を送り、返事が戻ってくるまでの時間を測ります。

$ ping example.com
64 bytes from 203.0.113.10: ttl=57 time=15.2 ms

time=15.2 ms は、行って帰ってくるまでの時間です。

ttl=57 からも、面白いことが分かります。返事の小包は、サーバーを TTL 64 で出発した可能性が高いので、57 で届いたなら、途中で約7台のルーターを越えてきたことになります(出発時の TTL は機械によって違うので、目安です)。

ネットワークの調子が悪いときは、まず ping でつながるかを確かめ、つながらなければ traceroute でどこで止まっているかを確かめる、というのが基本の手順です。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 13 / 14
  • つながっているか確かめる:ping
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • $ ping example.com
  • 64 bytes from 203.0.113.10: ttl=57 time=15.2 ms
  • 返ってきた TTL 57 = 64 から7減った = 途中に約7台のルーター
  • 「生きてる?」と小さな小包を送り、返事までの時間を測る。これも ICMP。

答え:場所を知らなくても届くのは、各自が「次」だけを知っているから

シリーズの最初の疑問に、最後にもう一度答えます。

「どうやって場所も知らないコンピューターまで、まっすぐデータを送れるのか?」

あなたの PC は、相手の場所を知りません。知っているのは「外宛ては出口のルーターへ」だけです。出口のルーターも、その先のルーターも、全体の道は知りません。それぞれが宛先の番号を見て、自分の表で「次にどこへ渡せば近づくか」だけを決めています。その1歩1歩を積み重ねたものが、世界の反対側まで届く道になります。

「その経路はどうやって決めているのか?」

各ルーターの表は、ルーター同士が隣と話し合って書いています。組織の中では網の地図から最短経路を計算し(OSPF)、組織の間では「この宛先はうち経由」を伝え合っています(BGP)。線が切れれば、話し合いで数秒のうちに別の道へ切り替わります。

そして、それを支えている部品が、ここまでの作品で見てきたものです。

部品役割
IP アドレスの「まとまり」遠くのルーターは方面だけ覚えればよい
IP と MAC の2つの宛先最終の宛先は変えず、隣への渡し方だけを区間ごとに付け替える
最長一致とデフォルトルート細かく知っている宛先は正確に、知らない宛先は上流へ
TTL誰も全体を知らないやり方の、安全装置

全体を知る者がいないからこそ、インターネットはここまで大きくなれました。 それが、このシリーズの結論です。

  • ネットワークのしくみ 8 / 8 ― 旅の全体:家からサーバーまで
  • 14 / 14
  • 答え:各自が「次」だけを知っているから、届く
  • 着いた
  • あなたのPC
  • 家のルーター
  • プロバイダ
  • 通信会社
  • DC
  • サーバー
  • AS 1
  • AS 2
  • AS 3
  • 宛先(IP)は最後まで同じ。隣への渡し方(MAC)は区間ごとに付け替える
  • 次の1歩は、表の最長一致で決める。表は、ルーター同士の話し合いで書かれる
  • 全体を知る者はいない。だから網はどこまでも大きくなれる
  • PC は出口だけ、ルーターは次の1歩だけ。その積み重ねが道になる。

0 件のコメント

読み込み中…

権利侵害・不適切な内容の連絡: [email protected]