はじめに
こんにちは、TIG DXユニットの西田と申します。
春の入門祭りの第4弾! という事で、私はネットワークの入門編を書きます。
プログラマー視点ではあまり馴染みのない技術領域、ネットワーク。そもそもなんで馴染みがないのか? それは…**独自用語あまりに多すぎ! 概念も独自すぎ! **という背景があります。わかります、その気持ち。私もプログラマ出身ですから。
ネットワークの設計という観点ではこちらの記事がありますが、今回は入門という事で、身近な仕組みを実機で動作を確認しながら、解説しようと思います。通常のNW入門って、大体はOSI参照モデルから入りますが、ちょっと重いので今回はやりません。
説明する事
ChromeやSafariなどのブラウザでhttps://www.future.co.jpを入力すると、会社の公式ページが表示されますよね。
その裏側でどんな通信が行われているのかを 実機で具体的に確認して理解する 事を目的にします。
DNSとは
皆さん、基本的にはfuture.co.jpとか、tokyo-calendar.jpとかそういう名前でアクセスする先を認識していますよね? これはFQDN(Fully Qualified Domain Name:完全修飾ドメイン名)と呼ばれていて、(基本的には)世界中でアクセス先を1つに限定する名前になっています。
ですが、このFQDNだけでは、実はネットワークの世界では通信は出来ないんです。ネットワークの世界では、IPアドレス(ネットワーク上の住所・番地など)を用いて通信が行われています。
その対応付けがこのDNSという事ですね。例えるならこういう事です。
この対応付けをする技術がDNSであり、この対応付けをしてくれる人がDNSサーバという事です。
DNSの仕組み
DNSの仕組み自体は外部にいいサイトがたくさんあるので、仕組みそのものはそっちを見た方が良いです。例えばこのサイトがあります。
動きを見る
さて、それではDNS解決を実機で見てみましょう。DNS調査のコマンドといえば、digです。が、実はWindowsにはインストールされていないので、こちらのサイトでまずは試してみましょう。
基本編
まずはグループ会社である東京カレンダーから見てみましょう。ここがとても分かりやすかったので。
手順は囲いました。
これは、以下を実行しています。
- 右上の
Nameserversで指定したDNSサーバ1.1.1.1に対して1.1.1.1は世界で一番早いと言われているDNSキャッシュサーバです。私は家のPCのDNSはこれにしています。
corp.tokyo-calendar.jpのIPアドレスの解決をTraceオプション(反復問い合わせ箇所の結果を返すモード)で実行
結果はこうなりますよね。参考までに、以下は私の手元のlinuxマシンで実行した結果です。
nishida@Ubuntu:~$ dig @1.1.1.1 corp.tokyo-calendar.jp. +trace +nodnssec |
順に説明していきます。
.で始まるパート.(ルート)レベルのドメインを持つのは、a-mのroot-serverである。このどれかに問い合わせる、という意味です。
jp.で始まるパート- 一番下に
from 192.5.5.241#53(f.root-servers.net)と書いてあります。1.1.1.1が、a-m の中でf.root-servers.netに問い合わせを行った結果が返っています。 f.root-serversから、『jpドメインの名前を知っているのは、a.dns.jp-h.dns.jpだからそこに問い合わせてほしい』と返ってきています。
- 一番下に
tokyo-calendar.jp.で始まるパート- 一番下に
from 203.119.1.1#53(a.dns.jp)と書いてあります。1.1.1.1が、上記のa-h の中でa.dns.jpに問い合わせを行った結果が返っています。 a.dns.jpから、『tokyo-calendar.jpドメインの名前を知っているのは、ns-......だからそこに問い合わせてほしい』と返ってきています。- ドメインからわかりますが、
awsにこのwebサーバが置かれているという事がわかります。route53使ってるんですかね、おそらく。
- 一番下に
corp.tokyo-calendar.jp.で始まるパート- 一番下に
from 205.251.194.74#53(ns-586.awsdns-09.net)と書いてあります。1.1.1.1が、上記の中でns-586.awsdns-09.netに問い合わせを行った結果が返っています。 ns-586.awsdns-09.netから、corp.tokyo-calendar.jpは54.250.204.18と52.193.252.137の2つであると返ってきています。
- 一番下に
これで無事、**FQDN から IPアドレス に DNS解決** 出来ました。
解決出来たアドレスで、https通信ももちろんできます。
https://54.250.204.18/
証明書のCNが一致しないので警告画面は出ますが 詳細設定ボタン を押して、下のリンクをクリックすると当然閲覧出来ます。
少し応用
それでは次はwww.future.co.jpを見てみましょう。
nishida@Ubuntu:~$ dig @1.1.1.1 www.future.co.jp. +trace +nodnssec |
ようやく解決出来ました。こちらのサイトでDNS解決を行った場合は、最後に解決できるIPアドレスは違うと思います。先ほど説明した通り、CDNはクライアントに近い場所のキャッシュサーバを案内するため、接続元の場所が大きく違うと違うIPアドレスになるのが正しいです。
ちなみに、私が試した上記の環境は、会社支給のポケットwifiで試しているので、そのSIM携帯キャリアの基地局(?)内に置かれているAkamaiのキャッシュサーバのアドレスが、上記のアドレスになっていると想定されます。
このDNSですが、調査方法を知っておく事は非常に重要です。
私の経験上、ネットワークがつながらない問題の5割が、DNSが解決出来ない 事です。digコマンドはWindowsにもインストール出来ます。
Routing
無事、IPアドレス(ネットワーク上の住所)が判明した、次はどう通信するのかに話を進めます。
- データはパケットという単位で分割される
- ご存知の方も多いかもしれませんが、ネットワーク上の通信は、
パケットという単位で区切ってデータを送受信します。例えば動画などの大きなデータも、1パケットあたり(基本は)最大で1500バイトに分割して送られます、
- ご存知の方も多いかもしれませんが、ネットワーク上の通信は、
- 各パケットがそれぞれ、送信先のIPアドレスめがけて送信されます
Routing の仕組み
Routing も仕組み自体は外部にいいサイトがたくさんあるので、そちらを見た方が良いです。これくらいの説明の粒度を合致してそうなサイトは、このサイトあたりです。IPアドレス体系の説明をしていないので、まずはこれくらいの理解で良いです。
動きを見る
基本
それでは、先程名前を解決した、www.future.co.jp = a1807.b.akamai.net = 23.32.3.80 を例にしてみましょう。
Routing の様子を調べるには、Windowsではtracertというコマンドが使えます。(Macではtraceroute)
> tracert 23.32.3.80 |
上から順にNW的に近いルーティングデバイスです。
全部で12ホップである=クライアント~サーバ間に11個のルーティングデバイス存在する事が明らかになりました。
応答時間が3回分返ってきています。目的地まで平均して40ms程度なので通信状況は良好と言えます。
少しだけ細かく説明します。
- 1は、会社支給のポケット
wifiのアドレス - 2~8は、Softbankさん運営のNWです。NW内で(=AS内で)、何回かルーティングされています。
- ネットワークの所有者はwhoisというサービス(コマンドもインストール可能)で調べる事が出来ます。
- こちらのサイト で
126.240.91.1を入力すると出てきます。
- こちらのサイト で
- ネットワークの所有者はwhoisというサービス(コマンドもインストール可能)で調べる事が出来ます。
- 9~11は、
Firewallor 装置の設定などの問題で、tracerouteの信号に応答してくれない状態になっています。 - 12は、
www.future.co.jpのトップページのhtmlファイルがキャッシュされているAkamaiのサーバです。
この様に、tracerouteを使用すると、サーバまでのNWの経路と、その応答時間(レイテンシ)を測る事が出来ます。
何かしらの**処理が遅い系のトラブルは、まずtraceroute**を見るのが良いです。
NWの問題か、サーバの問題か、明らかになりますから。
少し応用
今度はcorp.tokyo-calendar.jp = 54.250.204.18を見てみましょう。
> tracert 54.250.204.18 |
返ってきませんね。これは明らかにターゲットとなる 54.250.204.18 の前にいるFirewall、今回はおそらくAWS の Sercurity Groupでtracertで使用するICMP(Ping)というパケットを許可していないため、途中から探索が出来なくなっています。
逆に言えば、webサイトの閲覧の通信(https)は許可されているわけなので、その通信に成りすまして trace してみましょう。
Windowsではまたもやコマンドがないので、以下はlinuxマシンで試しています。
nishida@Ubuntu:~$ sudo traceroute -T -p 443 54.250.204.18 |
今度は返ってきました。
途中で中継しているルーティングデバイスはやっぱり返答してくれませんでした。
全部で30ホップ。FutureのトップページよりはNW的には倍以上遠いです(というか、FutureはCDNを使っているから特別近いだけ)。ただ、応答時間は約40msなので良好です。応答時間の大部分を占めるのは、4G回線の部分という事も明らかになっています。
まとめ
説明の関係で誤解を招きそうなのでここで訂正しますが、最初のDNSの通信でもRoutingは使われています。
- 例えば、自分のPC →
1.1.1.1に対して、DNSパケットを投げた時からすでに。 - そして、
1.1.1.1→f.root-servers.net(192.5.5.241)へのDNS通信でももちろん。
最初からIPアドレスの世界から入ると、どうしても壁を感じてしまうため、本記事は名前から入ったためこの様な順序になっています。
OSI参照モデルと呼ばれており、各層で役割が分かれています(例えば、Routingは3層、DNSは7層)。次があればこの辺りも説明します。
OSI参照モデルに関しては、こちらの記事で、冗長構成の観点から少しだけ説明しています。
最後に
企業のシステム構成がだんだん明らかになっていくので、まるでハッキングしているみたいで面白いですよね。もちろん全部合法なので、知っているサイトを調べてみてください。特にFutureグループのWebサイトのほとんどがAWS上で作られている事がわかります。
トップページの様にそもそも公開しているサイトであれば別に構わないですが、逆にVPNサーバなど『本当は隠蔽したいけど通信のために公開しなければならないサービス』もありますよね。最近ではこれらのサービスの隠蔽のためにSDPという技術も出始めています。ニーズがあればどこかで書きます。