IPアドレスとサブネットの計算
192.0.2.0/24 のほか、192.0.2.10 255.255.255.0 のように空白で区切った書き方も読みます。
- ネットワークアドレス
- 192.0.2.0このまとまり自体の名前
- ブロードキャストアドレス
- 192.0.2.255この線につながっている全員あて
- 使えるアドレスの範囲
- 192.0.2.1 〜 192.0.2.254機器に付けられるもの
- 使えるアドレスの数
- 254全部の数から2つ引いた数
- 全部のアドレスの数
- 2562の8乗
- サブネットマスク
- 255.255.255.010進の書き方
- プレフィックス長
- /24CIDR の書き方
- ワイルドカードマスク
- 0.0.0.255マスクの 0 と 1 を入れ替えたもの
- 入れたアドレスの役目
- ネットワークアドレスそのものです。機器には付けられません。
- 特別な決まりのあるアドレスか
- 文書用 TEST-NET-1(このページの例に使っています)192.0.2.0/24・RFC 5737
- 昔の「クラス」(いまの決まりではありません)
- クラスC昔は先頭24ビットがネットワークだった。1993年からの CIDR に置き換えられた考え方なので、 長さは書いてあるとおりに読みます
アドレスの範囲を CIDR に直す
「192.0.2.5 から 192.0.2.10 まで」のような範囲は、ふつう1つの CIDR には収まりません。 いくつに分かれるか、分かれたものを全部出します。
「〜」でも「-」でも「から」でも区切れます。192.0.2.5-192.0.2.10
192.0.2.5 〜 192.0.2.10 は 4個の CIDR に分かれます(全部で 6 個のアドレス)。
| CIDR | その範囲 | 個数 |
|---|---|---|
| 192.0.2.5/32 | 192.0.2.5 | 1 |
| 192.0.2.6/31 | 192.0.2.6 〜 192.0.2.7 | 2 |
| 192.0.2.8/31 | 192.0.2.8 〜 192.0.2.9 | 2 |
| 192.0.2.10/32 | 192.0.2.10 | 1 |
やってみる
1問目 / 全6問
よくある質問
「使えるアドレスの数」が全体より2つ少ないのはなぜですか?
いちばん先頭のネットワークアドレスと、いちばん最後のブロードキャストアドレスの2つが取られているからです。ネットワークアドレスは「このまとまり自体」を指す名前で、ブロードキャストアドレスは「この線につながっている全員あて」を意味します。RFC 1122 は、ホストの部分がすべて 0 やすべて 1 になるアドレスを機器に付けてはいけないと定めています。だから 192.0.2.0/24 なら 256 − 2 = 254 個です。
/31 だと使えるアドレスが0個になってしまいます。使えないのですか?
使えます。2個です。RFC 3021(2000年12月)が、ルータどうしを1本の線でつなぐ場所に限って31ビットのマスクを使ってよいと決めました。この2つのアドレスは「ホストのアドレスとして解釈しなければならない」と書かれています。線の両端は2つしかないのに、ネットワークとブロードキャストのぶんまで含めて4つ使うのは無駄だ、というのが理由です。500本の線がある網なら1000個のアドレスが浮きます。
/32 は何に使うのですか?
1台だけを名指しするときに使います。ホストのビットが0個なので、まとまりの中身はそのアドレス1個だけです。経路の書き方や、通信を許す相手を1台に限る設定で出てきます。「全体 − 2」の式を当てはめると −1 になってしまうので、この式は使いません。
255.255.0.255 のようなサブネットマスクは使えますか?
使えません。サブネットマスクは「上の位から 1 が続き、そのあと 0 が続く」形しか許されません。RFC 1812 は、正しいマスクを「上位に続く1の並び・下位に続く0の並び・その間に何も無いもの」と書いています。飛び飛びのマスクを受け取ると、ネットワークアドレスも使えるアドレスの範囲も違う答えになるので、この計算機は理由を出して断ります。
ワイルドカードマスクとサブネットマスクは何が違うのですか?
0 と 1 の意味が逆です。Cisco の資料は、ワイルドカードマスクの 0 を「このビットはぴったり一致すること」、1 を「このビットは見なくてよい」と説明しています。/24 のサブネットマスク 255.255.255.0 に対して、ワイルドカードマスクは 0.0.0.255 です。255.255.255.255 から引く、と覚えても同じ結果になります。アクセスリストや OSPF の設定ではこちらの書き方が出てきます。
アドレスの範囲を1つの CIDR で書けないことがあるのはなぜですか?
CIDR のまとまりは「2の何乗個」で、しかも切りのよい番地から始まらなければならないからです。192.0.2.5 から 192.0.2.10 までは、192.0.2.5/32・192.0.2.6/31・192.0.2.8/31・192.0.2.10/32 の4つに分かれます。無理に1つにまとめると、頼んでいないアドレスまで含んだ別の範囲になってしまいます。
192.0.2.0/24 のような書き方から、ネットワークアドレス・ブロードキャストアドレス・使えるアドレスの範囲・ホスト数・サブネットマスク・ワイルドカードマスクを一度に出します。 入れたアドレスはこの画面の中だけで計算していて、どこにも送りません。
使えるアドレスが2つ少ないのは、名前と呼び出しに取られているからです
192.0.2.0/24 には全部で256個のアドレスがありますが、 機器に付けられるのは254個です。減った2つには、それぞれ役目があります。
- いちばん先頭(192.0.2.0)はネットワークアドレス。そのまとまり自体を指す名前です。人でいえば「一丁目」にあたるので、 そこに住むことはできません。
- いちばん最後(192.0.2.255)はブロードキャストアドレス。この線につながっている全員あてという意味を持ちます。 1台に届けるための番地ではないので、こちらも機器には付けられません。
決まりとして書かれているのはRFC 1122 §3.2.1.3で、 ホストの部分がすべて 0のものとすべて 1のものは 特別な意味を持つアドレスなので、ふつうのあて先として使ってはいけない、とされています。 これが「2を引く」の中身です。
/31 は、線を1本つなぐのに4個も使うのがもったいなくて作られた例外です
ここがこのページでいちばん面白いところです。「全体 − 2」の式は、/31 では成り立ちません。/31 のアドレスは2個しかないので、式に当てはめると 2 − 2 =0個になってしまいます。
ルータとルータを1本の線で直接つなぐとき、その線に必要なアドレスは両端の2個だけです。ところが昔は、そこにネットワークアドレスと ブロードキャストアドレスのぶんも足して4個を割り当てていました。半分が使われないまま消えていくわけです。
そこで2000年12月、RFC 3021(新しいタブで開きます)が「点と点を結ぶ線に限って31ビットのマスクを使ってよい」と決めました。 この場合の2つのアドレスは「ホストのアドレスとして解釈しなければならない」(MUST be interpreted as host addresses)と書かれています。 だから答えは0個ではなく2個です。
効きめは、RFC 自身が数えています。1本の線あたり4個が2個になるので、 点と点を結ぶ線が500本ある網では1000個が浮きます。 RFC はこれを「クラスCのアドレス空間4つぶん」と書いています。
代わりに、その線にはブロードキャストアドレスが無くなります。 RFC はこれを困ったこととしてだけでなく、ある種の攻撃に少し強くなるという良い副作用としても挙げています ── ブロードキャストあてに大量の問い合わせを投げて返事を集中させる、 という古い手口が使えなくなるためです。
ちなみに/32 はアドレス1個です。ホストのビットが0個なので、 まとまりの中身はそのアドレスだけになります。ここでも式は成り立たず、 当てはめると −1 になります。多くの計算ツールが /31 で 0、/32 で −1 や空欄を出すのは、式をそのまま当てはめているからです。
サブネットマスクは「1が続いたあと0が続く」形しか使えません
255.255.0.255 は、一見それらしく見えますがサブネットマスクではありません。 マスクは2進で書くと 11111111 11111111 00000000 11111111 となり、 0 の並びのあとにまた 1 が出てきます。
RFC 1812(新しいタブで開きます) §2.2.5.2 は、正しいマスクを「上位に続く1の並び・下位に続く0の並び・その間に何も無いもの」と書いています。この形だからこそ「先頭から何ビットか」という1つの数(プレフィックス長)で言い換えられるわけです。
飛び飛びのマスクを受け取ってしまうと、ネットワークアドレスも、使えるアドレスの範囲も、 すべて違う答えになります。この計算機は、断る理由を画面に出します。黙って「たぶん /24 のことだろう」と読み替えると、間違いに気づけないからです。
範囲を CIDR に直すと、たいてい1つでは収まりません
「192.0.2.5 から 192.0.2.10 まで」を1つの CIDR で書きたくなりますが、書けません。CIDR のまとまりはRFC 4632(新しいタブで開きます) が定めていて、2の何乗個で、しかも切りのよい番地から始まる必要があります。
この範囲は、次の4つに分かれます。
192.0.2.5/32… 5 は奇数なので、1個ずつしか取れません192.0.2.6/31… 6 と 7 の2個。6 は偶数なので2個まとめられます192.0.2.8/31… 8 と 9 の2個。8 は4の倍数ですが、 4個取ると 11 まで含んでしまうので2個で止めます192.0.2.10/32… 最後の1個
多くのツールは、ここを「いちばん近い1個」に黙って丸めます。 たとえば 192.0.2.0/28 と答えると、頼んでいない 192.0.2.0〜192.0.2.4 と 192.0.2.11〜192.0.2.15 まで含んだ別の範囲になります。 許可する相手の一覧としてそれを書き写すと、11台ぶん余計に開くことになります。 だからこのページは分かれたものを全部出します。
「クラスA・B・C」は、いまの決まりではありません
1981年の RFC 791 は、アドレスの先頭を見るだけでネットワークの長さが決まる仕組みを定めていました。 先頭が 0〜127 ならクラスA(先頭8ビット)、128〜191 ならクラスB(16ビット)、192〜223 ならクラスC(24ビット)です。
この仕組みは1993年の CIDR で置き換えられました。 いまの規定である RFC 4632(2006年8月)は、クラス A/B/C の割り当て方式を「クラスの無い(classless)階層的なブロック」に置き換えたと書いています。
つまり192.0.2.0/25 と書いてあれば、それは /25 です。「先頭が192だからクラスCで /24 のはず」と考えると答えを間違えます。 このページがクラスを出しているのは、昔の資料や試験問題を読むときの手がかりとしてだけです。
プレフィックス長の早見表(/0 〜 /32)
プレフィックス長・サブネットマスク・ワイルドカードマスクの対応です。下の2行(/31 と /32)だけ、引き算の式が当てはまりません。
| 長さ | サブネットマスク | ワイルドカードマスク | 全部 | 使える |
|---|---|---|---|---|
| /0 | 0.0.0.0 | 255.255.255.255 | 4,294,967,296 | 4,294,967,294 |
| /1 | 128.0.0.0 | 127.255.255.255 | 2,147,483,648 | 2,147,483,646 |
| /2 | 192.0.0.0 | 63.255.255.255 | 1,073,741,824 | 1,073,741,822 |
| /3 | 224.0.0.0 | 31.255.255.255 | 536,870,912 | 536,870,910 |
| /4 | 240.0.0.0 | 15.255.255.255 | 268,435,456 | 268,435,454 |
| /5 | 248.0.0.0 | 7.255.255.255 | 134,217,728 | 134,217,726 |
| /6 | 252.0.0.0 | 3.255.255.255 | 67,108,864 | 67,108,862 |
| /7 | 254.0.0.0 | 1.255.255.255 | 33,554,432 | 33,554,430 |
| /8 | 255.0.0.0 | 0.255.255.255 | 16,777,216 | 16,777,214 |
| /9 | 255.128.0.0 | 0.127.255.255 | 8,388,608 | 8,388,606 |
| /10 | 255.192.0.0 | 0.63.255.255 | 4,194,304 | 4,194,302 |
| /11 | 255.224.0.0 | 0.31.255.255 | 2,097,152 | 2,097,150 |
| /12 | 255.240.0.0 | 0.15.255.255 | 1,048,576 | 1,048,574 |
| /13 | 255.248.0.0 | 0.7.255.255 | 524,288 | 524,286 |
| /14 | 255.252.0.0 | 0.3.255.255 | 262,144 | 262,142 |
| /15 | 255.254.0.0 | 0.1.255.255 | 131,072 | 131,070 |
| /16 | 255.255.0.0 | 0.0.255.255 | 65,536 | 65,534 |
| /17 | 255.255.128.0 | 0.0.127.255 | 32,768 | 32,766 |
| /18 | 255.255.192.0 | 0.0.63.255 | 16,384 | 16,382 |
| /19 | 255.255.224.0 | 0.0.31.255 | 8,192 | 8,190 |
| /20 | 255.255.240.0 | 0.0.15.255 | 4,096 | 4,094 |
| /21 | 255.255.248.0 | 0.0.7.255 | 2,048 | 2,046 |
| /22 | 255.255.252.0 | 0.0.3.255 | 1,024 | 1,022 |
| /23 | 255.255.254.0 | 0.0.1.255 | 512 | 510 |
| /24 | 255.255.255.0 | 0.0.0.255 | 256 | 254 |
| /25 | 255.255.255.128 | 0.0.0.127 | 128 | 126 |
| /26 | 255.255.255.192 | 0.0.0.63 | 64 | 62 |
| /27 | 255.255.255.224 | 0.0.0.31 | 32 | 30 |
| /28 | 255.255.255.240 | 0.0.0.15 | 16 | 14 |
| /29 | 255.255.255.248 | 0.0.0.7 | 8 | 6 |
| /30 | 255.255.255.252 | 0.0.0.3 | 4 | 2 |
| /31RFC 3021 の例外 | 255.255.255.254 | 0.0.0.1 | 2 | 2 |
| /32アドレス1個 | 255.255.255.255 | 0.0.0.0 | 1 | 1 |
特別な使い道が決まっているアドレス
次のアドレスには、あらかじめ使い道が決められています。 一覧の出どころは IANA のIPv4 Special-Purpose Address Registry(新しいタブで開きます)で、マルチキャストだけは別の登録簿なので RFC 5771 から取っています。
このページの例に 192.0.2.0 ばかり出てくるのは、RFC 5737 が文書用として取ってあるアドレスだからです。 説明のために実在のアドレスを書くと、それが誰かの機器を指してしまうことがあります。
| アドレス | 使い道 | 出どころ |
|---|---|---|
| 0.0.0.0/8 | 「このネットワーク」を指す予約 | RFC 791 §3.2 |
| 10.0.0.0/8 | プライベートアドレス(家や社内で自由に使える) | RFC 1918 |
| 100.64.0.0/10 | 共用アドレス(通信会社が加入者との間で使う) | RFC 6598 |
| 127.0.0.0/8 | ループバック(自分自身を指す) | RFC 1122 §3.2.1.3 |
| 169.254.0.0/16 | リンクローカル(DHCP から返事が無いとき自分で付ける) | RFC 3927 |
| 172.16.0.0/12 | プライベートアドレス | RFC 1918 |
| 192.0.2.0/24 | 文書用 TEST-NET-1(このページの例に使っています) | RFC 5737 |
| 192.168.0.0/16 | プライベートアドレス | RFC 1918 |
| 198.18.0.0/15 | 機器の性能をはかる試験用 | RFC 2544 |
| 198.51.100.0/24 | 文書用 TEST-NET-2 | RFC 5737 |
| 203.0.113.0/24 | 文書用 TEST-NET-3 | RFC 5737 |
| 224.0.0.0/4 | マルチキャスト(決まった集まりへ同時に送る) | RFC 5771 |
| 240.0.0.0/4 | 予約(将来のために取ってある) | RFC 1112 §4 |
| 255.255.255.255/32 | 限定ブロードキャスト(同じ線の全員あて) | RFC 919 §7 |
数値と決まりの出どころ: 31ビットのマスクはRFC 3021(2000年12月・Standards Track)(新しいタブで開きます)、CIDR そのものは RFC 4632(2006年8月)、ホスト部がすべて 0 とすべて 1 のアドレスは RFC 1122 §3.2.1.3、マスクが連続していなければならないことは RFC 1812 §2.2.5.2、 文書用アドレスは RFC 5737、プライベートアドレスは RFC 1918、 ワイルドカードマスクの 0 と 1 の意味は Cisco のConfigure IP Access Lists(新しいタブで開きます)から取っています。ここでは計算しかしていません ── 入れたアドレスの持ち主や場所を調べる機能は、外への通信が増えるので作っていません。