【初心者目線】Webアプリケーションの開発 第5回

【初心者目線】Webアプリケーションの開発 第5回について書きます。

1. ホスト名から通信相手を識別するには


前回IPアドレスはインターネット上の通信相手のコンピュータを識別する住所のようなものと説明しました。

しかし、普段Webブラウザに入力するURLにIPアドレスは含まれていません。


ということは通信相手を識別する過程のどこかにドメイン名からIPアドレスに変換するメソッドがあるということになります。

ここではその技術について説明していきます。

1-1. DNS(Domain Name System)

冒頭でも述べましたが、インターネット上の通信はIPアドレスで通信相手を指定しています。

しかし、IPアドレスは数字の羅列であるため覚えにくく、私たちにとって使いやすいとは言えません。


そこで私たちが見ても通信相手を識別しやすいようにドメイン名とIPアドレスを紐付け、ドメイン名で通信相手を認識できるようにした仕組みが「DNS」とよばれるものです。

1-2. 名前解決

私たちがWebサイトを閲覧する際、WebブラウザのアドレスバーにURLを入力していると思います。


このとき内部でURLのドメイン名からIPアドレスへの変換が行われ、WebブラウザとWebサーバの通信をIPアドレスで行えるようになっています。

変換はインターネット上に配置されたドメイン名とIPアドレスの対応表を持つコンピュータが行っており、このような変換行為は「名前解決」とよばれます。(下図参照)


上記のような問い合わせは私たちが実施することもできます。

確認のためWindowsのコマンドプロンプトを開き、以下コマンド「nslookup gihyo.jp」を入力してください。


以下のような結果が表示されるはずです。


ネットワーク環境により表示が異なる箇所もありますが、最後の行「Address」に表示されたIPアドレスがDNSサーバへ問い合わせたgihyo.jpに対するIPアドレスになります。

私たちがWebサイトを閲覧している際は特に意識することはありませんが、裏側ではこのようなドメイン名とIPアドレスの変換が自動的に行われています。


※WebブラウザにURLを入力するときにドメイン名ではなく直接IPアドレスを入力してWebページを表示させることもできます。

2. DNSの仕組みと実現方法

DNSはドメイン名をIPアドレスに変換するという単純な仕組みのように見えますが、その実現方法が問題で、様々な工夫を駆使して実現されています。

まずIPアドレスは最大で約43億個存在するため、ドメイン名とIPアドレスを変換する対応表が膨大な量になります。


そして、IPアドレスは8ビットの数値4組で構成されており一つのIPアドレスは4バイトとなります。

さらにドメイン名は最大255バイトあるため合わせて259バイトになります。

この組み合わせを約43億個のIPアドレスに対して持つため、259×43億(4G) = 1036Gとなり1TB以上の情報量となってしまいます。


近年ストレージが大容量化しているので1TBのデータも容易に格納できますが、問題はこのデータに対する問い合わせ処理がWebサーバにアクセスするたびに発生することで、1台のDNSサーバでは対処できなくなる可能性があります。

2-1. ルートサーバ

このような問題を回避する方法としてDNSサーバを複数用意し「分散管理」することでDNSを実現しています。

例えばnekonoesa.jpというドメイン名はピリオドで区切られた「nekonoesa」と「jp」に分かれています。

インターネット上には各階層に対応したDNSサーバが用意されており、それらのサーバに問い合わせる事により下位のDNSサーバのアドレスを知ることができます。


例えば、comドメインを管理するDNSルートサーバは、amazon.comドメインのDNSサーバ情報を管理しています。

クライアントのDNSサーバはDNSルートサーバからamazon.comのDNSサーバの情報を手に入れることができます。


amazon.comドメインを管理するDNSサーバは、www.amazon.comドメインのDNSサーバ情報を管理しています。

クライアントのDNSサーバは、amazon.comドメインのDNSサーバからwww.amazon.comのDNSサーバの情報を手に入れることができます。


