No315 サーバを探すルーティングという技法
前回はインターネットという世界を支えている「パケット通信」についてお話しました。
このパケットが世界中に張り巡らされたインターネット網を通って、目的のサーバまで届けられるのです。
ですが、目的のサーバがどこにあるのか?そこまでどうやってパケットを送り届けるのか?ということについては書き切れませんでした。
今回はその点についてお話をしようと思います。
インターネットの基礎
えがおIT研究所(私が運営しているサイトです)は以下のURLでアクセスできます。
https://www.egao-it.com
ChromeやEdgeなどのブラウザでこのURLを開くと、ちゃんとえがおIT研究所のページが表示されます。
あたり前ですよね。
ですが、どうやってこれを実現しているの?と聞かれるとどうでしょうか?
詳しい方なら「DNSでIPアドレスを調べて、そのアドレスのサーバに接続するんだよ」という答えが返ってくるでしょう。(この説明はこの後で)
ですがもう一段掘り下げて「そのIPアドレスからサーバを見つける方法は?」となるとかなり答えられる方が少なくなります。
というのも、このあたりの仕組みは1970年代や1980年代に盛んに研究開発された技術で、現役のプログラマやSEにとってはあたり前すぎて、内部構造を知る必要すらなくなっているのです。
そのため、プロであっても知らない方が少なくありません。
今回は、IPアドレスというものから、実際のサーバを見つける方法、言い換えればインターネットの基礎とも言える仕組みについて説明をします。
URLからIPアドレスを得る
さて、URLに書いてある という文字列だけでは実は相手のコンピュータを見つけることができません。
インターネットで相手にアクセスしたい場合には、前回も書いた通りパケットのヘッダ部に通信したい相手のIPアドレスを入れて送らないといけません。
補足:
IPというのは前回も書いた通り、Internet Protocol(インターネットの通信手順)を指します。
IPアドレスはインターネットでの通信用に各コンピュータに割り当てられた番号のことで、コンピュータの住所のようなもの、とよく言われます。
ここでは、コンピュータを識別するための番号で、世界中で同じ番号が2つ発生しないようにコントロールされています。
ご興味のある方は以下のバックナンバーをご覧ください。
No211 素朴な疑問:IPアドレスってナニ?(2021年6月配信)
https://note.com/egao_it/n/n7b33490bc619
IPアドレスは実体はタダの数字ですが、慣習的に 49.212.198.63 と4つに分かち書きします。
ですが、どう見たって上述のURLにそんなの書いてありません。
答えを言っちゃうと、www.egao-it.com というのはヒトが読み易くするためのデコレーションみたいなもので、実際には 49.212.198.63 というIPアドレスが割り当てられています。
で、このURL www.egao-it.com を与えると 49.212.198.63 という番号を返してくれる対照表サービスがあるのです。
このサービスのことをDNS(Domain Name Service:ドメイン名サービス)と言います。
ブラウザでURLを入力すると、ブラウザ内部では、DNSを使って、名前をIPアドレスに変換した上で、実際にそのIPアドレスを探すべく、パケットを作って「このIPアドレスのサーバに送ってね」とお願いをするわけです。
ルーティング
さて、インターネットはご存知の通り何億台何十億台というコンピュータが接続されています。いくらコンピュータが高速でも世界中のコンピュータに闇雲に「あんた 49.212.198.63 ?」と聞いて回るのは無茶です。
そもそも世界中のコンピュータとあなたの持っているコンピュータが直結しているわけではありません。たくさんの他のコンピュータやネットワーク機器を介して関接的につながっているわけです。
世界中と直結なんてしたらエラいことになります。一台のコンピュータに数十億本のケーブルを接続するわけですから。
関接的につながっているということは、相手のサーバがどこにあるかを聞いて回る必要があるということになります。
この相手を探してパケットをあちこちのネットワーク機器を経由させることをルーティング(routing:ルート決め)と言います。
余談
ここでのルートはroute(通り道)で、root(根、根源)ではありません。
一方、管理者の意味で「ルート」と言う場合は、rootを指しています。
このルーティングを行うネットワーク機器のことを「ルータ」と言います。
例えば家庭用のルータは、住宅内のパソコンが発信したパケットを家庭内の他の機器(例えばプリンタ)に渡すのか、インターネット側(フレッツ光やeo光といった接続業者が管理するネットワーク)に流すのかを判断しています。
つまり、以下のようにパケットを流すべき場所を判断しています。
パケットが来た
↓
パケットヘッダの宛先は
・家庭内機器のIPアドレス?→→(yes)→→家庭内へ
・それ以外?→→(yes)→→インターネットへ。
家庭内向けか、そうでないかでパケットの行き先をコントロールしていますよね。
これをルーティングと呼びます。
インターネットの世界では、このルーティングということを繰り返して目的のサーバに辿り着ける仕組みになっています。
ルーティングの実際
例えば、Aさんのパソコンから、えがおIT研究所のホームページにアクセスする場合のことを考えてみましょう。
えがおIT研究所のIPアドレスはここではxと書きます。
Aさんのパソコン
↓※サーバxに送ってね
↓
Aさん宅のルータ
↓※xは内部じゃないアドレス
↓ 接続業者に頼もう
↓
Aさんの接続業者
↓※xはウチの知らないアドレス
↓ 知ってそうな業者Cに転送
↓
業者C
↓※xはウチも知らん。
↓ 知ってそうな業者Dに転送
↓
業者D
↓※xは業者Eが管理している
↓ なので業者Eに転送
↓
業者E
↓※ああ、xへのアクセスね。
↓ じゃあ、内部のサーバxに渡すか
↓
サーバx
↓※えがおIT研究所のホームページを送るよ
↓
Aさんのパソコン
このように、多少の寄り道はしているものの、最終的にはちゃんと期待したサーバに辿り着いています。
これが、インターネットでのルーティングという仕組みです。
この仕組みが面白いのは、インターネット全体を把握する中央ルータのようなものが要らない点です。
そんなのがなくても(効率は悪いが)ネットワークとして機能する点にあります。
元々インターネット(の前身のArpanet)が軍事用途で研究開発されたと呼ばれるのはこのためです。
上の図で業者Dが停止していたとしても、それなら業者Cは別の業者FやGに「知らないか?」と問いかけることで回避ができるのです。つまり、ネットワークが分断されても、別のルートを使って通信ができるというわけです。
BGPというプロトコル
上図を見ると、結構パケットが行ったり来たりして効率が悪そうに見えますが、インターネットが発展するにつれ、できるだけこういったロスを少なくする方法がいろいろと考案され、採用されてきています。
そういった成果の一つにBGP(Border Gateway Protocol)と呼ばれるルーティング情報交換用プロトコルがあります。
例えば、業者Aの回線工事を○時~○時までやってるよ!といった情報をルータ同士で交換をするのです。
こうしておけば、その時間帯は業者Aに依頼をしないようにルータがルーティング条件を変更します。
また、○月○日からB業者の回線が太くなるから高速にルーティングできるようになるよ!とか、Youtube向けのパケット、○○イベント向けのパケットはこっちに回してね、といった通知もできます。
このBGPというのはルータ間のルーティング情報更新用のプロトコルですので、一般家庭ではもちろん、通常の組織では、まずお目にかかることはありません。(よほどの大会社や拠点をたくさん抱えているところは別)
この便利なBGPですが、取り扱いが実に繊細で難しいのです。
実際に、かつて(2017年8月)にGoogleがBGPでの転送先指定をミスってひどい通信障害を発生させたことがありました。当時、このメルマガでもNo26(2017年8月配信)で取り上げています。(古すぎてnote.comにはアップロードできていません)
これを利用するのは、ルータ運用や管理を行う方に限ります。
いわば運用のプロたちが愛用するプロトコルというわけです。
まとめ
インターネットではIPアドレスという単なる数字だけでコンピュータを識別しています。
ですが、インターネットはたくさんの機器が接続されている非常に複雑なネットワークです。
この巨大なネットワークの中で特定のIPアドレスの機器を探すのは、いわば藁の山に落ちた針を探すようなもので、無茶な話に見えます。
この難題をクリアする方式がルーティングというもので、これはインターネットが中央ルータ不在で機能する理由でもあるのです。
ルーティング方式では多少の効率の悪さはあるものの、例えネットワークの一部の機器が壊れたり故障したりしても、ネットワーク全体としては機能し続けることができる仕組みとなっています。
インターネットが災害に強いのはこのルーティングの仕組みに大きく依存しています。
もっとも、インターネットが普及するにつれて、効率向上のための様々な仕組みが次々と開発され、今や効率の悪さも克服したと言えることでしょう。
前回と今回の二回で、かなり過去に戻ってパケット通信やルーティングというインターネットの基本アイデアについてのお話をしました。
次回もお楽しみに。
(本稿は 2023年7月に作成しました)