IPv4骨头缝里的那些设计:拆完三层我跪了

说出来你可能不信,IPv4 到现在还扛着全世界一半以上的流量。 是的,2024 年了。 我上次在机房里见到一台跑着 BGP 的古老核心路由,debug 输出里哗哗往外冒的还是 v4 报文。 当时脑子里就一句:这协议真他妈能活。

地址类的原罪:A/B/C 的棺材板

早年间搞 IP 的人大概没想过 42 亿个地址会不够用——毕竟那时候计算机跟冰箱一样大。 1981 年 RFC 791 定下来那套分类法子,A 类一个网络号就占走 1677 万个地址,真慷慨。 麻省理工、通用电气、苹果……全都分到过 /8。 现在回头看简直犯罪。 93 年 CIDR 出来之前,骨干路由器的路由表里塞了快两万个条目,而且还在指数级涨。 我翻过一份 1994 年的 IETF 会议记录,里面有张图显示:核心路由表条目每 10 个月翻一番。 10 个月! 要没 CIDR 把网络号和主机号的界线抹掉,路由表内存占用到现在得几百 GB。 CIDR 这玩意儿说白了就是在子网掩码上做可变长位掩码。 比方说 10.0.0.0/22,前 22 位是网络部分,剩下 10 位给主机。 你拿掩码 255.255.252.0 跟 IP 一 AND,立马分出网段。 这背后的二进制位运算——AND、移位、前缀匹配——交换芯片里用 TCAM 硬件实现,查一条最长前缀匹配只要 5 纳秒。 有人问 VLSM 和 CIDR 有啥区别? VLSM 是路由协议内部玩的花活,CIDR 是自治系统间聚合的规矩。 但说到底,都是为了榨干每寸地址空间
IPv4 CIDR 子网划分二进制掩码计算示意图
IPv4 CIDR 子网划分二进制掩码计算示意图

NAT 这座屎山,不得不爬

地址不够了怎么办? 打补丁呗。 NAT(网络地址转换)就是最大的补丁。 1994 年 RFC 1631 把它描述成“临时方案”——哈! 临时了三十年。 一个家用路由器后面挂几十个设备,共用运营商给的一个公网 IP,全靠端口映射续命。 原理不复杂:改包头里的源 IP 和源端口,维护一个映射表。 但你真在自己写的 netfilter 模块里抓过包就会明白,这玩意儿的 corner case 能让人发疯。 比如 FTP 这种带内传 IP 的应用层协议,NAT 必须解析 PORT 命令里的私有地址并替换。 SIP、H.323、RTSP……全是雷。
NAT 网络地址转换端口映射表工作流程示意图
NAT 网络地址转换端口映射表工作流程示意图
性能上呢? 我们在某云平台用 DPDK 做过测试:单纯做无状态转发,单核能跑 15Mpps;一旦打开 NAT 加连接跟踪,吞吐直接腰斩到 6Mpps,延迟从 20μs 飙到 200μs。 连接跟踪表(conntrack)是瓶颈。 默认最大 65536 个条目,内存耗尽就开始丢包。 公网侧更惨。 运营商级 NAT(CGNAT)要处理百万级并发,日志还得记下来——“谁在什么时间用了哪个公网 IP 的哪个端口”。 有些地方因为日志存储成本,干脆不记录,出了事再查。 这不叫运维,这叫玄学。 还有更坑的:NAT 打洞。 P2P 想绕过 NAT? 得靠 STUN、TURN、ICE 这一套组合拳。 锥形 NAT、对称 NAT……不同实现千奇百怪,打洞成功率最高也就 85% 左右。 剩下那 15% 必须走中继,延迟高一截,带宽还被 TURN 服务器吃。 你骂也没用,谁让 IPv4 就这德性。

三个要命的坑,照着做能少趟几次雷

我踩过的 IPv4 深坑比办公室的咖啡杯还多。 挑三个最普遍的讲讲,附上血泪换来的解法。 坑一:私有地址冲突,尤其是收购合并时。 两边都用了 10.0.0.0/8,VPN 一拉直接炸。 路由表看不出错,但 ping 同网段一堆 IP 全通——全通才危险,因为不知道通的到底是哪家的主机。 解法:要么重编址,要么在边界做二次 NAT。 重编址最干净,但业务停机窗口不是谁都给得起。 二次 NAT(也叫 NAT 叠加)就是再套一层源目的地址转换,把冲突地址段映射到临时虚拟段。 我们用过,配置复杂到运维同事骂了三天娘。 坑二:ARP 表溢出。 二层网络里广播泛滥,交换机 CAM 表被撑爆,网关的 ARP 缓存超限。 表象是间歇性丢包,traceroute 莫名跳不通。 根因常常是 /24 甚至更小的子网里塞了太多主机,或者有人接了环路。 解:划 VLAN,缩小广播域;核心交换机打开 ARP 限速和 DAI 检查。 我们在一个园区网做改造,把 /16 切成 64 个 /22,ARP 包数量直接降到原来的 1/8。 坑三:IP 地址管理失控。 起初用 Excel,后来用 phpIPAM、NetBox,但数据源还是靠人填。 时间一长,哪个 IP 配给了哪个容器、哪个虚机迁移了、哪个临时工位撤了,全乱。 有次故障排查,三个部门指着同一个 IP 说“是我们的”,结果是个被遗忘的测试虚拟机在发 ARP 欺骗。 解法狠简单:自动化扫描 + IPAM 联动 + 合规性报警。 写 Agent 定期从所有 hypervisor 和容器编排平台拉 inventory,跟 IPAM 对账,发现幽灵 IP 直接告警甚至自动回收。 这玩意儿上线之后,IP 冲突告警一个月从二百多条降到个位数。 所以你看,IPv4 就是这么一个缝缝补补又三年的东西。 设计之初的简洁被现实碾得稀碎,可那一行行堆砌起来的补丁里,倒也有种异样的工程美感。 粗糙,但管用。 只要还有一台老旧 XP 机器在工厂里跑着工控软件,IPv4 就死不了。
免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。如有侵权请联系删除。
文章名称:IPv4骨头缝里的那些设计:拆完三层我跪了
文章链接:https://m.lfdjt.com/info_23_7775.html