上図のjp、com、netといったDNSサーバのことを「TLD(トップレベルドメイン)」とよびます。

先ほど例に挙げたnekonoesa.jpのDNSサーバのアドレスは、jpドメインのDNSサーバに登録されています。

そして、TLDのDNSサーバを管理している大元のDNSサーバのことを「ルートサーバ」と呼びます。


ルートサーバは2023年現在、世界でたった13箇所にしか存在していません。

アジアの中では唯一日本にDNSルートサーバがあります。


ルートサーバのアドレスはいつでも参照できるよう様々なOSや全てのDNSサーバに登録されています。

※13箇所のみといっても実際にルートサーバ本体が13台しか存在しないのではなく、「エニーキャスト」という技術を用いて数百台のサーバが動いています。

2-2. ポート番号とは

インターネット上では様々なプロトコルで情報が送受信されています。

HTTP通信もそのプロトコルの一つですがほかにも電子メールの送受信で使用されているSMTPやPOP3、ファイルの転送に使用されるFTP、ネットワークに接続されたコンピュータを遠隔操作するためのSSHなど、私たちの身近なところだけでもいくつものプロトコルが使用されています。


TCP/IPによりWebブラウザからWebサーバへ情報を届けることができることはご存じかと思いますが、受け取った情報のプロトコルの判別や、情報を処理するアプリケーションの判断はできません。

そこで考え出されたのが「ポート」という概念です。


TCP/IPにより情報を受け取るアプリケーションは「待ち受けポート(リッスンポート)」というポート番号(0〜65,535)を決めて情報を待ちます。

このポート番号は一意となっており、同じポート番号を複数のアプリケーションが使用することはできません。



上図で示した通りコンピュータをビルに例え、コンピュータの中で様々なアプリケーション(住人)が情報(荷物)を待ち受けポート(客室)で待っていると考えるとわかりやすいかもしれません。


ポート番号を指定しないと受け取った情報をどのアプリケーションが処理すればよいか判別できないと説明しましたが、普段私たちが目にするURLにはポート番号が表示されていません。

にもかかわらず問題なく情報の送受信が出来ています。

これはポート番号が省略されているだけで、本来は以下のように記述します。

2-3. ウェルノウンポート(well-known ports)

なぜ省略した状態でもリクエストがWebサーバに届くのか疑問に感じられると思います。

通常、アプリケーションの待ち受けポートはポート番号が決まっておらず自由に決めることができます。

しかしそれではホストによってポート番号が異なり運用上不便になります。


そこで利便性を高めるため、良く使用されるプロトコルでは使用するポート番号をデフォルトで決めておくことになりました。

Webブラウザ(HTTPプロトコル)の場合、デフォルトで80番に接続するようになっています。

このような取り決めのおかげでWebサイトの閲覧時に、ポート番号まで意識しなくてもよいようになっています。


Webブラウザと同様にメールソフトやFTP転送ソフトなどもポート番号があらかじめ決められています。

このように標準的に決められているポートのことを「ウェルノウンポート」と呼びます。


Webブラウザは80番ポート、メールソフトは25番ポートのようにあらかじめ使用するソフトウェアにポート番号が設定されている事により、Webサイトを閲覧しながらメールの送受信をするなど、複数のインターネット通信を同時に行うことができます。


※基本的に上記の表にあるようなあらかじめ決められたポート番号を使用しますが、SSHなどの暗号化された通信を使用する場合、意図的にポート番号を変更する事もあります。

3. 第5回 まとめ

今回はDNSの仕組みとポート番号について解説しましたがいかがでしたか。

これらの技術は普段Webサイトを閲覧する際やメールを送受信する際にはあまり意識するものではありません。

しかし、インターネットで通信をする上で重要な技術になりますので、しっかりと仕組みを理解することが必要です。


次回はポートのセキュリティ問題、Webアプリケーションへのパラメータの渡し方などを解説予定です。