10.1.1.0/31这个地址到底能不能用?31位长度的掩码是怎么回事?

简介: 10.1.1.0/31这个地址到底能不能用?31位长度的掩码是怎么回事?


前面发了一篇文章(无类别域间路由 (CIDR):Internet 地址分配和聚合计划),里面有张图引起了一定争议。

争议的点主要集中在n.n.n.x/31这一条,后面备注是“点对点链路”。很多人就问了:一般点对点链路用的都是30位的掩码啊,这博主真没文化,误人子弟。

相信大家在学网络的时候,培训人员一般都会说一个地址段内可用地址的计算方式,比如正常1个C类地址段192.168.1.0/24,主机位是8位,可用地址数量为2^8 - 2 = 254个。地址池内有地址192.168.1.0 - 192.168.1.255共256个,其中192.168.1.0是网络地址(网络号),192.168.1.255是广播地址,这2个就是要从256个地址中减掉的2个地址,所以我们常见的地址范围就是192.168.1.1 - 192.168.1.254。

也正是因为上述原因,我们常用的最长掩码就是30位,这样主机位有2位,可用地址数量就是2^2 - 2 = 2 个。一般的互联链路就是这么配置的,比如192.168.1.0/30网段,大家会习惯用192.168.1.1和192.168.1.2去作为互联地址。

还按照上面的计算方法,当掩码长度是31位时,可用地址数量就是2^1 - 2 = 0 个,10.1.1.0/31对应的两个地址10.1.1.0和10.1.1.1,一个是网络号,一个是广播地址,没有可用的主机地址。

但RFC文档不能瞎写啊,厂商是要按照这个规范开发设备协议栈的,让我们来看看H3C是怎么实现的。正好MSR810又可以上场了。

我们直接在接口下配置IP地址为10.1.1.0/31,发现可以直接配置,没有任何报错。

怎么样,不吹牛的说,我相信超过90%的人都是第一次见10.1.1.0/31这样的IP地址。

那10.1.1.0/30和10.1.1.3/30的地址能不能配置呢?

好家伙,10.1.1.0/30直接配上了,10.1.1.3/30因为是广播地址不能配置。那就测试一下业务访问情况吧。

我们按照上图所示连接设备,并配置相关的接口IP地址,其中SW设备使用VLAN虚接口vlan-inf1。

先从RT2测试点对点链路的连通性。

确认连通性正常,ARP学习正常。

抓包查看通信过程,首先是二层广播查找10.1.1.1的ARP信息。

然后10.1.1.1响应请求。

后面就是正常的ICMP交互报文了。

我们再看30位掩码的这边。

虽然可以ping通,但是没有ARP表项信息。

通过抓包,我们发现,11.1.1.1发出的每一个ICMP请求报文都是二层广播报文,而且没有ARP请求报文。但是每个响应报文都是正常的单播报文。

那这样会有什么问题呢?

我们给设备增加一条路由,会发现无法通信。

此时再抓包查看,发现有ARP请求报文了,而且响应也是正常的。但是就是没有报文发出来,为什么呢?我们看一下FIB表项。

去往10.1.1.0/31的下一跳是11.1.1.0,但是11.1.1.0有一个32位掩码的主机条目,下一跳就是接口本身的11.1.1.1,而11.1.1.1/32是设备自身的接口地址,下一跳就是127.0.0.1,设备上没有ARP表项,所以转发不出去。

为什么没有ARP表项,因为设备认为11.1.1.0/30这个地址是一个网络地址号。

那我们把11.1.1.0/30换成标准的互联地址11.1.1.2/30再测试一下。

可以看到ARP表项和路由表项都正常了。那如果把SW和RT1的互联地址换一下呢?

啊哦,VLAN虚接口配不了这个地址。但是在MSR810上面就是可以的,说明设备间还是有些差别的。

同样,有些非点对点接口也是不支持配置31位掩码的。

2GFH_COR_SW_2(conf1g-1f)#ip add 1.1.1.1 255.255.255.254
% Warning: use /31 mask on non point-to-point interface cautiously
ZGFH_COR_SW_2(config-if)#ip add 1.1.1.0 255.255.255.254
% Warning: use /31 mask on non point-to-point interface cautiously

简单总结一下,30位掩码长度的互联地址还是比较规范的使用方式,部分场景下可能可以配置网络号到接口上,但通信异常。31位掩码长度仅适用于点对点链路,非点对点接口无法配置,如果能配置31位长度的掩码,那路由转发也是和正常一样的。


相关文章
2 字节的 UTF-8 序列的字节 2 无效 解决方法
2 字节的 UTF-8 序列的字节 2 无效 解决方法: 用记事本打开xml文件,另存为 编码 选择 UTF-8,保存替换掉之前的文件,解决问题博客内容仅代表个人观点,如发现阐述有误,麻烦指正,谢谢!
4161 0
|
3月前
这几个IP地址块聚合后,可用地址数是多少?你造吗?
这几个IP地址块聚合后,可用地址数是多少?你造吗?
if双分支根据位置变量识别用户输入的 IP 地址判断连通 信
if双分支根据位置变量识别用户输入的 IP 地址判断连通 信
59 0
4、if双分支根据变量赋值识别用户输入IP地址判断主机连 通性
4、if双分支根据变量赋值识别用户输入IP地址判断主机连 通性
72 0
|
6月前
leetcode:1108. IP 地址无效化
leetcode:1108. IP 地址无效化
34 0
|
6月前
|
Python
用代码计算子网掩码对应的网络前缀的长度:子网掩码255.224.0.0所对应的网络前缀长度是( )
用代码计算子网掩码对应的网络前缀的长度:子网掩码255.224.0.0所对应的网络前缀长度是( )
96 0
一日一技:负长整数如何转换为IPv4地址?
一日一技:负长整数如何转换为IPv4地址?
95 2
|
算法
IP地址转换整型(算法练习)
IP地址转换整型(算法练习)
137 0
IP地址转换整型(算法练习)
多IP情况下如何获取本地的第一个IP及如何调整本地的第一个IP
我分析了业务的代码,OPTIONS中的Via中的用的是采用gethostbyname获取的。这意味着该函数获取的系统的默认的第一个IP。如果操作系统有多个IP,如何设置它们的优先级呢?
多IP情况下如何获取本地的第一个IP及如何调整本地的第一个IP