Help us understand the problem. What is going on with this article?

IPアドレスの基礎知識

More than 3 years have passed since last update.

主に自分用。IPアドレス関連の知識でなにかわからなくなったり、忘れてしまった際に真っ先に帰ってこれる場所として書いた。
サブネットマスクの理解が曖昧だったので書籍やWebで調べてまとめていたら、いつの間にかIPアドレスの全体的なまとめになっていてここに至る。

主に参考にしたソースは以下。

1. IPアドレスの基礎

1-1. IPアドレスとは何か

PCやサーバなど、TCP/IPで通信する機器を識別するためのアドレスのこと。
現実世界で郵便物を配達する際に住所が必要なのと同じように、ネットワークの世界でもデータを特定の機器に届けるためにIPアドレスが必要になる。

1-2. IPアドレスの長さと表記方法

現在の主流であるIPv4において、IPアドレスは 32ビットの正整数値 で表される。
そのため、以下のようになる。

10101100000001010010001000001011

しかし、このままでは人間にはわかりづらいので、 8ビットずつ4組に分けて、その境目にドットを入れて10進数で表記する。
この表記方法を「ドット・デシマル・ノーテーション」と呼ぶ。

# 本来の形
10101100000001010010001000001011

↓

# ドットで8ビットずつに分ける
10101100.00000101.00100010.00001011

↓

# 10進数表記にする
172.20.1.1

1-3. IPアドレスはNICに設定される

IPアドレスは「ホスト」に対してではなく、NIC(ネットワークインターフェースカード)ごとに割り当てられる。
通常は1NIC-1IPアドレスになるが、1つのNICに複数のIPアドレスを割り当てることが可能だったり、複数のNICを備える機器(ルータなど)が存在する。

(図)IPアドレスはNICに割り当てられる
ipaddress.001.jpg

1-4. 割り当てできないIPアドレス

IPアドレスの中にはホストに割り振ることができないアドレスが存在する。
それぞれ特別な意味をもつため、実際のホストに割り振ることができなくなっている。

1-4-1. ネットワークアドレス

ネットワーク自体を表すアドレスのこと。
ネットワークアドレスは、ホスト部のビットが全て0になる。
例えば、以下のIPアドレスは全てネットワークアドレスである。

  • 10.0.0.0(クラスA)
  • 172.16.0.0(クラスB)
  • 192.168.1.0(クラスC)

1-4-2. ブロードキャストアドレス

そのネットワーク内の全てのホストにデータを送信するために使われるアドレスのこと。
ブロードキャストアドレスは、ホスト部のビットが全て1になる。
実際には、通信相手を特定できない場面で使われることが多いようで、そういう場面は結構あるらしい。

以下のIPアドレスは全てブロードキャストアドレスである。

  • 10.255.255.255(クラスA)
  • 172.16.255.255(クラスB)
  • 192.168.1.255(クラスC)

1-4-3. ループバックアドレス

自分自身を示すIPアドレスのこと。
アドレスの始まりが127のものは、ループバックアドレス用として予約されている。
IPv4では127.0.0.1が使われている(ホスト名はlocalhost)。

2. IPアドレスの構成

IPアドレスは32ビットでひとかたまりというわけではなく、 ネットワーク部とホスト部に分けられている。
IPアドレスは、対象となる ホスト がどの ネットワーク に所属しているのかという情報を表現しているため、このように構成されている。

(図)IPアドレスはネットワーク部とホスト部から構成される
ipaddress.002.jpg

住所に喩えると、ネットワーク部は「東京都」のような地域エリアを表し、ホスト部は個々の家を表す。
前半のネットワーク部でネットワークを識別し、後半のホストアドレスで該当するネットワーク内のどのホストかを識別してデータを送受信している。

2-1. ネットワーク部とホスト部の識別方法

