web-dev-qa-db-ja.com

サブネットマスクからIPの範囲を計算しています

たとえば、255.255.255.242のサブネットがあり、そのサブネット内に192.168.1.101という既知のIPがあるとします。

今私がIPの範囲を計算する方法はこれです:

サブネットマスクで、255ではない最初のオクテットを見つけます。私の例では、4番目のオクテットと242です。したがって、256を取り、242を引くと、14になります。これで、これらのネットワーク、192.168がわかります。 .1.xネットワーク、すべての範囲は14です。したがって、それらのリストを開始してください...

192.168.1.0
192.168.1.14
192.168.1.28
....42
....56
....70
....84
....98
....112

ここで停止できます。私のアドレス192.168.1.101は.98ネットワークに分類されます。 192.168.1.112が次のネットワークを開始することがわかっているため、.98には192.168.1.98から192.168.1.111までのすべてのIPアドレスが含まれます。

これが正しく、最も簡単なプロセスかどうかを確認したいと思います。

16
dig_123

ネットマスクは一連の1ビットです。ビットは0ギャップなしでシーケンシャルでなければなりません。 1ビットを使用するものはすべてネットワークの一部であり、残りのものはそのネットワーク内のホスト割り当てに有効です。 255.255.255.224には27の「1」ビットがあり、これは/ 27ネットワークであることを意味します。

この権利を計算するには、IPを数値表現に変換する必要があります。たとえば、255.255.255.224は11111111 11111111 11111111 11100000で、4294967264です。192.168.1.101は3232235877(11000000 10101000 00000001 01100101)です。

IPを取得し、ビット単位でネットマスクとANDすると、ネットワークアドレスがわかります。これは範囲の下限です。

11111111 11111111 11111111 11100000  (mask)
11000000 10101000 00000001 01100101  (ip)
-----------------------------------
11000000 10101000 00000001 01100000  = 192.168.1.96  (network address)

マスクの補数(ビットごとのNOT)は、範囲のサイズを示します。

00000000 00000000 00000000 00011111  = 31

したがって、そのIPの範囲は192.168.1.96〜192.168.1.127です。 (127 = 96 + 31)

37
Joe

JoeとDig_123の両方に感謝しますが、Joeの答えは、/ 27魔女の代わりに/ 28サブネットを使用して明確にでき、彼の例に近づき、92-112の間に落ちました。

ジョーは、私があなたの主張を正しく理解していれば、サブネット化されたオクテットを取ると言っています。増分ビット値を決定し、それをSNオクテットのサブネット値に追加します。これにより範囲が与えられ、ネットワーク、最初のホスト、最後のホスト、およびブロードキャストアドレスの値が提供されます。あれは正しいですか?つまり、私の例では、4番目のオクテットは240で、増分は16になります。4番目のオクテットの値は96であるため、16ビット増分の計算範囲内にあり、実際には96と112の間にあります。この例のネットワークアドレスは次のように結論付けることができる16ビット範囲の1つ:

0-15
15-31
32-47
48-63
64-79
80-95
96-111
112-127
128
NW 192.168.1.96 /28
1st 192.168.1.97 /28
Last 192.168.1.110 /28
Bcast 192.168.1.111 /28
0
Rhys

ジョーの答えに何かを追加するには:よりプログラムで操作を実行する場合(ビット演算子の知識があると想定)。

最後の数値のみが変更されることはすでにご存じでしょうが、この方法は、後で示すように、他のケースでは少し異なる方法で使用できます。

_Number from mask: 224
Number from IP:   101
_

例: pythonまたはお気に入りの電卓プログラム:

  • _Start address byte: 224 & 101 = 96_
  • End address byte: (~224 & 255) | 96 = 127

_(~224 & 255)_は、244に1でなかったすべてのビットを1に設定するだけです(つまり、最後の5ビット)。結果を_96_でORすると、最初のアドレスから最初の3ビットがコピーされます。

したがって、結果は期待どおりです:192.168.1 .96-192.168.1 .127


マスクが最後の番号の前で終了する場合、非常によく似た手順があります。例を見てみましょう:

255 .224。0.0をマスクとして使用し、同じIPアドレス(192 .168。1.101)を使用します。

繰り返しますが、処理する数は1つだけです。これは2番目の位置にある168です。

  • _Start address byte: 224 & 168 = 160_
  • End address byte: (~224 & 255) | 160 = 191

これで、左側の数字(最初の位置)は同じまま(192)となり、右側の残りの数字は0〜255の範囲になります(ユーザーの質問に応じて、1〜254になる場合もあります)。

したがって、ソリューションは次のようになります:192 .16。0.0-192 .191。255.255

0
jp48