LabHub
学习 学习路径 课程

网络基础

IP 地址与子网 — 到哪儿为止算自己这一片

在 LabHub 中继续学习

一句话总结

IP 地址分为网络部分与主机部分,子网掩码定义两者边界;这条边界决定了哪些目标可以直接发送,哪些必须交给网关。

概念图: 254 个 · 同一网络 · 默认网关 · 最长前缀匹配(longest prefix match)

为什么需要它

不可能把全世界所有主机都放进一张表,路由器也无法逐一查找 40 亿条记录。因此,地址被设计为分层结构:前缀相同的地址归为一组,路由表只需用一行写明“这一组往那个方向走”。

它如何工作

192.168.10.37/24 中,/24 表示前 24 位是网络部分。因此网络地址为 192.168.10.0,最后 8 位属于主机部分。

主机发送数据包时,判断过程很简单:分别用掩码处理目标地址与自身地址;如果网络部分相同,说明在同一网络,通过 ARP 获取对方 MAC 后直接发送;如果不同,则发送到默认网关的 MAC。关键在于,此时 IP 头中的目标仍是最终目标,只有链路层目标是网关。

路由器采用最长前缀匹配(longest prefix match)。如果路由表同时存在 10.0.0.0/810.1.2.0/24,目标为 10.1.2.5,就选择更具体的 /24。默认路由 0.0.0.0/0 的前缀长度为 0,因此永远是最后候选。

私有地址范围(10.0.0.0/8172.16.0.0/12192.168.0.0/16)不会在互联网中路由。因此,对外访问时,NAT 会把源地址改成公网地址,并通过端口号记住连接属于哪台内部主机。NAT 带有状态,由此会产生多个结果:外部无法主动向内部建立连接,长时间静默的连接也会从 NAT 表中删除并断开。空闲连接在几分钟后悄悄失效,常常就是这个原因。

在实际项目中

创建 Kubernetes 集群时,如果 Pod CIDR、Service CIDR 与节点网络重叠,路由会悄悄失效。重叠区间的流量被送往错误位置,症状往往零散地表现为“只有部分 Pod 之间无法通信”。最好在创建集群前就把网段规划写在纸上;事后再改,常常只能重建集群。

接下来的测验要确认什么

确认你能否用掩码计算网络地址,并按照最长前缀匹配选择下一跳。