ANDによるIPサブネットマスキング
ルーターがビットANDを使用してIPアドレスにサブネットマスクを適用し、ネットワークアドレスとルーティング判断を行う方法を学びます。
Practical Applications
詳細な説明
ビットANDによるサブネットマスキング
ルーターはIPアドレスとサブネットマスクをANDすることで、IPアドレスが属するネットワークを判断します。これはビットANDの最も重要な実世界応用の1つです。
サブネットマスクの仕組み
サブネットマスクは連続する1ビット(ネットワーク部分)に連続する0ビット(ホスト部分)が続きます:
255.255.255.0 = 11111111.11111111.11111111.00000000 (/24)
255.255.240.0 = 11111111.11111111.11110000.00000000 (/20)
255.255.255.128 = 11111111.11111111.11111111.10000000 (/25)
ネットワークアドレスの計算
IPアドレスとマスクをANDしてネットワークアドレスを取得:
IP: 192.168.1.100 = 11000000.10101000.00000001.01100100
Mask: 255.255.255.0 = 11111111.11111111.11111111.00000000
──────────────────────────────────────────────────────────────
Network: 192.168.1.0 = 11000000.10101000.00000001.00000000
より興味深い例(/20マスク)
IP: 10.0.47.200 = 00001010.00000000.00101111.11001000
Mask: 255.255.240.0 = 11111111.11111111.11110000.00000000
──────────────────────────────────────────────────────────────
Network: 10.0.32.0 = 00001010.00000000.00100000.00000000
AND演算がホスト部分(最後の12ビット)をゼロにし、ネットワークプレフィックスだけを残していることに注目してください。
同一ネットワークチェック
2つのホストは、ANDした結果が一致する場合に同じネットワーク上にあります:
function sameNetwork(ip1, ip2, mask) {
return (ip1 & mask) === (ip2 & mask);
}
ブロードキャストアドレス
ブロードキャストアドレスはすべてのホストビットが1に設定されています。ORで計算:
const broadcast = networkAddress | ~subnetMask;
// /24の場合: 192.168.1.0 | 0.0.0.255 = 192.168.1.255
ユースケース
インターネット上のすべてのルーターは転送するすべてのパケットに対してサブネットマスキングを実行します。パケットが到着すると、ルーターは宛先IPを各ルーティングテーブルエントリのマスクとANDして最長プレフィックス一致を見つけます。高性能ルーターはTCAM(三値連想メモリ)でこれをハードウェアに実装し、1クロックサイクルで数千のANDと比較操作を同時に実行します。