IPアドレス

更新日:むかし

Linux Top



IPアドレス、ネットワーク部分、ホスト部分、CIDR(Classless Inter-domain Routing)、などなど理解に迷うことがあるので忘れないうちに書き留めておこう。IPv4を例にする。調べた結果を記しているだけで内容について責任は負えない。


IPアドレスとは

簡単に言えば、コンピューターの住所だ。Internetに接続するにはLanCardが必要である。最近では、マザーボードに組み込まれているものがほとんどで、インターネットを利用するときにケーブルをさし込むところと言えば理解できるだろう。その差し込み口からつながっている一連(IPアドレス関連)の部分をランカードと呼ぶ。
そのランカードの住所にあたるものがIPアドレスである。その記述方法は、札幌市東区などと書いてもコンピュータには難し過ぎる。そこで、コンピューターに理解できるように、

01111111 | 00000000 | 00000000 | 00000001

と、書けばコンピューターはすばやく理解するのである。でも、人間が見てもさっぱり分からない。上の住所と同じ住所を異った表記方法で表わすと以下のようになる。

127.0.0.1

これなら多少理解しやすくなってきた。これらが正しくインターネット世界の住所である。ちなみに、11111111 は256と言うことになり、コンピューターは0から始まるので

255.255.255.255

が、最大値になりこれ以上の数値はない。


ネットワーク部分、ホスト部分

192.168.1.1

この数字の列は先程説明したので問題ないと思う。住所である。
この住所を割当してくれる機関があるのだが、住所を割り当ててもらうのに一つ毎割り当ててもらうのは大変である。あるプロバイダがわが社は256の住所が欲しいと申請すれば上位三つの数字を頂くだけで済む。ここで言えば、192.168.1まででよいのだ。そして、自社で最後尾の数字(0-255)を勝手に使うことが出来る。これをホストの部分という。また、192.168.1の数字の部分をネットワークの部分という。この表記方法は以下のようになる。

192.168.1.50/255.255.255.0
ネットワークの部分(192.168.1) ホストの部分(50) / ネットマスク(255.255.255.0)

192.168.1.50は個別に割り当てられたLanCard(コンピューター)の住所である。そして、このアドレスは192.168.1というネットワークに属しているということも判明する。
では、192.168をネットワーク部分にもつ組織はどれほどの住所を持てるか? ホストの部分が256x256=65536になる。これでは多過ぎるし、先ほどの256では少な過ぎる、という欲望または要求が出てくる。それを解消すべき考えられたのがCIDRである。以前はクラスとしてAクラス、Bクラス、Cクラスとして定義していたが、アドレスの枯渇が表面化し、考えられたのがこの方法である。そして、IPv6などへの移行が考えられている。



CIDRとネットレンジ(Net Range)

192.168.1.0/24

これがCIDR方式による表記方法だ。24がネットマスクを表わす。 IPアドレスの範囲は192.168.1.0-192.168.1.255ということになる。それでは、

192.168.8.0/23

を考えてみる。
11000000 | 10101000 | 00001000 | 00000000 (192.168.8.0)
11000000 | 10101000 | 00001001 | 11111111 (192.168.9.255)

となり、ネットワークの部分(赤字)とホストの部分(黒字)を見るとネットワークの部分が一致しており、かつ、ホストの部分が最小値から最大値までカバーされている。
Net Rangeは192.168.8.0-192.168.9.255の範囲だ。

では次に
192.168.11.0/23 を考えてみよう。
Net Rangeは192.168.11.0-192.168.12.255になりそうなのだが、
11000000 | 10101000 | 00001011 | 00000000 (192.168.11.0)
11000000 | 10101000 | 00001100 | 00000000 (192.168.12.0)
のようにネットワーク部分(赤字)が異っている。
これは任意の範囲の数値をCIDRで表記出来ないことを意味している。連続したベースアドレスをグループ化できるかどうかは、ベースアドレスの数値X(ここでは:2)は2の累乗でなければならないし、ネットワーク番号を含む最期の8ビットデータ(ここでは:11)はXで均等に分割されなければならない、このへんが理解に苦しむところだ。




検証

192.168.8.0/22について調べる
11000000 | 10101000 | 00000111 | 00000000 (192.168.7.0) <--ネット部分が範囲外、マスクアウトされている。
11000000 | 10101000 | 00001000 | 00000000 (192.168.8.0)
11000000 | 10101000 | 00001001 | 00000000 (192.168.9.0)
11000000 | 10101000 | 00001010 | 00000000 (192.168.10.0)
11000000 | 10101000 | 00001011 | 11111111 (192.168.11.255)
11000000 | 10101000 | 00001100 | 00000000 (192.168.12.0) <--ネット部分が範囲外、マスクアウトされている。
よってNet Rangeは192.168.8.0-192.168.11.255となる。


192.168.160.0/21はどうなる
11000000 | 10101000 | 10010111 | 11111111 (192.168.159.255) <--ネット部分が範囲外、マスクアウトされている。
11000000 | 10101000 | 10100000 | 00000000 (192.168.160.0)
11000000 | 10101000 | 10100001 | 00000000 (192.168.161.0)
11000000 | 10101000 | 10100010 | 00000000 (192.168.162.0)
11000000 | 10101000 | 10100011 | 00000000 (192.168.163.0)
11000000 | 10101000 | 10100100 | 00000000 (192.168.164.0)
11000000 | 10101000 | 10100101 | 00000000 (192.168.165.0)
11000000 | 10101000 | 10100110 | 00000000 (192.168.166.0)
11000000 | 10101000 | 10100111 | 11111111 (192.168.167.255)
11000000 | 10101000 | 10101000 | 00000000 (192.168.168.0)<--ネット部分が範囲外、マスクアウトされている。
これからも判断つくようにNet Rangeは192.168.160.0-192.168.167.255となる。ベースアドレス8は2^3、ネットワーク番号を含む最期の8ビットデータ160は160/8=20で均等に分割される。


192.168.8.0/21はどうなる
11000000 | 10101000 | 00001000 | 00000000 (192.168.8.0)
11000000 | 10101000 | 00001001 | 00000000 (192.168.9.0)
11000000 | 10101000 | 00001010 | 00000000 (192.168.10.0)
11000000 | 10101000 | 00001011 | 00000000 (192.168.11.0)
11000000 | 10101000 | 00001100 | 00000000 (192.168.12.0)
11000000 | 10101000 | 00001101 | 00000000 (192.168.13.0)
11000000 | 10101000 | 00001110 | 00000000 (192.168.14.0)
11000000 | 10101000 | 00001111 | 11111111 (192.168.15.255)
8っの連続したベースアドレスを結合するからX=8になり、8=2^3、ベースアドレスの最後の8ビットは8で8/8=1となり均等に8分割される。



でも、CIDRをネットレンジに変更する公式のようなものはないのだろうか、頭が混乱しそうである。
ネット部分を一定にし、残りのホスト部分をすべて0にし10進数を求め、また、残りのホスト部分をすべて1にし10進数を求めればネットレンジに変換できることは理解できたが。





Top Page(LINUX導入日記)へ