IPv4アドレスは32ビット幅であるため、アドレス空間のサイズは2 32、つまり4,294,967,296です。ただし、これは理論上の上限にすぎません。これは、実際に公衆インターネットで使用される可能性があるすべてのアドレスを正確に表したものではありません。
この課題では、すべてのアドレス指定がクラスフルであると想定されています。実際には、アドレス空間のクラス分けはCIDR(Classless Inter-Domain Routing and VLSM(Variable Length Subnet Masking))に取って代わられましたが、これはこの課題では無視されます。
クラスフルアドレススキームによれば、3つのクラスがあります。
- クラスA -
0.0.0.0
へ127.255.255.255
と/8
ネットマスク長 - クラスB -
128.0.0.0
へ191.255.255.255
と/16
ネットマスク長 - クラスC -
192.0.0.0
へ223.255.255.255
と/24
ネットマスク長
クラスD(マルチキャスト)およびE(予約済み)も定義されていますが、これらはパブリックユニキャストアドレスには使用されません。
各クラスは、そのクラスのネットマスクに従ってネットワークに分割されます。
したがって3.0.0.0
、クラスAネットワークの例です。クラスAのネットマスク長が8であるので、このネットワークのための完全なアドレス空間がある3.0.0.0
に3.255.255.255
。ただし、最初のアドレス(3.0.0.0
)はネットワークアドレスとして予約され、最後のアドレス(3.255.255.255
)はそのネットワークのブロードキャストアドレスとして予約されています。したがって、使用可能なアドレスの実際の範囲は3.0.0.1
に3.255.255.254
2である24 - 2(= 16777214)合計アドレス。
同様に、200.20.30.0
クラスCネットワークの例です。クラスCのネットマスク長が24であるので、このネットワークのための完全なアドレス空間がある200.20.30.0
に200.20.30.255
。ネットワークブロードキャストアドレスの葉を使用可能なアドレスの実際の範囲を除去することである200.20.30.1
と200.20.30.254
その2 8 2(= 254)合計アドレス- 。
パブリックユニキャストに使用できるアドレス範囲には、さらに制限があります。RFC 6890によると、許可されない範囲は次のとおりです。
0.0.0.0/8
-ローカルネットワーキング10.0.0.0/8
-私的使用100.64.0.0/10
-共有アドレス空間127.0.0.0/8
-ループバック169.254.0.0/16
-ローカルリンク172.16.0.0/12
-私的使用192.0.0.0/24
-IETFプロトコルの割り当て192.0.2.0/24
-ドキュメントでの使用のために予約済み192.88.99.0/24
-6to4リレーエニーキャスト192.168.0.0/16
-私的使用198.18.0.0/15
-ベンチマーク198.51.100.0/24
-ドキュメントでの使用のために予約済み203.0.113.0/24
-ドキュメントでの使用のために予約済み
上記のリストでは、VLSRネットマスクを使用して範囲を効率的に指定していることに注意してください。1つを除くすべてのケースで、指定されたマスク長の特異性は、範囲の最初の通常のクラスフルマスク長以下です。したがって、これらの各VLSR範囲は、1つ以上のクラスフルネットワークと同等です。例えば、172.16.0.0/12
クラスBのネットワークに相当する172.16.0.0
まで172.31.0.0
、またはアドレス範囲172.16.0.0
に172.31.255.255
。
このルールの例外は100.64.0.0/10
VLSR範囲で、これは包含100.0.0.0
クラスA範囲よりも具体的です。したがって100.0.0.0
、中央に4,194,304アドレスホールがあることを除いて、他のクラスA範囲と同様に処理されます。このクラスAの範囲内の有効アドレスがあろう 100.0.0.0
に100.63.255.255
と 100.128.0.0
する100.255.255.254
2の合計、24 2 - 22 - 2(= 12582910)合計アドレス。
この課題の目標は、パブリックインターネットホストに有効に割り当てられる可能性のあるすべてのクラスA、B、CのユニキャストIPv4アドレスを出力することです(つまり、上記のアドレスを除く)。
入力は行われず、予期されるべきではありません。
出力は、配列、リスト、区切り文字列など、言語に適した任意の形式にすることができます。アドレスは、標準のドット付き10進形式で出力する必要があります。
出力順序は関係ありません。
必要なアドレス範囲を明確に指定するビルトインは許可されていません。同様に、パブリックインターネットのBGP(または他のプロトコル)ルーティングテーブルを動的に検査する方法はすべて許可されません。
数値的に最も低いアドレスは1.0.0.1
、数値的に最も高いアドレスはになります223.255.255.254
。
この課題は、「すべてのIPv6アドレスを印刷する」と似ていますが、制限があるため、明らかに異なる実装が必要です。
@echo off
だけでなく、。