【15日目】TCP/IPネットワーク入門(第6章DNS編)
皆さん,こんにちは.bb_lotusです. さて,今回はTCP/IPネットワークに関しての15日目のアウトプットになります.
すぐアウトプットだけ見たい人はこちらから
(ネットワーク初学者のため,記載内容等間違いがありましたらどしどしコメント,指摘等していただければと思います.)
使用する教材はこちらです.
「Linuxで動かしながら学ぶTCP/IPネットワーク入門」
--------------↓ここからアウトプット--------------
さて,今回は第6章の続きになります.
今回はDNSについてです!
前回のHTTPも難しくてついていうくのに必死でしたが(というかこの本全体的にそうです笑),今回も大丈夫かな..と不安です.笑
まあ,とりあえずやっていきましょう!!
・DNSとはなんぞや.
Domain Name Systemの略.
example.orgのような文字列(ドメイン名という)をIPアドレスに変換(名前解決という)し,サーバに接続してくれる!
以前にも出てきたループバックアドレスも127.0.0.1を表すドメイン名がlocalhost!!
実際にpingを使って確かめてみようー
$ ping -c 3 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.019 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.031 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.036 ms
--- localhost ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2041ms
rtt min/avg/max/mdev = 0.019/0.028/0.036/0.007 ms
返ってきた!!
なぜ,名前解決があるのかというと,人間にとってIPアドレスを覚えることは容易じゃない!だからこそ意味を持った文字列をドメイン名として使うことで,人間にとっても覚えやすくなる!!
ここで,名前解決の簡潔な図を以下に示します.
また,ドメイン名の解決はOSの中でスタブリゾルバと呼ばれるプログラムが担当し,スタブリゾルバは,コンピュータの中にあるhosts(ホスツ)と呼ばれるファイルを参照したり,外部のサーバに問い合わせることで解決する仕組みになっています.
また,hostsファイルを使ったドメイン名の解決は,とても単純な仕組みでできており,具体的にはテキストファイルにドメイン名と対応するIPアドレスが書かれています.
さきほど見たループバックアドレスであるlocalhostの名前解決はこのhostsファイルで実現されているようです!
Unix系のOSでは,hostsファイルが/etc/hostsという場所に存在するためループバックアドレスの定義を見に行ってみましょう!
$ grep 127.0.0.1 /etc/hosts
127.0.0.1 localhost
ありました!!!
ただし,いつもこのファイルの中にお目当てのドメイン名があるとは限らないです.
むしろない場合の方が一般的みたいです.
さて,そんなときはどうするのでしょうか.
そのような時には,外部のサーバに問い合わせるようです.この時,リゾルバが問い合わせるDNSサーバのことをネームサーバという.
(例えば,8.8.8.8はGoogleが運用する公開DNSサービスのネームサーバに付与されたIPアドレス)
では,実際にネームサーバを使った名前解決をやってみましょう!!
その前にターミナルでtcpdumpコマンドを実行します.
$ sudo tcpdump -tnl -i any "udp and port 53"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
ここで,UDPの53番は,DNSの通信にデフォルトで使われるポート番号です.
今度は,別のターミナルでdigコマンドを実行します.
このコマンドはDNSの動作確認やデバッグによく使われるプログラムみたいです.
Googleの公開DNSサービスを使ってexample.orgというドメイン名をIPv4アドレスに解決しています.
$ dig +short @8.8.8.8 example.org A
93.184.216.34
このコマンド実行後,tcpdumpコマンドを実行したターミナルに戻ると..
$ sudo tcpdump -tnl -i any "udp and port 53"
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
IP 10.0.2.15.38846 > 8.8.8.8.53: 59799+ [1au] A? example.org. (52)
IP 8.8.8.8.53 > 10.0.2.15.38846: 59799$ 1/0/1 A 93.184.216.34 (56)