あなたは物事を複雑にしすぎています。
IPv4 アドレス (およびサブネット マスク) は、単に人間が読みやすくするための手段として、ドット 10 進表記で表示されています。コンピューター内では、それらは単に 4 バイトの連続したメモリです (多くの場合、たとえば 内に保存されます)。long int
コンピュータに保存: 11000000 10101000 00100001 00010110
人間で表示:192.168.33.22
コンピュータに保存: 11111111 11111111 11100000 00000000
人間の表示:255.255.224.0
1
マスク内の s は、ネットワーク番号を識別するビットを示します。したがって、ネットワーク番号を抽出するには、ビットごとの AND 演算を使用するだけで済みます。
アドレス 11000000 10101000 00100001 00010110 192.168.33.22
マスク 11111111 11111111 11100000 00000000 255.255.224.0
(と) - - - - - - - - - - - - - - - - - - - - - - - - -
ネットワーク 11000000 10101000 00100000 00000000 192.168.32.0
CIDR (アドレスのクラスがネットワーク/ホスト境界を示す以前)の導入以来、ホストは通常、自身のネットワークのマスクしか認識していないため、任意のアドレス (データグラムの宛先のアドレスなど) をネットワークに分割することはできません。およびホスト番号。
それで、ポイントは何ですか?送信元ホストは、送信先のアドレスと(送信元の)自身のネットワーク マスクのビット単位の AND を取ることができます。その操作の結果は必ずしも意味のあるネットワーク番号を生成するわけではありませんが、同じネットワーク上にある場合にのみ、ソースのネットワーク番号と一致します。
送信元のネットワーク番号を識別しないアドレス ビット (0
ネットワーク マスクの s で明らかに示されている) は、そのホスト番号を形成していると見なすことができます。自分自身のネットワーク上のホストと通信する場合でも、完全なアドレスが識別に使用され、ホスト番号だけが使用されることはありません。
とはいえ、純粋に学術的な演習として、マスクの補数を使用してビットごとの AND を実行することはもちろん可能です。
アドレス 11000000 10101000 00100001 00010110 192.168.33.22
〜マスク 00000000 00000000 00011111 11111111 0.0.31.255
(と) - - - - - - - - - - - - - - - - - - - - - - - - -
ホスト 00000000 00000000 00000001 00010110 0.0.1.22
したがって、質問に対処するには:
ホスト ID は公開部分ですか? ネットワーク ID は、ローカル ネットワーク内でコンピュータを特定するためのプライベートな部分ですか?
アドレス全体が「パブリック」です。「プライベート」な部分はありません。ARP (完全なアドレスを使用する) などのルックアップ プロトコルを使用して、ローカル ネットワーク内のコンピューターを検索します。
サブネット マスクが 255 より小さい値の場合、IP アドレスの対応するオクテットをバイナリに分解して、数値のどの部分がホスト ID で、どの部分がネットワーク ID であるかを判断する必要があります。結果の 2 進数は常に 2 つに分割されますか?
「2つに分割」されるものはありません。そのように見えるのは、ドット 10 進表記が IPv4 アドレスを人間にとって読みやすくすることを目的としていたためです (その決定は CIDR の発明前に行われましたが、ネットワーク番号は常にバイト境界に合わせられていたため、明らかな「分割」が発生することはありませんでした)。 " 10 進数の)。