上述のとおり、IPアドレスはネットワーク部とホスト部とから構成されている。
しかし、32ビットの内どこからどこまでネットワーク部でどこからどこまでがホスト部なのかは固定されておらず、IPアドレスによって異なる。この点がIPアドレスのややこしいところでもある。

これには、歴史的に以下の2種類の区別方法が存在している。
1. クラスによる分類(クラスフルアドレス)
2. サブネットマスクによる分類(クラスレスアドレス)

クラスによる分類は初期のIPでの区別方法であり、現在はサブネットマスクによる分類方法が主流になっている。 そのため、基本的にはサブネットマスクによる区別方法で考えれば良い。

3. クラスフルアドレス

クラスフルアドレスでは、IPアドレスはA〜Eの5種類のクラスに分類されている。
IPアドレスの先頭1~4ビットまでのビット列の組み合わせによって、どのクラスに属するかを判別することができる。
5つのクラスのうち、ユーザに割り当てられるクラスはA~Cの3つだけ。

クラス 先頭ビット列 アドレス範囲(10進数) ネットワークアドレス長 ホストアドレス長 割り当て可能なホスト数 補足
クラスA 0 0.0.0.0 ~ 127.255.255.255 8ビット 24ビット 16777214個 -
クラスB 10 128.0.0.0 ~ 191.255.255.255 16ビット 16ビット 65534個 -
クラスC 110 192.0.0.0 ~ 223.255.255.255 24ビット 8ビット 254個 -
クラスD 1110 224.0.0.0 ~ 239.255.255.255 - - - IPマルチキャスト用途
クラスE 1111 240.0.0.0 ~ 255.255.255.255 - - - 研究用途

(図)IPアドレスのクラス
ipaddress.003.jpg

先頭ビット列をみるか、10進数のアドレス範囲を見れば対象のIPアドレスがどのクラスかわかる。そして、クラスがわかればネットワーク部とホスト部が必然的にわかるようになっている。 クラスフルアドレスはわかりやすい。

3-1. クラスフルアドレスの問題点

クラスフルアドレスの問題点は大雑把すぎて無駄が多くなってしまうところにある。
ネットワーク部が同じコンピュータは全て同一のリンクに接続する必要があるので、クラスAの場合だと1ネットワークに約1600万台(2の24乗)のホスト、クラスBだと約65000台(2の16乗)のホストを接続することが可能になる。しかし、どちらも1ネットワークに接続するホスト数としては多すぎる。
インターネットが大きくなるにつれてネットワークアドレスが不足し、クラスフルアドレスをそのまま使うことは許されなくなり、無駄を小さくする仕組み「サブネットマスク」が導入された。

4. サブネットマスク

先にも述べたが、 クラスレスアドレスの現在、IPアドレスはネットワーク部とホスト部の切れ目が定まっていない。
サブネットマスクはIPアドレスとセットで使われるもので、IPアドレスの32ビットのうち「どこからどこまでがネットワーク部でどこからどこまでがホスト部であるか」を示すもの(クラスレスアドレスの場合、サブネットマスクの指定は必須)。

サブネットマスクを用いることで、ネットワーク部とホスト部の切れ目を自由に決めることができるようになる。クラスフルアドレスでは8ビット(クラスA)、16ビット(クラスB)、24ビット(クラスC)のいずれかでしかネットワーク部とホスト部の切れ目を設定できなかったが、この縛りがなくなるわけである。

4-1. サブネットマスクの構成

サブネットマスクは、IPアドレス同様に32ビットの正整数値になる。
IPアドレスのネットワーク部を表すビット部分が1になり、ホスト部を表すビット部分が0になる。
そのため、最初にネットワーク部を示す「1」が連続し、その後にホスト部を示す「0」が連続する形になる。

例えば、クラスCのように先頭24ビットがネットワーク部で残り8ビットをホスト部にしたい場合、サブネットマスクは以下。

11111111.11111111.11111111.00000000

これを10進数にすると255.255.255.0になる。

先頭26ビットをネットワーク部にしたい場合は以下。

