IPv4资源紧张,/30掩码浪费一半,/31掩码能否成为答案。

现在公网IPv4地址越来越少了,我们搞网络的都知道,点对点链路以前都用/30掩码,但一个/30子网有4个IP,实际只用2个,浪费了一半。这个浪费在大量链路下非常惊人,而/31掩码就能完美解决这个问题。

打开网易新闻 查看精彩图片

我刚开始接触网络的时候,师傅教的就是点对点链路用/30掩码,子网掩码255.255.255.252,能配两个可用地址。当时觉得挺合理,反正一条链路只需要两个设备互相通信,网络地址和广播地址留着也没啥用,但谁也没想过要改。后来IP地址越来越紧张,公司采购公网地址要花不少钱,我才意识到每一条链路白扔两个地址,积少成多就是一笔不小的开销。

其实早在2000年,RFC 3021就提出了/31掩码的方案,专门用在点对点链路上。它的子网掩码是255.255.255.254,整个子网只有两个IP地址,没有传统意义上的网络地址和广播地址,两个地址直接分配给两端设备用。按照老规矩,主机位全0和全1是不能用的,所以/31子网看起来没有可用地址,但RFC 3021明确说了,在点对点链路里可以取消这个限制,这两个地址就是合法的单播地址。

技术原理其实不复杂。点对点链路只有两个设备直接连着,根本不需要广播机制,也用不着识别网络号。设备之间通过二层协议直接通信,或者用静态路由,不需要ARP来查对端MAC。所以网络地址和广播地址的保留功能在点对点场景下完全是多余的,去掉它们反而更纯粹。

我拿一个实际例子对比一下。假设有一段链路,用/30掩码,比如192.168.1.0/30,网络地址是.0,主机A用.1,主机B用.2,广播地址是.3,浪费了.0和.3两个地址。如果用/31掩码,直接配192.168.1.0/31,主机A用.0,主机B用.1,两个地址全用上,没有浪费。1000条链路就能省下2000个地址,这可不是小数目。

现在主流设备基本都支持/31掩码配置。Cisco、Juniper、H3C这些大厂设备在配置时不会报错,直接就能用。华为和锐捷的设备可能会弹个提示,说“慎用”或者“不符合规范”,但实际配置后也能正常工作,只要固件版本不太老就行。配置起来也很简单,就像给接口配普通IP地址一样,只不过掩码换成255.255.255.254。

不过要注意,/31掩码只能用在点对点链路上,绝对不能用在需要广播的以太网段,比如服务器接入或者客户端网络。如果接了个交换机,下面还有一堆设备,那肯定不行,路由转发会出问题。所以用之前得先搞清楚场景,别乱套。

适用场景其实挺多的。路由器之间互联、数据中心内部核心和汇聚之间的链路、运营商骨干网、云服务商的虚拟私有云环境、物联网设备跟边缘网关之间的连接,这些地方都能用。只要链路两端都是路由器或者三层交换机,中间没有其他设备,就适合用/31。

配置完以后,路由协议也能正常跑。OSPF、BGP这些协议在/31链路上建立邻居关系没问题,因为协议本身不依赖广播地址,直接通过链路层通信就行。我在测试环境里试过,OSPF邻居状态正常,路由也能正确学习。

不过现实中推广/31掩码也有点阻力。很多老工程师习惯了/30,觉得网络地址和广播地址是必须的,一下子改成/31心里没底,担心出问题。还有的设备太老,不支持RFC 3021,配置上去会报错,说“无效的子网掩码”。所以迁移之前最好先做兼容性测试,在测试环境里验证一遍。

另外,排查问题的时候可能会有点不习惯。传统网络工具比如traceroute,显示/31子网时不会显示网络地址和广播地址,新手可能会觉得奇怪。但熟悉了就好了,其实只要知道两个地址就是直接配给两端,逻辑上更简单。

从长远看,/31掩码背后的思想是“精准高效”,不浪费任何资源。这种思维也适用于IPv6,IPv6的点对点链路推荐用/127掩码,原理跟/31一样。学会用/31,不仅是节省地址,更是理解现代网络设计理念的一种方式。

我建议有条件的网络工程师可以逐步把点对点链路迁移到/31。先审计现有的网络,把所有点对点链路列出来,看看哪些设备支持。然后挑一个维护窗口,在测试环境里验证配置,确认没问题后再上线。迁移的时候最好用滚动方式,一条一条改,别一次性全改,万一出问题影响面太大。改完后监控一下路由邻居状态和链路稳定性,确保一切正常。

最后更新一下网络文档,把新配置记下来,顺便给团队做个培训,让大家知道/31掩码怎么用,为什么用。这样以后再有新链路,就直接用/31,不用再纠结了。

总的来说,/31掩码不是新东西,但很多人还没用起来。在IPv4地址这么紧张的今天,每省一个地址都是实实在在的价值。只要场景合适,设备支持,改起来并不难,效果立竿见影。希望更多人能打破思维惯性,把这种高效方法用起来。