IPv4地址为32位宽,因此地址空间的大小为2 32或4,294,967,296。但是,这只是理论上的上限。它不能准确表示公共互联网上可能实际使用的所有地址。
出于此挑战的目的,假定所有寻址都是分类的。实际上,地址空间的有类别细分已被CIDR(无类别域间路由和VLSM(可变长度子网掩码))取代,但此挑战被忽略。
根据分类地址方案,分为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网络掩码来有效地指定范围。在除一种情况外的所有情况下,给定的掩模长度在范围开始时的特异性均小于或等于正常分类掩模的长度。因此,这些VLSR范围中的每一个都等效于一个或多个分类网络。例如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
它将像其他A类范围一样进行处理,不同的是它的中间有一个4,194,304-address孔。在此一类范围的有效地址将是 100.0.0.0
到100.63.255.255
和 100.128.0.0
到100.255.255.254
,共2 24 - 2 22 - 2(= 12582910)总地址。
这项挑战的目标是输出可以有效分配给公共Internet主机的所有A,B和C类单播IPv4地址(即,排除上面详述的那些地址)。
将不提供任何输入,也不应该期望输入。
输出可以采用适合您的语言的任何形式,例如数组,列表,定界字符串。地址必须以标准的点分十进制格式输出。
输出顺序无关紧要。
不允许专门提供所需地址范围的内建函数。类似地,不允许使用任何方法为公共Internet 动态检查BGP(或其他协议)路由表。
数字最低的地址为1.0.0.1
,数字最高的地址为223.255.255.254
。
此挑战类似于“ 打印出所有IPv6地址”,但是由于这些限制,因此需要非常不同的实现。
@echo off
。