11111111.11111111.11111111.11000000

これを10進数にすると255.255.255.192だ。

※ 余談

IPアドレスは8ビットごと4つにドットで分けて10進数で書いていると思うが、サブネットマスクを使う場合ドットで分かれた部分がネットワーク部とホスト部の区切りと関係なくなるので、ややこしい。ドットで区切られているとその区切りに何か意味があると思い込んでしまうが、それはクラスフルアドレスの時にしか有効じゃなかったのでした。

4-2. サブネットマスクの表記方法

現在、サブネットを表すには2つの表記方法が存在する。
例として、172.20.100.52の上位26ビットがネットワークアドレスの場合の例を示す。

1. IPアドレスと別にサブネットマスクをそのまま記述する

IPアドレス: 172.20.100.52
サブネットマスク: 255.255.255.192

2. CIDR表記
IPアドレスの後ろにスラッシュ記号を書き、その後ろにネットワーク部のビット数を記述する

172.20.100.52 /26 

4-3. ネットワークアドレスの求め方

クラスフルアドレスの場合はクラスがわかればネットワークアドレスが簡単に特定できたが、サブネットマスクを用いるクラスレスアドレスの場合はそうはいかなくなる。

クラスレスアドレスのネットワークアドレスは、IPアドレスとサブネットマスクを2進数に変換し、AND演算 をすると導き出される。

例えば、以下のIPアドレスとサブネットマスクを設定された端末があったとして、この端末が所属するネットワークアドレスを求めたいとしよう。

IPアドレス:199.32.10.85
サブネットマスク:255.255.255.192

この場合、以下のような計算をして求める。
まずそれぞれを2進数に変換する。

IPアドレス:11000111 00100000 00001010 01010101
サブネットマスク:11111111 11111111 11111111 11000000

そしてこれらをAND演算する。

11000111 00100000 00001010 01010101
11111111 11111111 11111111 11000000
↓
11000111 00100000 00001010 01000000

これを10進数に変換する。

11000111.00100000.00001010.01000000
↓
199.32.10.64

上のような計算を経て、この端末が所属するネットワークアドレスは192.32.10.64/26ということが求められた。

ちなみに、クラスフルアドレスの場合は計算不要で簡単に求めることができる。
例えば、192.168.33.10というIPアドレスがあったとする。
192から始まるので、クラスCのIPアドレスということがわかり、ネットワーク部が24ビット分ということもわかる。ネットワークアドレスはホスト部のビットが全て0になるアドレスなので、192.168.33.0がネットワークアドレスになる。

4-4. 例:サブネットマスクでどの程度アドレスの無駄を省けるか

例として、500台のホストが接続できるネットワークを構築したいとする。
この際に、クラスフルアドレスでネットワーク構築をした場合とサブネットマスクを用いてネットワーク構築をした際に、どの程度アドレスの無駄に差が出るか計算してみる。

4-4-1. クラスフルアドレスの場合

まず、クラスCは1ネットワークにホストが254台しか繋ぐことができないので、クラスBを使うことになる。クラスBは1ネットワークに65534台のホストを繋ぐことができるので要件を満たせる。
この場合、使われないホスト数は65534-500で 65034 になる。

4-4-2. サブネットマスクを使う場合

サブネットマスクを使う場合、ネットワーク部とホスト部の区切りを自由に決めることができる。
クラスCのように8ビット分をホスト部として使った場合は254台なので、9ビットにしてみる。9ビットにすると510台(2の9乗 - 2)のホストを繋ぐことができるので要件を満たすことができる。
この場合、使われないホスト数は510-500で 10 になる。

少し極端な例だが、サブネットマスクを使った場合、クラスフルアドレスと比較して65034-10で 65024 ものホストアドレスの無駄を省くことができている。

4-5. サブネットマスクの効果を体感する

:exclamation: :exclamation: 20160207追記:この章(4-5)は誤りを含んでいる可能性があります。確認中...。 :exclamation: :exclamation:

