一、提出问题
- 10.10.10.1/24 与10.10.10.1/25 能够同时存在于一个局域网吗?
二、阅读建议
- 如果您对“基于类别的IP地址分配”、“CIDR技术的出现”、“路由表及最长前缀匹配原则”等知识均已了解,那么可跳转至结论(3.4 理论分析结果)。
- 如若您对上述三部分知识较为生疏,那么笔者建议您顺序阅读。下面将从基于类别的IP地址分配出发,简要介绍CIDR技术的出现,紧接着介绍路由表及最长前缀匹配原则,最后分析问题、得出结论。
三、理论分析
3.1 基于类别的IP地址分配
3.1.1 IP地址结构与标准IP地址分类
3.1.2 三种主要标准分类IP地址的结构
- A类地址
- B类地址
- C类地址
3.1.3 常用三种类别IP地址的使用范围汇总
3.1.4 专用IP地址
3.1.5 IP地址的特点
3.1.6 基于类别的IP地址分配的缺点
- 如果一家公司需要超过254台但少于65534台的设备,那么他们只需申请一个B类网络。
- 由上述知识可知,一个B类网络能用于标识65534台主机,因此,该公司得到一个B类IP地址块后,只使用了其中的一部分IP地址,剩余的IP地址不能被其他人使用只能保持待使用状态,这就导致了大量IP地址资源的浪费。
- 由于上述基于类别的IP地址分配的缺点再加上互联网接入设备指数性增长,IP地址数量逐渐不够使用。为了解决IP地址不够使用的问题,在IPv6出现前,我们必须充分利用IPv4的IP地址资源以避免出现上述IP地址资源浪费问题,由此产生了CIDR技术。
3.3 CIDR:无分类域间路由技术
- 下面我将从自身理解出发,通俗化介绍CIDR技术。
- 首先,采用CIDR技术后,互联网不再使用“基于类别的IP地址分配”,即IP地址不再有A类、B类、C类的区分。所有的IP地址由某个IP地址管理机构负责分配(分配方法见下文)。
- 假如我要创办一个组织,组织内需要联网的设备数量大致在1000台,需要向IP地址管理机构(可能是ISP:因特网服务提供商)申请IP地址用于标识我创建的组织内的网络设备在互联网上的通信地址。
- IP地址管理机构收到请求后,依据我创建的组织规模(1000人左右),将例如10.10.2.0/23(00001010.0001010.0000010.00000001)分配给我创办的组织。其中,IP地址的后缀“/23”标识IP地址中网络位的个数,那么主机位所占位数为:32 - 23 = 9(位),可分配主机IP地址个数为:2^10 - 1 = 1023(个),满足我创建的组织内部设备联网需求。由此,一个笼统简易的CIDR技术使用过程便得以描述。
- 有人可能会问:“假如IP管理机构把10.10.2.0/23”分给了你,那万一有机构把10.10.0.0/16全部拿走了呢?你的IP地址不就被包含了吗?那互联网中岂不是会出现两个10.10.2.0?”
- 答:IP地址管理机构之所以叫做管理机构,就是因为它能对已使用的IP地址块进行记录。
- 如果有另一家机构申请到了10.10.0.0/16,尽管从逻辑上看,我的机构IP地址块10.10.2.0/23确实被包含了,但我的组织机构与被分配到IP地址块对应信息也是完整地被记录在IP地址管理机构中的,因此,申请到了10.10.0.0/16的另一家机构是不能使用10.10.2.0/23地址块的,这就保证了组织机构被分配到的IP地址在互联网中的唯一性。
- 有人可能又会问了:“另一家机构申请到了10.10.0.0/16,你的机构申请到的是10.10.2.0/23地址块,从逻辑上看,你的组织机构IP地址块10.10.2.0/23是在10.10.0.0/16较低层级的,如果你们两个机构不在同一片物理区域,一个在东北,一个在新疆,假设一个从海南出发的目的地址是10.10.2.1的数据包想到达你的组织机构,按照IP地址是分层的特性,也就是好像先要找到10.0.0.0的路由器,再找到10.10.0.0的路由器,这样的话会不会你的组织机构接收不到信息呢?也就是本来要发到你的机构的信息全都发到申请到了10.10.0.0/16的机构去了?”
- 答:要解释这个问题,我们就得知道路由器是怎么决定将数据包发送到哪个端口的,这里将概述路由表及最长前缀匹配原则。
- 借用一张参考资料中的图:图中最右侧的表格即为简易的路由表,其中“dest”即destination(目的网络地址),link为路由器的转发端口,我们以图中左侧的序号B目的地址171.15.15.0为例,讲解最长前缀匹配原则
- 当携带着目的地址为171.15.15.0的数据包到达该路由节点后,路由器将依据数据包中的目的IP地址及路由器中的路由表选择该数据包下一个转发的端口。
- 路由表中的目的网络地址均带有网络位标识后缀“/k”,为了确定携带目的IP地址数据包应该发往哪个端口,就必须确定目的IP地址属于哪个端口对应的目的网络,而要判断是否属于同一网络,我们就需使用子网掩码来计算。
- 子网掩码是由连续的1和连续的0构成32位二进制数(与IPv4的IP地址位数相同),其中1表示该位为网络位,0表示该位为主机位,如11111111.00000000.00000000.00000000(255.0.0.0)即表示与该子网掩码搭配的IP地址的前8位是网络位,后24位是主机位。
- 在前文中我们讲过,CIDR分配IP地址时,使用“x.x.x.x/k”的格式,其中k表示该IP地址的网络位数量。以171.165.32.24/8为例,8代表171.165.32.24对应二进制格式10101011.10100101.00100000.00011000的前8位为网络位,后24位为主机位,我们如果只想知道171.165.32.24/8这个IP地址对应的是哪个网络,只需要得到其网络位171,其余主机位“置零”即可,因此,我们可利用逻辑“与”运算。
- 171.165.32.24/8(10101011.10100101.00100000.00011000)的子网掩码为11111111.00000000.00000000.00000000(255.0.0.0),对子网掩码和IP地址每位相“与”运算即可提取到171.0.0.0的网络地址10101011.00000000.00000000.00000000(171.0.0.0)。
- 因此,我们想判断两个IP地址是否属于同一网络(子网),只需使用该网络对应的子网掩码与两个IP地址分别做每位逻辑“与”运算,如果运算结果相同,即说明两个IP地址处于同一网络。
- 回到上文路由表的图,当路由器接收到目的地址为171.15.15.0的数据包后,依次将171.15.15.0和路由表中每一项网络地址对应的子网掩码做逻辑“与”运算。
- 经过运算,我们可以得出171.15.15.0同时满足171.0.0.0/8和171.0.0.0/10两个网络(读者需自行尝试计算),那么到底该发送到2号还是4号端口呢?
- 我们规定,路由表内使用最长前缀匹配原则。这里所说的前缀即网络位,那么“最长前缀匹配”翻译过来就是逻辑“与”运算后,得到的网络位数最多的那个网络,也就是该数据包将被发往的网络。
- 171.15.15.0和171.0.0.0/8的子网掩码的逻辑与结果为:10101011.00000000.00000000.00000000;171.15.15.0和171.0.0.0/10的子网掩码的逻辑与结果为:10101011.00000000.00000000.00000000(注意:加粗表示网络位)。
- 因此,171.15.15.0和171.0.0.0/10的子网掩码的逻辑与结果更长,即目的地址为171.15.15.0的数据包应当在该路由器内转发到4号端口,由此完成了数据包的路由工作。
- 借用一张参考资料中的图:图中最右侧的表格即为简易的路由表,其中“dest”即destination(目的网络地址),link为路由器的转发端口,我们以图中左侧的序号B目的地址171.15.15.0为例,讲解最长前缀匹配原则
- 回到问题中来,如果一个从海南出发的目的地址是10.10.2.1的数据包想到达我的组织机构,该数据包会一路进行最长匹配原则路由,如果一个路由节点中同时存在10.10.0.0/16和10.10.2.0/23,依照最长匹配原则,读者认为目的地址是10.10.2.1的数据包会被发送到哪个网络呢?
- 答:要解释这个问题,我们就得知道路由器是怎么决定将数据包发送到哪个端口的,这里将概述路由表及最长前缀匹配原则。
- 在上文中,我们曾提到过“基于类别的IP地址分配的缺点”,应用CIDR技术后,我们便可大幅度减少大量IP地址资源的浪费的问题。
- 为了更加充分利用IPv4中的IP地址资源,我们还可在CIDR基础上应用NAT技术,下面将在此基础上继续概述NAT。
- 上述CIDR技术描述过程中,我们申请了一个10.10.2.0/23地址块用于组织内部联网设备的IP地址分配。事实上,IPv4的IP地址资源0.0.0.0~255.255.255.255如果按照上述方式分配,虽然“IP地址资源的浪费”的问题能够得以解决,但IP地址不够用的问题该怎么解决?
- 在此,我们可利用NAT(Network Address Translation网络地址转换)技术。
- 我们可向管理机构申请一个x.x.x.x/32的IP地址,如10.10.10.10/32,即IP地址中所有位均为网络位,该IP地址唯一标识我们创建的组织(即该IP地址指向我们创建的组织机构网络的网关)。
- 虽然申请到的IP地址10.10.10.10/32均为网络位,即该IP地址块没有可划分的空间,但我们可以换个角度思考,我们所创建的组织内部是一个子网系统,子网内所有的设备若想要和互联网进行数据交互必须经过网关的路由处理,也就是说,对于互联网而言,互联网并不需要知道我所创建的组织机构内部是怎么分配IP地址的,互联网只需要将组织内部申请的资源交付到组织机构的网关即可,剩下的“最后一公里”由网关负责转运。那么我们可以思考,既然互联网只需要找到我们所在组织机构的网关,而不关心组织机构内部的网络,那么组织内部是不是相当于一个私域呢?我们是否可以在组织机构内部建立一个“小互联网”呢?
- 答案是肯定的,运用NAT技术,我们只需在NAT中将10.10.10.10/32转换为子网内网关接口IP地址192.168.0.0/16(或172.16.0.0/20或10.0.0.0/8),那么,在我们的组织机构网络私域中,我们相当于可以分配216个IP地址,这216个IP地址就叫做所谓的“私有IP地址”,而10.10.10.10/32便叫做“公有IP地址”。在私有IP地址下,我们便可对子网按照自己的需求进行进一步划分。
- 通过NAT方式,我们便可充分节省IP地址(公有),从而缓解当下IP地址不够用的问题。
- 综上,我们概述了“基于类别的IP地址分配”、“CIDR技术的出现”、“NAT技术”、“路由表及最长前缀匹配原则”,下面,我们将重回起始问题,进行分析解答。
3.4 理论分析结果
- 由题目描述可见,两个IP地址使用的是CIDR的IP地址划分方法(x.x.x.x/k)。
- 10.10.10.1/24:00001010.0001010.0001010.00000001(加粗为网络位、其余为主机位)
- 10.10.10.1/25:00001010.0001010.0001010.00000001(加粗为网络位、其余为主机位)
- 我们将从三个角度去看这个问题~
- 一、从互联网向局域网方向看:
- 假设该局域网内存在上述两类IP地址,
- 首先从互联网发送一个目的地址为10.10.10.1的数据包,经过路由后到达该局域网网关。
- 假设网关路由表中存有两项路由,一项通往10.10.10.1/24,另一项通往10.10.10.1/25。
- 由最长前缀匹配原则知,我们的目的IP地址10.10.10.1和10.10.10.1/25的匹配前缀更长,所以转发到对应端口,即10.10.10.1/24属于无效匹配项。
- 因此,假设10.10.10.1/24和10.10.10.1/25均处于该局域网,10.10.10.1/24主机永远接收不到目的IP地址为10.10.10.1的数据,那么对互联网来说相当于不存在。
- 二、从局域网内部看:
- 假设该局域网内存在上述两类IP地址,
- 局域网内另一台主机10.10.10.2/25想给10.10.10.1/25发数据。
- 经过网络层IP地址检查,发现自己和对方处于同一子网,因此开始分析ARP表项。
- 假设没有找到10.10.10.1对应的MAC地址,因此向子网内发送询问10.10.10.1的MAC地址广播。
- 广播经过交换机转发后,10.10.10.1/25和10.10.10.1/24均收到广播(我们已假设10.10.10.1/25和10.10.10.1/24处于同一子网),两个主机解包后均发现询问的是自己的MAC地址,两个主机查询10.10.10.2/25发现均和自己处于同一子网,因此均返回ARP响应并附带自己的MAC地址。
- 经过以上过程,10.10.10.2收到了一个10.10.10.1对应的两个不同MAC地址(分别是10.10.10.1/25主机和10.10.10.1/24主机的MAC地址),由此产生错误(可能是丢弃、可能是报错,总之ARP缓存表中一定存在查错机制使得一个IP地址只能对应一个MAC地址)。
- 因此,10.10.10.1/25无法与10.10.10.1/25取得联系,即10.10.10.1/25和10.10.10.1/24不能同时存在于局域网中。
- 三、从CIDR划分角度看
- 假设一个组织或机构被允许拥有10.10.10.x/24地址块。
- 如果该组织机构没有对10.10.10.x/24地址块进行更进一步划分,那么仅有10.10.10.1/24存在于该局域网,即局域网内不会存在拥有/25后缀的IP地址。
- 如果该组织机构借用了一个主机位用于10.10.10.x/24地址块内的子网划分,即划分为10.10.10.0/25(00001010.0001010.0001010.00000000)和10.10.10.128/25(00001010.0001010.0001010.10000000),那么仅有10.10.10.1/25存在于该局域网,即局域网内不会存在拥有/24后缀的IP地址(注意:10.10.10.0/24是网关连接外部互联网的接口的IP地址,用于标识10.10.10.x/24地址块,该接口不属于/25的子网)。
- 因此,该组织机构是否对地址块进行划分这个条件是互斥的,即“10.10.10.1/24存在于该局域网内”和“10.10.10.1/25存在于该局域网内”这两个事件是互斥的(互斥即不可能同时发生),可见伪代码表述:
if(该组织机构没有对10.10.10.x/24地址块进行更进一步划分)仅有10.10.10.1/24存在于该局域网;
else if(该组织机构借用了一个主机位用于10.10.10.x/24地址块内的子网划分)仅有10.10.10.1/25存在于该局域网;
四、实验验证
五、得出结论
- 因此:10.10.10.1/24 与10.10.10.1/25 不能同时存在于一个局域网。
六、参考文章
- CSDN:CIDR地址块及其子网划分
- CSDN:无类别域间路由(Classless Inter-Domain Routing, CIDR):理解IP网络和子网划分(传统的IP地址类ABCDE:分类网络)子网掩码
- 计算机网络(4) 最长前缀匹配(路由转发表)