はじめに
この連載では仮想的なLANを実装することにより、目に見えないTCP/IPプロトコル群を、手を動かして目で実際に確認しながら習得することを目的としています。
ただし、TCP/IPのすべてを解説するのは分量上不可能ですし、余計に読者を混乱させてしまいますので、筆者が重要と考えている部分だけ解説します。またサンプルコードや本記事に出てくるIPアドレスとMACアドレスについては架空のものであり、実際にそのIPアドレスを取得した組織などを意識したものではありません。あらかじめご了承ください。
今回はアプリケーション層のプロトコルとそれに関係する事柄について解説します。
本記事の対象を超えるもの、記述箇所を特定しないもの、読者固有環境に起因するもの、読者の主義思想に関するもの、読者の誤解によるもの、社会人としてのマナーを欠いたものなどは質問/指摘を頂いてもお答えできません。あらかじめご了承ください。
アプリケーション層の概要
この層の役割は、IPアドレスと名前のマッピング・電子メール・ファイル転送・時刻同期などのTCP/IPアプリケーションの仕様を規定することです。仕様を決定することにより、異なるプラットフォームでも同様に動くアプリケーションを作れるようになります。
この層のプロトコルは多数存在します。IPアドレスと名前のマッピングを扱うDNS、電子メールを扱うSMTP/POP、ファイル転送を扱うFTP、時刻同期を扱うNTP。今回はその中から重要度が高いと筆者が考えたDNSを解説していきます。
DNS(Domain Name System:ドメインネームシステム)の概要
ホストを特定するための識別子であるIPアドレスは、慣習的に数値とドットで表現されている32ビットの値(IPv4の場合)であり、コンピューターにとって都合の良いものですが、人間にとっては扱いにくいものです。そこでインターネットの初期では、IPアドレスにホスト名を関連付けてhostsファイルに記述し、FTPでそのファイルを配布することにより管理していました。
しかし、次第にインターネットの規模が大きくなってくると、その方法では管理が不可能になることは明らかでした。そこで、莫大な数になるインターネット全体のIPアドレスとホスト名の関連付けを分散して管理する方法が考えだされました。それがDNSです。
DNSの主要な概念は3つあります。
1つ目は、木構造の「ドメイン名空間」とそれに結びついた「リソースレコード」です。
2つ目は、ドメインに関する情報を持つ「ネームサーバ」です。
3つ目は、クライアントからの問い合わせに応じてネームサーバから情報を引き出すプログラムである「リゾルバ」です。
次項からこれらの主要な概念について解説します。
ドメイン名
ホームページにアクセスする時、「http://www.codezine.jp/」のようにアドレスを文字列で指定します。このうち codezine.jpがドメイン名です。
ドメイン名はこのようにアルファベットとドットで構成されています。正式には、アルファベットで始まり、アルファベットか数字かハイフンが続き、アルファベットか数字で終わる文字列(この文字列をラベルと呼びます)をドットで区切ったものです。ただしラベルは、アルファベットは小文字と大文字を区別しない点に注意してください。例えば、「CodeZine」と「codezine」は同じ名前だと見なされます。
ドメイン名はドットで区切られていて、右からトップレベルドメイン、第2レベルドメイン、第3レベルドメインと呼びます。トップレベルドメインは、ccTLD(Country Cord Top Level Domain:国トップレベルドメイン)とgTLD(Generic Top Level Domain:汎用トップレベルドメイン)があります。
例えば、よく見かけるドメイン「jp」は日本を表すccTLDで、「com」は商用を表すgTLDです。
第2レベルドメインは日本の場合、営利組織用の「co」、非営利組織用の「or」、政府自治体用の「go」、教育機関用の「ac」、ネットワーク管理組織用の「ad」があります。その他にも地域別ドメインが用意されており、第2レベルに都道府県府県市名、第3レベルに市町村名を利用する場合もあります。
ドットで名前を区切っている理由は、膨大な数があるドメイン名を分散管理するためです。ドットで区切り、それをツリー状に管理すれば、一つの場所で膨大な数のドメインを管理せずに済み、手分けして管理することが可能となります。
なお、一つのラベルは0~63バイト内、ラベルをつなぎ合わしたドメイン名は255バイト以下でなければなりません。DNSの主要な概念で名前空間とともに挙げたリソースレコードについては、長くなりますので説明を割愛します。