綾小路龍之介の素人思考

[network] IPアドレス、サブネットマスク、ネットワークアドレス、ブロードキャストアドレス

あんまり信用しちゃダメよ。例えば、ある NIC に割り当てられた IP アドレスが 192.168.1.1 で、サブネットマスクが 255.255.255.0 だとする。これらの情報からネットワークアドレスとブロードキャストアドレスが決まる。まずはそれぞれ 2 進数で表す。

(192.168.001.001)_{10} = (11000000.10101000.00000001.00000001)_{2}
(255.255.255.000)_{10} = (11111111.11111111.11111111.00000000)_{2}

で、各ビットごとの AND をとる。AND の真偽値表は下で定義。

AND の真偽値表
A01
000
101

つまり、両方 1 の場合を除いてそれ以外の場合は全部 0 ということ。話を戻して、AND をとる。

(192.168.001.000)_{10} = (11000000.10101000.00000001.00000000)_{2}

これがネットワークアドレスと定義されているものだ。同じネットワークアドレスをもつ NIC は同じネットワークに所属している。では、上であげたサブネットマスクだと、いくつのアドレスが同じネットワークアドレスを持つだろうか。AAA.BBB.CCC.0 から始まって、1 ビットづつ増やしていけば、AAA.BBB.CCC.1 も AAA.BBB.CCC.2 も同じネットワークアドレス AAA.BBB.CCC.0 を持つことが確かめられる。

(255.255.255.000)_{10} = (11111111.11111111.11111111.00000000)_{2}
------------------------------------------------------------------
(AAA.BBB.CCC.000)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000000)_{2}
(AAA.BBB.CCC.001)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000001)_{2}
(AAA.BBB.CCC.002)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000010)_{2}
(AAA.BBB.CCC.003)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000011)_{2}
(AAA.BBB.CCC.004)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000100)_{2}
...
(AAA.BBB.CCC.254)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.11111110)_{2}
(AAA.BBB.CCC.255)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.11111111)_{2}
------------------------------------------------------------------
(AAA.BBB.CCC.000)_{10} = (aaaaaaaa.bbbbbbbb.cccccccc.00000000)_{2}

つまり、ビットで表したサブネットマスクにおいて 1 になっている桁の値が 2 つのアドレス間で全て同じだと、2 つのアドレスは同じネットワークアドレスを持つ、ということだ。上の例では、どの 2 つのアドレスを考えても、サブネットマスクで (11111111.11111111.11111111)_{2}となる桁は 2 つのアドレスで同じ値 (aaaaaaaa.bbbbbbbb.cccccccc)_{2}を持っている。すると、(AAA.BBB.CCC.001)_{10}から (AAA.BBB.CCC.255)_{10}まではサブネットマスク (255.255.255.000)_{10}との AND 演算で (AAA.BBB.CCC.000)_{10}になる訳だ。このようなアドレスは 256 個ある。

さて、サブネットマスクを変えれば同じネットワークアドレスをもつアドレスの数を変えられる。サブネットマスクの定義的に、桁の高い側から 1 が続き、初めて 0 が表れたらそれ以降は全部 0 なので、(11111111.11111111.11111111.10000000)_{2}とか、(11111111.11111111.11111111.11110000)_{2}は OK だが、(11111111.11111111.11111111.01001000)_{2}とか (11111111.11111111.11111111.10001010)_{2}は NG である。許されているサブネットマスクとこのときにもてるアドレスの数を考えると下のようになる。

アドレス数とマスク
10進数2進数アドレス数
255.255.255.00011111111.11111111.11111111.00000000256
255.255.255.12811111111.11111111.11111111.10000000128
255.255.255.19211111111.11111111.11111111.1100000064
255.255.255.22411111111.11111111.11111111.1110000032
255.255.255.24011111111.11111111.11111111.1111000016
255.255.255.24811111111.11111111.11111111.111110008
255.255.255.25211111111.11111111.11111111.111111004
255.255.255.25411111111.11111111.11111111.111111102

当然ながら、10 進数で表したアドレスのピリオドで区切られた最後とアドレス数を足すと 256 になっている。このあたりは RFC1878 に詳しい。

中途半端だけど今日はここまで

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2008-10-15T13:11:15+09:00
  2. Modified: 2008-10-15T07:14:43+09:00
  3. Generated: 2017-08-27T23:09:17+09:00