IPアドレス
IPアドレス(Internet Protocol address)とは、インターネット上で通信する端末が必ず持つ住所のようなものであり、通信の相手先を識別するための番号として使用される 32 bit の数値のこと。
- 例:192.168.10.1
上の例では4つの 10進数をピリオドで区切って表しているが、本来IPアドレスは 32 bit であるため、PC 上の処理では 32 桁の 2進数の数値で取り扱われている。
- 10進数の192 は、2進数(8桁=8bit)では 11000000
- 10進数の168 は、2進数(8bit)では 10101000
- 10進数の10 は、2進数(8bit)では 00001010
- 10進数の 1 は、2進数(8bit)では 00000001
10進数と2進数(8bit)にはこのような対応関係があり、192.168.10.1 というIPアドレスは次の 32 bit の2進数を 8bit 毎に区切って 10進数に変換したものを表している。
- 1100000010101000000010100000000
これを見ても分かるように、2進数で表現すると桁数が多くなってしまい、人間にとっては扱いづらいため、8bit 毎に区切って10進数に変換し、区切りをドットで表現している。また、
- 2進数の 00000000 は10進数では 0
- 2進数の 11111111 は10進数では 255
に対応しているため、IPアドレスの取り得る範囲は 0.0.0.0 〜 255.255.255.255 ということになる。
IPアドレスの種類
IPアドレスは、主にグローバルIPとプライベートIPの2種類に分類される。
プライベートIPアドレス
プライベートIPアドレス(ローカルIPアドレス)とは、組織内のネットワーク(プライベートネットワーク)でのみ使用できるIPアドレスのこと。IPアドレスは 32bit というサイズの制限があるため、その数に限りがあり、世界中の通信端末に個別に一意のIPアドレスを割り付けることはできない。
そこで、ある範囲のIPアドレスは各組織で自由に使って良い、ただし組織を跨いでその範囲のIPアドレスを通信端末の識別に使ってはいけないと決めることで、同じIPアドレスを異なる組織であれば使ってもいいことにして、限りあるIPアドレスを有効に使えるようにしている。
次の範囲のIPアドレスがプライベートIPアドレスとして定められている。
- 10.0.0.0 〜 10.255.255.255
- 172.16.0.0 〜 172.31.255.255
- 192.168.0.0 〜 192.168.255.255
この図のように局所的なネットワークのことを LAN(Local Area Network)と呼ぶ。LAN に該当するものとしては、企業内のネットワークや家庭内のネットワークなどがある。これらの LAN の中では上記の範囲内のIPアドレス、つまりプライベートIPアドレスを用いて通信端末の識別を行なっている。
グローバルIPアドレス
上記範囲以外のIPアドレスはグローバルIPアドレスと呼ばれる。プライベートIPアドレスは LAN の内側のネットワークにおいて通信端末を識別するために使用するものであることを説明した。一方、グローバルIPアドレスは LAN の外側のネットワーク、つまりインターネットで通信端末を識別するために使用する。
この図のように LAN と LAN をつなぐネットワークのことを WAN(Wide Area Network)と呼ぶ。ISP(Internet Service Provider)と呼ばれるインターネット接続事業者が持っているネットワーク網(つまりインターネット)のことを指す。LAN で使用するのはプライベートIPアドレスだが、WAN で使用するのはグローバルIPアドレスとなっている。
IPアドレスの範囲を表現する
ネットワーク部とホスト部
自分でネットワークを構築する場合、そのネットワークで使用する IP アドレスの範囲を決める必要がある。その際、IPアドレスの範囲を表現するために IPアドレスはネットワーク部とホスト部に分けて扱われる。
例えばネットワークで使用する IP アドレスの範囲が次のものであると仮定する。
- 192.168.128.0 〜 192.168.128.255
つまりプライベートアドレスの中でも上位の 24bit が 192.168.128 で表される合計 256 個の IPアドレスの範囲を表現することを考える。
このように連続する IPアドレスの範囲を決めるとそれらの IP アドレスの上位の何 bit かは、その範囲の全ての IP アドレスで共通になる。この共通になる上位の部分のことをネットワーク部と呼び、共通ではない下位の部分をホスト部と呼ぶ。
ネットワーク部 | ホスト部 |
---|---|
192.168.128. | 0 |
192.168.128. | 1 |
192.168.128. | 2 |
… | … |
192.168.128. | 255 |
ネットワーク内で共通となるネットワーク部の値はネットワークの識別に使用され、ホスト部はそのネットワーク内のデバイスの識別に使用される。
IPアドレスの範囲を表記する方法
IPアドレスの範囲を表記する方法には次の2種類が存在している。
- CIDR 表記
IPアドレスの後ろにスラッシュ「/」を書き、その後ろにネットワーク部が先頭から何ビット目までなのかを記載する方法。
192.168.128.0/24 と表記した場合は、上位の 24ビットがネットワーク部であることを表す。 - サブネットマスク表記
IPアドレスの後ろにスラッシュ「/」を書き、ネットワーク部に所属するビットは 1 に、ホスト部に所属するビットは 0 にした数値を記載する方法。
192.168.128.0/255.255.255.0 と表記した場合は、上位の 24ビットがネットワーク部であることを表す。
これらの例はいずれも 192.168.128.0 〜 192.168.128.255 の合計 256 個の IPアドレスの範囲を表現している。
URL
URL(Uniform Resource Locator)とは、インターネット上に存在する情報資源(リソース)の位置を特定するための記号の並びのこと。
例えばこの記事のURLは、「https://www.hidekazu-blog.com/basic-knowledge-of-the-web」となっている。
このURLを構成しているそれぞれの部分には意味があるので以下で説明する。
スキーム
URLの先頭部分の「http」「https」「ftp」「file」などのアルファベットの並びはスキームと呼ばれ、情報資源に到達するための手段を表している。
スキーム | 意味 |
---|---|
http | 情報資源を取得するために、HTTP(Hypertext Transfer Protocol)によるネットワーク通信を用いる。 |
https | 情報資源を取得するために、HTTPS(Hypertext Transfer Protocol Secure)によるネットワーク通信を用いる。 |
ftp | 情報資源を取得するために、FTP(ファイル転送プロトコル:File Transfer Protocol)によるネットワーク通信を用いる。 |
file | 情報資源を取得するために、ファイルシステム(コンピュータがファイルを操作する仕組み)を用いる。 |
これ以外にも様々なスキームが存在している。また、スキームの後の「:」はスキームとそれ以降を区切るための記号であり、「//」は特に意味は無いが付けるものと決まっている。
URLを考案したティム・バーナーズ・リー(World Wide Web(WWW)の生みの親)は、このダブルスラッシュ「//」は現在では不要であり、このダブルスラッシュを打ち込むために人間の労力や木・紙が無駄になっていると嘆いているらしい。
FQDN、ホスト名、ドメイン名
FQDN
スキームの後にある「www.hidekazu-blog.com」の部分は FQDN(Fully Qualified Domain Name:完全修飾ドメイン名)と呼ばれる。後述する DNS(Domain Name System)という仕組みによって、IPアドレスとこの FQDN は互いに変換することができる。
通信の相手先を識別するための番号である IPアドレスは数字の羅列であるため、人間にとっては区別しづらいし覚えにくいものだが、「www.hidekazu-blog.com」という文字列であれば、通信相手は私のこのブログ記事を配信しているサーバーであることが一目瞭然だ。
つまり FQDN は人間には識別しにくいIPアドレスに代わる、通信端末を特定するための文字列と言えるだろう。
また、この FQDN は後述する「ホスト」と「ドメイン」を含んでいるため、これ自体を「ホスト」「ドメイン」と呼ぶことがあるので注意が必要だ。
ホスト名とドメイン名
FQDN における「www」の部分はホスト名、「hidekazu-blog.com」の部分はドメイン名と呼ばれる。さらにドメイン名の「hidekazu-blog」はセカンドレベルドメイン、「com」の部分はトップレベルドメインと呼ばれる。
- www : ホスト名
- hidekazu-blog.com : ドメイン名
- hidekazu-blog : セカンドレベルドメイン
- com : トップレベルドメイン
「www.hidekazu-blog.com」という FQDN は私のブログのサーバーを特定するための文字列であり、インターネット上で通信するための住所を表すわけだが、これはアメリカの住所の仕組みに似ていて、後ろ側から読み解いていくようにできている。
日本の住所は都道府県などの大きいカテゴリから始まり、徐々に範囲が小さくなっていき最後に番地を書く(つまり前から読み解いていく)が、アメリカの住所は最初に番地を書き、徐々に範囲が大きくなっていく書き方をする(つまり後ろから読み解いていく)。
FQDN もこれに似ていて、ドメイン名の一番最後のトップレベルドメインが最も大きな(最上位の)カテゴリを表していて、後ろから読み解いていくようにできている。
DNS(Domain Name System)と呼ばれる FQDNとIPアドレスを互いに変換できる仕組みでは、以下のようにして FQDN から IPアドレスの取得(名前解決と呼ばれる)を行なっている。
- DNS のルートサーバーと呼ばれるドメイン名の織りなす階層の頂点に位置するサーバーに「www.hidekazu-blog.com」というドメイン名の解決(IPアドレスへの変換)を依頼する。するとルートサーバーはトップレベルドメイン「com」を管理しているサーバー(ネームサーバーと呼ばれる)を紹介してくれる。
- トップレベルドメイン「com」を管理しているネームサーバーに「www.hidekazu-blog.com」というドメイン名の解決(IPアドレスへの変換)を依頼する。すると「com」のネームサーバーはその下層(セカンドレベル)のドメイン名を管理している「hidekazu-blog.com」のネームサーバーを紹介してくれる。
- 「hidekazu-blog.com」のネームサーバーに「www.hidekazu-blog.com」というドメイン名の解決(IPアドレスへの変換)を依頼する。すると「hidekazu-blog.com」のネームサーバーは「www.hidekazu-blog.com」に対応する IPアドレスを教えてくれる。
実際には私たちのPCがIPアドレスを取得するために問い合わせをするのは「DNSキャッシュサーバー」と呼ばれるサーバーであり、DNSキャッシュサーバーが私たちのPCの代わりに上記の一連の通信を行なって名前解決を行なっている。アクセス数の多いサイトであれば、DNSキャッシュサーバーが名前解決を行なった結果をキャッシュ(記憶)しているので、すぐに結果を返してくれるため時間が掛からないが、あまりアクセスされないサイトではこの一連の名前解決のための通信に時間が掛かるため、サイトを表示するのに時間を要する。
「www」はホスト名だと説明したが、サーバーのことをホストと呼んでいる。
私は「hidekazu-blog.com」というドメイン名を Xserverドメイン を使って取得した。そのため、「hidekazu-blog.com」というドメイン名の下層に自由に名前を付ける権利を保有している。
「www.hidekazu-blog.com」という FQDN は私が取得した「hidekazu-blog.com」というドメイン名の下層に www というホスト名を追加したものであり、それをこのブログのサーバーと対応付けるための設定を「hidekazu-blog.com」のネームサーバーに対して行なってある。
つまりホスト名は「www」でなくても何でも良いわけだが、
- www.hidekazu-blog.com : Webサーバー
- mail.hidekazu-blog.com : メールサーバー
- shop.hidekazu-blog.com : 商品購買用のサーバー
などのようにするのが意味が分かりやすくて良いだろう。Webページを提供するWebサーバーに関しては「www」を使用するのが慣例になっている。ただ、Webページを閲覧するためのホスト名指定(www の部分)を省略する場合も多く、実際に私のブログも www を指定しても指定しなくてもアクセスできるように設定してある。ブラウザのURL入力欄に「https://hidekazu-blog.com」「https://www.hidekazu-blog.com」を打ち込んでもらえば確認することができる。
FQDN とIPアドレスを対応付ける
ネームサーバー(DNSサーバーとも呼ばれる)が FQDN とIPアドレスの対応に関する情報を持っている。実は私たちが使っているPCもDNSの設定を行うことで FQDN とIPアドレスの対応情報を保持することができる。この FQDN とIPアドレスの対応関係を記録したファイルは hosts ファイルと呼ばれる。
PCは hosts ファイルに FQDN とIPアドレスの対応が見つかれば、DNSサーバーにわざわざ問い合わせたりはしない。ローカルのネットワークで何かの機能を提供するサーバーを配置したい場合、DNSサーバーを配置せずにPCに hosts ファイルという形で FQDN とIPアドレスの対応情報を書き込んでやれば、PCの内部で名前解決を行うことができるため、DNS サーバーを用意する手間が省ける。
OS | hosts ファイルの置き場所 |
---|---|
Windows | C:\Windows\System32\drivers\etc\hosts |
Mac , Linux | /private/etc/hosts |
例えば、私の Mac PC の hosts ファイルをエディタで開くと次のような内容になっている。
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
IPアドレス 127.0.0.1 はループバックアドレスと呼ばれる特別なIPアドレスであり、そのコンピュータ自身を示している。したがってこの hosts ファイルでは、私のPC自身を表すIPアドレス 127.0.0.1 には localhost という名前が与えられている。そのため、URL の FQDN の部分に localhost という名前が指定された場合は、この hosts ファイルの設定により、ループバックアドレス127.0.0.1 で解決されることになる。
プロトコルとポート番号
IPアドレスを使用することで通信相手の端末を特定することができるが、IPアドレスだけでは端末内のどのソフトウェアで通信内容を処理するのかまで特定することはできない。
インターネットで使用される標準的な通信方式である TCP(Transmission Control Protocol)や UDP(User Datagram Protocol)と呼ばれるプロトコルでは、通信内容を処理するソフトウェアを識別するためにポート番号と呼ばれる16ビットの整数(0 〜 65535)を使用する。
ちなみにプロトコルとはコンピュータ同士が通信する際の手順や規約を意味する言葉だ。コンピュータ同士で情報のやり取りをできるようにするためには、0 と 1 という信号をどの様な物理的な信号で表現するか、0 と 1 の羅列のどこまでが一つのデータの区切りか、データが壊れていないことをどうやって保証するか、などなど様々なことを決定し、通信を行う全てのコンピュータが前提としてそれらの約束事を知っている必要がある。この様な約束事をプロトコルと呼ぶが、TCP や UDP はインターネットで通信を行う際に使用される様々なプロトコルの基礎となっているプロトコルだ。
また TCP は通信を行う前に通信相手とのコネクションを確立し、データの送信を行う度に通信相手にデータが届いたことを確認するなど、データが正常に送れていることを保証する仕組みを備えたプロトコルになっている。一方、UDP は TCP が持つデータを保証する仕組みを省くなど、軽量な通信を行うことを目的としたプロトコルになっている。
TCP や UDP では通信相手の端末内でのソフトウェアを識別するためにポート番号を使用するのだが、ネットワークでよく使用されるプロトコルについては利便性を高めるため、どのポート番号を使用するのかデフォルトが決められている。
ソフトウェア(プロトコル) | ポート番号 | 用途 |
---|---|---|
Webサーバー(HTTP) | 80 | Webサーバーとの通信 |
Webサーバー(HTTPS) | 443 | Webサーバーとの通信(暗号化された通信) |
DNSサーバー(DNS) | 53 | 名前解決 |
FTPサーバー(FTP) | 20, 21 | ファイル転送 |
… | … | … |
標準化のためにデフォルトが定められているプロトコルのポート番号は、0〜1023番が使用されており、これらのポート番号は Well-Known ポートと呼ばれる。それ以外のポートも含めて次の様に分類されている。
種類 | ポート番号の範囲 | 内容 |
---|---|---|
Well Known Port | 0 〜 1023 | 著名なソフトウェアやプロトコルに使用される |
Registered Port | 1024 〜 49151 | 事業者が登録可能なポート番号 |
Dynamic Port Private Port | 49152 〜 65535 | 個人で自由に使用できるポート番号 |
Registered Port は事業者が新しいソフトウェアを作成した際などに使用するポート番号であり、例えば MySQL であれば 3306 番のポート番号を使用している。
Dynamic Port は個人が自由に使えるポート番号であり、空いているポート番号を使用したい場合にはこの Dynamic Port から割り当てるが、ローカルでの開発では Registered Port から割り当てることもよく行われている。ネットワーク内で番号が重複しないように気をつければ、Registered Port から割り当てても問題ない。