◆IPアドレス
コンピューターはコンピューター同士で通信をする。通信をするためには、コンピューター同士を線か何かでつながなければならない。基本的に近くのパソコン同士でしか通信できないんだけど、昔の人はめっちゃ通信したかった。そのためにはもっと広いネットワークで自分のコンピューターの一意の場所を明示するための仕組みが必要だった。そして色々あった結果、自分の住所を手に入れる仕組みができた。
それはインターネット(プロトコル)って仕組みだった。TCP/IPという通信のきまりでハデに盛り合おうやって取り決めをした。おかげさまで、相手の住所が分かっていれば通信をすることが出来るようになった。手紙出すのと同じだ。
住所の表現方法は「114.514.1919.810」みたいに数値をカンマで区切ったようなノリだ。あるいは「1145:1419:1981:0364:3648:93::931」みたいな。これらは有り得ないアドレスだけど。
◆通信
俺らのパソコンからまろび出たデータは、線やら電波でもってルーターへと飛んでいく。「ルーターってなに?」って?そりゃお前魔法の箱だよ。
ルーターから先はインターネットの世界で、データは自分がどこに行けばいいのかわからない。ただ、ルーターは別のルーターと繋がっている。その「別のルーター」はこれまた別のルーターにつながっていて、めっちゃ辿れば通信相手のルーターまで行くことが出来るだろう。
ルーターには「ルーティング・テーブル」っていうメモが入っていて、そこには「そのIPアドレスなら大体こっちの方面にデータ流せば着くんじゃね?」情報がかかれている。ルーター同士、あるいはルーターと俺らのパソコンはたまにネットワークについての会話をしていて、ルーターは自分が持ってるルーティングテーブルを書き直したりしてる。
あて先まで届くようにルーター同士でデータをリレーしてくれているのだ。そして、そのあて先は「114.514.1919.810」で表現する。
でも、Chromeのアドレスバーに数値打ち込むのつらいじゃん?職場でIPアドレス打ち間違えてエロサイトに飛んだら泣くじゃん。だから、ドメインってものが生まれた。
◆ドメイン
「IPアドレスと文字列を対応付ければ、文字列でアクセスすることできるやん。」が、ドメインだ。
例えばこのサイトのURLは「insider.10bace.com」だ。これは「com」に属する「10bace」に属する「insider」を表現している。そして「com」は「root」に属している。
つまりドメインからIPアドレスが分かればいいんだけど、IPアドレスの取得にも一悶着ある。
※以下の会話には嘘がある。が、とりあえず読み進めてくれ。
ぼく「insider.10bace.comに行きてぇなぁ。だけどIPアドレスわからん。」
???「よし、みつけてきたるわ。しかしrootっていうサーバーのIPアドレスしかわからんな…rootに聞きにいくしかないやろな。」
???「rootサーバーさん、insider.10bace.comに行きたいんですけど。」
root「comサーバーに聞いてくれればいいよ。comサーバーのIPアドレス教えるね。」
???「comサーバーさん。insider.10bace.comに行きたいんですけど。」
com「10bace.comサーバーに聞いてくれればいいよ。10bace.comサーバーのIPアドレス教えるね。」
???「10bace.comサーバーさん。insider.10bace.comに行きたいんですけど。」
10bace.com「良く来たわね。いらっしゃい。insiderの真名は”10bace-insider.azurewebsites.net”よ。」
???「えぇ…(困惑)」
???「rootサーバーさん、10bace-insider.azurewebsites.netに行きたいんですけど。」
root「netサーバーに聞いてくれればいいよ。netサーバーのIPアドレス教えるね。」
???「netサーバーさん、10bace-insider.azurewebsites.netに行きたいんですけど。」
net「azurewebsites.netサーバーに聞いてくれればいいよ。azurewebsites.netサーバーのIPアドレス教えるね。」
???「azurewebsites.netサーバーさん、10bace-insider.azurewebsites.netに行きたいんですけど。」
azurewebsites.net「おっそうか。真名は”waws-prod-ty1-009.vip.azurewebsites.windows.net”だぞ」
???「うっほ」
~なんやかんやあって~
cloudapp.net「waws-prod-ty1-009.cloudapp.net.のIPアドレスは13.78.117.86だよ。」
???「やっと手に入った」
???「IPアドレスわかったで、これやで。」
ぼく「なんだこのゴミブログ」戻るボタンポチー
???「クソが」
◆DNSサーバー
さっき???が話していた相手は「Domain Name System」、すなわちDNSサーバーと呼ばれるものだ。
そいで「???」はリゾルバというソフトウェアだった。与えられたドメイン情報をIPアドレスに解決してくれる。そして、ぼくくんのPCはDNSを利用する立場であるから、DNSクライアントと呼ばれる。
リゾルバはテメーのパソコンにも入っていて、Windowsなら以下の手順で確認できる。
- Windowsキーを押して「cmd」と入力してEnter
- 「nslookup insider.10bace.com」と入力してEnter
Linuxerとかマカーは、より高機能なdigリゾルバを使おう。「dig insider.10bace.com」でいいよ。
◆ネームサーバー
俺がついた嘘は、サーバー名だ。rootサーバーやcomサーバーや10bace.comサーバーは、実際にはそんなに分かりやすい名前ではない。
DNSサーバーはネームサーバーとも呼ばれている。「名前解決してくれるサーバー」という文脈でDNSサーバーを語る時、ネームサーバーと呼称していることが多いな。もっと広い「Domain Name Systemのためのサーバー」という意味ではDNSサーバーと呼ばれる。でも同じものと思ってくれていいよ。
ネームサーバーは、自分が担当する「ゾーン」を持っている。例えばcomサーバーは10bace.comを解決できるが、10bace.comの担当範囲までは解決できない。
一つのゾーンを解決するネームサーバーは複数ある。なぜなら、世界中のいろんな場所からの大量リクエストに答えなきゃいけないし、システムが落ちた時に名前解決難民が大量発生するでしょう。だから沢山あったほうが安心。
- rootのネームサーバー
「a.root-servers.net.」~「m.root-servers.net.」までの13クラスタ - com/netのネームサーバー
⇒※comだけじゃなくてnetの解決もしている
「a.gtld-servers.net.」~「m.gtld-servers.net.」までの13クラスタ - 10bace.comのネームサーバー
⇒※10bace.comだけじゃなくて他のドメインの解決もしている
「ns1-04.azure-dns.com.」「ns2-04.azure-dns.net.」「ns3-04.azure-dns.org.」「ns4-04.azure-dns.info.」
そして、insider.10bace.comが「10bace-insider.azurewebsites.net.」であることを聞かされる
- azurewebsites.netのネームサーバー
「ns2prod.122.azuredns-prd.info.」「ns2prod.122.azuredns-prd.org.」「ns1prod.122.azuredns-prd.info.」「ns1prod.122.azuredns-prd.org.」
まだ続いていくんだけど、こんな感じでたらい回しにされた結果IPアドレスを貰うことが出来る。名前解決の流れを見てみたいんならこのページでdigって遊んでみよう。わかりやすいよ。
おまけ:ルートサーバーの場所
◆ドメインの購入
ドメイン買うじゃん?その時って何が起こってるんだろか。
それは、レジストラがレジストリにレジスターしてる。「register」は登録って意味。
お名前.comはレジストラであり、ドメイン販売業者でもある。そしてクソ業者だ。ドメインはムームードメインから買おう。ムームードメインはドメイン販売業者としての役割しかもっていないもんで、レジストラであるお名前.comを経由してレジストリにドメインを登録している。
俺らがレジストラに「1145141919810.com使うわ。場所とってくれ。」とお願いすると、レジストラはレジストリにその名前を登録する。つまり、名前だけが確保される。ネームサーバーはまだない。誰も解決できない。
※実際の「1145141919810.com」はムームーDNSを指定してるからdigされるとネームサーバーが出てくる。
レジストラがレジストリに登録しなきゃいけないのは「ドメイン名」と「ドメイン名を解決するためのネームサーバー」だ。だから、ドメインを買ったら「ネームサーバー指定してね」って言われる。
ネームサーバーを指定してやると、レジストリに対するアクセスがあったときに(レジストリの持っている)ネームサーバーが「次はこっちのネームサーバーに送ればいいんやな」という判断をすることができるようになるだろ?
◆DSNレコード
ドメインをIPアドレスに解決するためには、DNSサーバーの中にドメインとIPアドレスの紐づけが無ければいけない。その辺の情報は「DNSレコード」として保存されている。レコードには種類があって、あるレコードでは例えばドメインに別名をつけることもできる。
全部じゃないけどレコードの種類をチラ見していってくれ。DNSサーバー達に「俺のDNSゾーン」という紙切れが落ちていて、そこにExcelみたいに二次元データが書かれてると思えばいい。
▼NSレコード
ネームサーバー名。comのネームサーバーには
「”10bace.com”の名前解決をするためのネームサーバーはこ↑こ↓」
という情報を登録しなければいけない。IPアドレスじゃなくてサーバー名を入れてねって言われる。理由としてよく言われるのが、ネームサーバーをホストしてくれている会社がネームサーバーのIPアドレス変えたい時に困るから。仕様上でもIPアドレスを指定していいのはAレコードだけだ。
で、良く分からん点として「子ゾーン」を持つネームサーバーだけがNSレコードを持つわけではないということが挙げられる。
つまり、comだけじゃなくて10bace.comゾーンのネームサーバーにもNSレコードがある。なぜだろうか。別にinsider.10bace.comゾーンなんてないし、ゾーンが存在しないから担当するネームサーバーも無い。 insider.10bace.comドメインは10bace.comゾーンがもうカバーしているから。
comの子である10bace.comに設定されるNSレコードは「権威」を表現している。「お前今このゾーン来たけど、このサーバーが担当してっからね。」という事を示す。複数のネームサーバーが分担してたら1レコードに全部のサーバー名が入る。「なんでそんなのが必要なの?」「なんでどっちもNSって名前なの?」って思ったかもしれんが、俺もそう思う。
理解したい人はこのスライドを見てみてね。多分…なんかDNSというものの構造がまずいんじゃないだろうか。よくわからん。
▼Aレコード
アドレスレコード。「このIPアドレスだお」ってレコード。複数レコードが有り得て、例えば「10bace.com」自身についてのAレコードと「insider.10bace.com」についてのAレコードを指定できる。
▼CNAMEレコード
真名って言ってたのがこれ。つまり、別名。Canonical Name。エイリアス。
※真名っていう言葉はこの記事で言っているだけで、世間じゃ通用しないよ。厨二病だと思われるよ。
「insider.10bace.comのIPアドレスくだしゃい」って問い合わせに対して「その名前うそだから。ほんとは10bace-insider.azurewebsites.netだから。残念だったね^~wwww」って応答が出来る。
▼TXTレコード
文字が書いてある。問い合わせに文字を返せる。
正しいネームサーバーのDNSレコードを書き換えることが出来るのは、何だかんだでドメイン所有者だけだ。だから、「指定のTXTレコードに”おチンチン”って書いて」ってオーダーを達成することでドメインの所有権を証明することが出来たりする。あと慣例なのか分らんがゾーンの真名指定がTXTでされている。つまり「10bace.com」の真名は「10bace.azurewebsites.net」なんだけど、それが書いてあったりする。でもAレコードがあるからそっちが優先されるんじゃね?よくわからん。
▼SOAレコード
なんだかんだ書いてある。
◆結論
以上です。大体わかった?実はそんな感じで情報をやりとりしてました。すごいね。偉いね。
ひまだったら自分でDNSサーバー立ててみるのも面白いかもしれん。がんばえ。
あと、「IPアドレス」の事を「IP」って省略してる人がいるけど、そうやって略すことはできないよ。IPはそれ単体で「Internet Protocol」という意味だから。fusianasanとか狼でお漏らししちゃったときは「IP漏れた」じゃなくて「IPアドレス漏れた」と言おう。
まぁでも別に技術者でもねぇだろうから気にしなくていいよ。好きにしろ。
提案として、「Internet Protocol Address」を「IPAd」と省略するのはいかがだろうか。読み方はアイパッド。
コメントを残す