ぱっと見(クラスフルアドレス的には)、同一ネットワークに属しているように見えるIPアドレスも実際は別ネットワークに属しているということがある。pingコマンドなどを実行すればわかるが、別ネットワークに属している場合は通信ができない。
※ 個人的な感想だが、この辺りの動きを体感できた時にサブネットマスクの理解が進んだように感じた。

4-5-1. 例: サブネットマスクの値が異なる

端末1と端末2があったとして、それぞれ以下のIPアドレスを持っていたとする。

端末1: 192.168.1.100/25
端末2: 192.168.1.200/24

結論から言うと、端末2➔端末1への通信は可能だが、端末1➔端末2の通信はできない状態にある。
それぞれのネットワークアドレスを2進数で表記すると以下のような違いが見て取れる。

それぞれのネットワークアドレス(2進数)
端末1: 11000000 10101000 00000001 0
端末2: 11000000 10101000 00000001

ホストに割り当てられるIPアドレスの範囲は、ネットワークアドレスとして使われていないビット部分になるので以下のようになる。

割り当て可能なIPアドレス
端末1が所属するネットワーク: 192.168.1.1 ~ 192.168.1.126
端末2が所属するネットワーク: 192.168.1.1 ~ 192.168.1.254

端末1が所属するネットワークで割り当て可能なIPアドレスは192.168.1.1 ~ 192.168.1.126なので、端末2の192.168.1.200というIPアドレスは端末1にとっては別のネットワークのIPアドレスに見えている。そのため、通信ができなくなっていた。

4-5-2. 例: サブネットマスクの値が同じ

端末1と端末2があったとして、それぞれ以下のIPアドレスを持っていたとする。

端末1: 192.168.1.5/28
端末2: 192.168.1.21/28

例1同様、この端末たちも別ネットワークに属しているので通信ができない状態にある。
2進数にしてみる。

それぞれのネットワークアドレス(2進数)
端末1: 11000000 10101000 00000001 0000
端末2: 11000000 10101000 00000001 0001

右端の数値が異なることがわかると思う。
例1同様、ホストに割り当てられるIPアドレスの範囲も計算してみる

割り当て可能なIPアドレス
端末1が所属するネットワーク: 192.168.1.1 ~ 192.168.1.14
端末2が所属するネットワーク: 192.168.1.17 ~ 192.168.1.30

端末1にとって、端末2のIPアドレスが別のネットワークのものである。同様に、端末2にとっても端末1のIPアドレスは別ネットワークのものになっている。そのため、双方からの通信ができなくなっていた。

4-5-3. つまり..

クラスフルアドレスのように、同一ネットワークにあるのかを見た目ですぐに判断できないことが多いので、2進数に変換して上のような計算を行う必要がある。
サブネットマスク計算(IPv4)/サブネット一覧(早見表)のような便利なWebツールもある。マジ便利。

5. グローバルアドレスとプライベートアドレス

IPアドレスにはグローバルアドレスとプライベートアドレスという区分けが存在する。
グローバルアドレスはインターネットに接続された機器に一意に割り当てられるIPアドレスのこと。
一方プライベートアドレスはインターネットに接続しない独立したネットワークにおいて、接続された機器に一意に割り当てられるIPアドレスのこと。
接続しているネットワークがインターネットなのか、ローカルネットワークなのかという点が異なる。

5-1. プライベートアドレスの範囲

プライベートアドレスは以下のように範囲が定められている。
以下の範囲に含まれるIPアドレスは全てプライベートアドレスで、この範囲外のIPアドレスはグローバルアドレスになる。

クラス 範囲 ネットワーク数
クラスA 10.0.0.0 ~ 10.255.255.255 (10.0.0.0/8) 1
クラスB 172.16.0.0 ~ 172.31.255.255 (172.16.0.0/12) 16
クラスC 192.168.0.0 ~ 192.168.255.255 (192.168.0.0/16) 256

■ 参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした