(192.168.001.001)_{10} = (11000000.10101000.00000001.00000001)_{2} (255.255.255.000)_{10} = (11111111.11111111.11111111.00000000)_{2}
で、各ビットごとの AND をとる。AND の真偽値表は下で定義。
A | 0 | 1 |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
つまり、両方 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.000 | 11111111.11111111.11111111.00000000 | 256 |
255.255.255.128 | 11111111.11111111.11111111.10000000 | 128 |
255.255.255.192 | 11111111.11111111.11111111.11000000 | 64 |
255.255.255.224 | 11111111.11111111.11111111.11100000 | 32 |
255.255.255.240 | 11111111.11111111.11111111.11110000 | 16 |
255.255.255.248 | 11111111.11111111.11111111.11111000 | 8 |
255.255.255.252 | 11111111.11111111.11111111.11111100 | 4 |
255.255.255.254 | 11111111.11111111.11111111.11111110 | 2 |
当然ながら、10 進数で表したアドレスのピリオドで区切られた最後とアドレス数を足すと 256 になっている。このあたりは RFC1878 に詳しい。
中途半端だけど今日はここまで