之前学习 UDP 组播(多播)时,需要先了解广播地址,因此又温习了一下相关的基础知识。
注意:
本文讲解的都是和 IPv4 相关的。
前言
IPv4地址 使用32位(4字节)地址,因此地址空间中只有4,294,967,296(2的32次方)个地址。不过,一些地址是为特殊用途所保留的,如专用网络(约1800万个地址)和多播地址(约2.7亿个地址),这减少了可在互联网上路由的地址数量。随着地址不断被分配给最终用户,IPv4地址枯竭问题也在随之产生。基于分类网络、无类别域间路由和网络地址转换的地址结构重构显著地减少了地址枯竭的速度。但在2011年2月3日,在最后5个地址块被分配给5个区域互联网注册管理机构之后,IANA的主要地址池已经用尽。
这些限制刺激了仍在开发早期的作为当前唯一的长期解决方案的IPv6的部署。
正文
最初,一个IP地址被分成两部分:网络标识符在地址的高位字节中,主机标识符在剩下的部分中。
为了克服这个限制,在随后出现的分类网络中,地址的高位字节被重定义为网络的类(Class)。这个系统定义了五个类别:A、B、C、D和E。A、B和C类有不同的网络类别长度,剩余的部分被用来识别网络内的主机,这就意味着每个网络类别有着不同的给主机编址的能力。D类被用于多播地址,E类被留作将来使用。
前8位地址范围 | 类 | 路由形式 | 占地址总空间的比例 |
---|---|---|---|
0-127 | A | 单播 | 1/2 |
128-191 | B | 单播 | 1/4 |
192-223 | C | 单播 | 1/8 |
224-239 | D | 多播 | 1/16 |
240-255 | E | - | 1/16 |
1993年,无类别域间路由(CIDR)正式地取代了分类网络,后者也因此被称为“有类别”的。
CIDR被设计为可以重新划分地址空间,因此小的或大的地址块均可以分配给用户。CIDR创建的分层架构由互联网号码分配局(IANA)和区域互联网注册管理机构(RIR)进行管理,每个RIR均维护着一个公共的WHOIS数据库,以此提供IP地址分配的详情。
特殊用途的地址
CIDR地址块 | 描述 | 参考资料 |
---|---|---|
0.0.0.0/8 | 本网络(仅作为源地址时合法) | RFC 5735 |
10.0.0.0/8 | 专用网络 | RFC 1918 |
100.64.0.0/10 | 电信级NAT | RFC 6598 |
127.0.0.0/8 | 环回 | RFC 5735 |
169.254.0.0/16 | 链路本地 | RFC 3927 |
172.16.0.0/12 | 专用网络 | RFC 1918 |
192.0.0.0/24 | 保留(IANA) | RFC 5735 |
192.0.2.0/24 | TEST-NET-1,文档和示例 | RFC 5735 |
192.88.99.0/24 | 6to4中继 | RFC 3068 |
192.168.0.0/16 | 专用网络 | RFC 1918 |
198.18.0.0/15 | 网络基准测试 | RFC 2544 |
198.51.100.0/24 | TEST-NET-2,文档和示例 | RFC 5737 |
203.0.113.0/24 | TEST-NET-3,文档和示例 | RFC 5737 |
224.0.0.0/4 | 多播(之前的D类网络) | RFC 3171 |
240.0.0.0/4 | 保留(之前的E类网络) | RFC 1700 |
255.255.255.255 | 受限广播 | RFC 919 |
专用网络
主条目:专用网络
在IPv4所允许的大约四十亿地址中,三个地址块被保留作专用网络。这些地址块在专用网络之外不可路由,专用网络之内的主机也不能直接与公共网络通信。但通过网络地址转换(NAT),使用这些地址的主机可以像拥有共有地址的主机在互联网上通信。
下表展示了三个被保留作专用网络的地址块(RFC 1918):
名字 | 地址范围 | 地址数量 | 有类别的描述 | 最大的CIDR地址块 |
---|---|---|---|---|
24位块 | 10.0.0.0–10.255.255.255 | 16,777,216 | 一个A类 | 10.0.0.0/8 |
20位块 | 172.16.0.0–172.31.255.255 | 1,048,576 | 连续的16个B类 | 172.16.0.0/12 |
16位块 | 192.168.0.0–192.168.255.255 | 65,536 | 连续的256个C类 | 192.168.0.0/16 |
链路本地地址
主条目:链路本地地址
RFC 5735中将地址块169.254.0.0/16保留为特殊用于链路本地地址,这些地址仅在链路上有效(如一段本地网络或一个端到端连接)。这些地址与专用网络地址一样不可路由,也不可作为公共网络上报文的源或目的地址。链路本地地址主要被用于地址自动配置:当主机不能从DHCP服务器处获得IP地址时,它会用这种方法生成一个。
当这个地址块最初被保留时,地址自动配置尚没有一个标准。为了填补这个空白,微软创建了一种叫自动专用IP寻址(APIPA)的实现。因微软的市场影响力,APIPA已经被部署到了几百万机器上,也因此成为了事实上的工业标准。许多年后,IETF为此定义了一份正式的标准:RFC 3927,命名为“IPv4链路本地地址的动态配置”。
环回地址(Loopback Address)
主条目:127.0.0.1
地址块127.0.0.0/8被保留作环回通信用。此范围中的地址绝不应出现在主机之外,发送至此地址的报文被作为同一虚拟网络设备上的入站报文(环回),主要用于检查TCP/IP协议栈是否正确运行和本机对本机的链接。
以0或255结尾的地址
一个常见的误解是以0或255结尾的地址永远不能分配给主机:这仅在子网掩码至少24位长度时(旧的C类地址,或CIDR中的/24到/32)才成立。
在有类别的编址中,只有三种可能的子网掩码:A类:255.0.0.0,B类:255.255.0.0,C类:255.255.255.0。如,在子网192.168.5.0/255.255.255.0(即192.168.5.0/24)中,网络标识符192.168.5.0用来表示整个子网,所以它不能用来标识子网上的某个特定主机。
广播地址允许数据包发往子网上的所有设备。一般情况下,广播地址是借由子网掩码的比特反码并和网络标识符运行 OR 的位操作得到,即广播地址是子网中的最后一个地址。在上述例子中,广播地址是192.168.5.255,所以为了避免歧义,这个地址也不能被分配给主机。在A、B和C类网络中,广播地址总是以255结尾。
但是,这并不意味着每个以255结尾的地址都不能用做主机地址。比如,在B类子网192.168.0.0/255.255.0.0(即192.168.0.0/16)中,广播地址是192.168.255.255(主机位全1)。在这种情况下,尽管可能带来误解,但192.168.1.255、192.168.2.255等地址可以被分配给主机。同理,192.168.0.0作为网络标识符不能被分配,但192.168.1.0、192.168.2.0等都是可以的。
随着CIDR的到来,广播地址不一定总是以255结尾(广播地址是指主机位都为1的地址,255只是其中一种情况)。比如,子网203.0.113.16/28的广播地址是203.0.113.31。过程如下:
网络:203.0.113.16 (11001011.00000000.1110001.00010000)
掩码:255.255.255.240 (11111111.11111111.11111111.11110000)
掩码反码:0.0.0.15 (0.0.0.00001111)
或操作(将网络地址和子网掩码的反码进行或操作):
00010000 | 00001111 = 00011111 = 31
即得到的广播地址为:203.0.113.31
一般情况下,子网的第一个和最后一个地址分别被作为网络标识符和广播地址,任何其它地址都可以被分配给其上的主机。
注意:
示例中的 203.0.113.16 代表子网的地址(也就是网络标识符或网络地址),并不代表 IP 地址。
网络标识符(网络地址)的计算方法
网络标识符(网络地址) = IP地址和子网掩码进行与运算
广播地址的计算方法
方法1:
广播地址 = 将网络标识符(网络地址)和子网掩码的反码进行或操作
方法2:
广播地址 = 将网络标识符(网络地址)的主机地址位全都变为1
主机地址和计算方法
网络标识符(网络地址)+1即为第一个主机地址。
广播地址-1即为最后一个主机地址。
由此可以看出地址范围是: 网络标识符(网络地址)+1 至 广播地址-1。
主机的数量=2^主机位的二进制位数 - 2。
减2是因为要去掉网络标识符(网络地址)和广播地址。
示例
主机 IP:202.112.14.137(11001010.01110000.00001110.10001001)
子网掩码:255.255.255.224(11111111.11111111.11111111.11100000)即网络位有 27 位,主机位有 5 位。
计算网络标识符(网络地址)
计算公式:网络标识符(网络地址) = IP地址和子网掩码进行与运算
即 10001001 & 11100000 = 100000000(128)
由此可以网络标识符(网络地址)= 202.112.14.128 (11001010.01110000.00001110.10000000)
计算广播地址
计算公式:将网络地址和子网掩码的反码进行或运算:
掩码反码:0.0.0.31 (0.0.0.00011111)
10000000 | 00011111 = 10011111 = 159
即得到的广播地址为:202.112.14.159
也可以通过另一种方法计算广播地址:将网络标识符(网络地址)的主机地址位全都变为1:
网络地址 = 202.112.14.128 (11001010.01110000.00001110.10000000)
主机位为后5位,因此将网络地址的主机地址位全都变为1,也可以得到如下广播地址:
202.112.14.159 (11001010.01110000.00001110.10011111)
计算主机数
计算公式:主机的数量=2^主机位的二进制位数 - 2。
在上面的示例中,由于主机位有5位,因此主机数 = 2^5 - 2 = 30
减2的原因之前已经讲过了,因为要去掉网络标识符(网络地址)和广播地址。