TCP/IPアレルギー撲滅ドリル【総まとめ編】パケット君の冒険旅行
|
「名前」を「解決」するとは? |
・名前解決とは何ですか?
名前解決とは、ドメイン名(例:www.atmarkit.co.jp)から、対応するIPアドレス(例:211.4.250.170)を求めることです。TCP/IPのネットワークでは、利用者の利便性を考えて、コンピュータにドメイン名が付いていることが多くあります。しかし実際に通信をするためには、通信相手をIPアドレスで指定しなければなりません。そこで通信に先立ってドメイン名からIPアドレスに変換します。
Webの場合、情報を指定するURL(例えばhttp://www.atmarkit.co.jp/fnetwork/accesstest/at.html)に、接続先Webサーバのドメイン名が含まれています。この部分を取り出して、あらかじめIPアドレスに変換しておき、それを接続先として利用します。
・DNSの機能については「例えばWebに接続するとき、いつDNSを使うのですか」を参照してください |
・Webブラウザが直接DNSを呼び出すのですか?
WebブラウザがDNSを直接呼び出すことはまずありません。WebブラウザはURLの中からドメイン名の部分(www.atmarkit.co.jp)を取り出して、次にこれを「リゾルバ」に渡します(図1の1)。「リゾルバ」は、DNSの呼び出しに必要な機能を使いやすい形で取りまとめたものです。Webブラウザに限らず、大部分のプログラムがドメイン名からIPアドレスへの変換の際にこれを利用します。
リゾルバはあらかじめ登録されているDNSサーバにアクセスして、www.atmarkit.co.jpというドメイン名を対応するIPアドレスに変換します。変換に成功すると結果は呼び出し元のプログラムに返されます(図1の2)。リゾルバという仕組みを利用することから、WebブラウザはDNSへのアクセス方法を知っている必要はありません。単にリゾルバを呼び出す方法だけ分かっていれば十分です。
・名前解決の大まかな流れを教えてください
図3の左半分を見ながら説明しましょう。Webブラウザから呼び出されたリゾルバは、IPアドレスを知りたいドメイン名を織り交ぜて、DNSに問い合わせるためのコマンドを作ります。
図3 DNSの問合せを送信する(図クリックで拡大表示) |
次にこの問い合わせコマンドをUDP通信のためのプログラムに渡して通信を依頼します。このとき、コマンドのほかに、DNSサーバのIPアドレスと、ポート番号も一緒に渡します。
ちなみに、DNS問い合わせに使用するポート番号は53番と決まっています。また問い合わせ先のDNSサーバは、通常、OSのネットワーク情報として設定します。WindowsであればTCP/IPの設定の中にDNSサーバのIPアドレスを設定する部分があります。
・DNSの問合せについては「ところでDNSのプロトコルってどうなっているんですか」を参照してください ・UDPの機能や特徴は「UDPを使うのはどんなアプリですか」を参照してください ・ポート番号の働きについては「IPアドレスとポート番号って何ですか」を参照してください。 |
通信に必要な情報を受け取ったUDP処理プログラムは、問合せポート番号を含んだUDPヘッダを作り出し、それを問合せコマンドにくっつけてUDPパケットを作ります。
・UDPパケットの構造については「ちなみにUDPパケットはどんな構造」を参照してください ・ファイルを読み出すメソッドは「サーバとはどんなメッセージをやりとりするんですか」を参照してください ・TCPの開始・終了は「TCPの通信を簡単な例で説明してください」を参照してください |
UDPパケットは次にIPの処理プログラムに引き渡されます。ここではあて先IPアドレスを含んだIPヘッダを作り出し、それをUDPパケットにくっつけてIPパケットを作ります。
こうして作ったIPパケットは、次に実際のネットワークに送り出されるのですが、その際にはIPアドレスではなくMACアドレスで相手を指定する必要があります。そこで登場するのがarpです。arpを使用すると、あるIPアドレスを持つコンピュータのMACアドレスを知ることができます。
こうして判明したMACアドレスを、IPパケットと一緒にEthernetに引き渡します。
・IPパケットの構造については「IPパケットはどんな構造なんですか」を参照してください ・IPアドレスとMACアドレスの関係については「arpはネットワークで何を「叫ぶ」」 を参照してください ・arpについては「arpの動作は」を参照してください |
IPパケットを受け取ったEthernetは、MACアドレスを含んだイーサヘッダと、データが正しいかどうかチェックするためのフレームチェックシーケンス(FCS)を作り出し、それをIPパケットにくっつけてEthernetフレームを作り出します。これがEthernetの中を流れてゆきます。
ここまでが名前解決の前半部分です。
・パケット?フレーム?
これまでにIP「パケット」とかEthernet「フレーム」という言葉が出てきましたが、この2つの言葉にに大きな違いはあるのでしょうか? 答えから言うと、さほど意味の違いはないので戸惑う必要はありません。
ひとまとまりのデータを指し示すとき、一般に、ネットワーク装置の処理の範囲(データリンク層といいます)では「フレーム」、それ以上のソフトウエア処理の範囲では「パケット」という言葉を使います。そのため、IPやTCPなどでは「パケット」、Ethernetなどでは「フレーム」という表現が使われているというわけです。
・データリンク層については「7つに分けるという話も聞いたことがあるんですが」を参照してください |
・名前解決の後半はどうなりますか?
図3の右半分を使って説明しましょう。Ethernetにつながっているコンピュータは、いつもネットワークに流れているEthernetフレームをチェックしていて、自分あてのものが流れてきたら取り込みます。これがネットワークからのデータの受信動作です。
こうして受信したデータはイーサヘッダとフレームチェックシーケンスを取り除いて、IPの処理プログラムに引き渡します。引き渡す先をどうやって決めるか不思議に思うかもしれませんが、実はイーサヘッダに「送っているデータはIPパケットです」という情報が入っていますので、間違いなく正しいプログラムに引き渡せます。
IPパケットを受け取ったIP処理プログラムは、受け取ったデータが正しいかどうかチェックし、そのあて先が自分あてであることを確認してから、UDPの処理プログラムにデータを引き渡します。このときも先ほどと同じように、IPヘッダの中に「送っているデータはUDPパケットです」という情報が入っています。IP処理プログラムはこの情報を見てUDP処理プログラムにデータを引き渡します。
UDPパケットを受け取ったUDP処理プログラムは、UDPヘッダの中に含まれているポート番号を取り出し、UDPヘッダを取り除いた部分を、そのポートからのデータを待っているプログラムに引き渡します。データを受信するプログラムは、「ポートxx番あてのデータを受信する」ということをあらかじめ決めています。DNSプログラムは通常ポート53番あてのデータを受信しますので、UDPヘッダにポート53番が指定されているDNSへの問い合わせコマンドは、DNSプログラムに無事に引き渡されるわけです。
・DNSからの回答はどうなりますか?
ドメイン名からIPアドレスを得たDNSは、その結果を問い合わせ元に送り返します(図4)。このときの通信の様子は、基本的に問い合わせ元から問い合わせコマンドを送るときと同じです。
図4 DNSの問合せ結果を返送する(図クリックで拡大表示) |
DNSは問い合わせへの回答を作成し、それをUDP処理プログラムに引き渡します。このときの送り先のIPアドレスと問い合わせ元ポート番号は、問い合わせコマンドのパケットに含まれていたものを使います。
問い合わせへの回答は、UDP→IP→Ethernetと階層を下るごとにヘッダが付け加えられてゆきます。途中のIPの処理プログラムでは、arpを使って問い合わせ元のMACアドレスを調べるのも、問い合わせの場合と同じです。
問い合わせ元に届いたEthernetフレームは、階層を上がるごとにヘッダが取り除かれ、最後には問い合わせへの回答だけになります。問い合わせへの回答を受信することで、リゾルバはドメイン名に対応するIPアドレスが分かります。この結果をWebブラウザに返します。Webブラウザは、以降、こうやって得たIPアドレスに対して、htmlの読み出しコマンドなどを送ることになります。
・ドメイン名からIPアドレスを得るときのDNSの動作は「DNS全体の動作の様子を具体的に教えてください」を参照してください |
冒険の舞台はいずこ? |
|
関連リンク | |
連載:TCP/IPアレルギー撲滅ドリル【超実践編】(上位レイヤ編) 連載:TCP/IPアレルギー撲滅ドリル【超実践編】(下位レイヤ編) 連載:インターネット・プロトコル詳説 連載:ルータの仕組みを学ぼう ホストのネット接続は正しく行われているか? 〜netstatによるネットワーク設定の確認〜 |
「Master of IP Network総合インデックス」 |
- 完全HTTPS化のメリットと極意を大規模Webサービス――ピクシブ、クックパッド、ヤフーの事例から探る (2017/7/13)
2017年6月21日、ピクシブのオフィスで、同社主催の「大規模HTTPS導入Night」が開催された。大規模Webサービスで完全HTTPS化を行うに当たっての技術的、および非技術的な悩みや成果をテーマに、ヤフー、クックパッド、ピクシブの3社が、それぞれの事例について語り合った - ソラコムは、あなたの気が付かないうちに、少しずつ「次」へ進んでいる (2017/7/6)
ソラコムは、「トランスポート技術への非依存」度を高めている。当初はIoT用格安SIMというイメージもあったが、徐々に脱皮しようとしている。パブリッククラウドと同様、付加サービスでユーザーをつかんでいるからだ - Cisco SystemsのIntent-based Networkingは、どうネットワークエンジニアの仕事を変えるか (2017/7/4)
Cisco Systemsは2017年6月、同社イベントCisco Live 2017で、「THE NETWORK. INTUITIVE.」あるいは「Intent-based Networking」といった言葉を使い、ネットワークの構築・運用、そしてネットワークエンジニアの仕事を変えていくと説明した。これはどういうことなのだろうか - ifconfig 〜(IP)ネットワーク環境の確認/設定を行う (2017/7/3)
ifconfigは、LinuxやmacOSなど、主にUNIX系OSで用いるネットワーク環境の状態確認、設定のためのコマンドだ。IPアドレスやサブネットマスク、ブロードキャストアドレスなどの基本的な設定ができる他、イーサネットフレームの最大転送サイズ(MTU)の変更や、VLAN疑似デバイスの作成も可能だ。
|
|