IP 地址、CIDR 和 NAT:一台机器到底属于哪个网络
围绕IP 地址、CIDR、子网掩码和 NAT 章节,讲清网络号、主机号、网段划分和地址转换的实际意义。
相关工具
IP 地址先解决“在哪里”
TCP 负责把两端之间的数据按顺序、可靠地送过去,但 TCP 自己并不负责决定包往哪条路走。真正让网络包知道目的地的,是 IP 地址。文中讲 IP 地址时先点出了一个容易被忽略的事实:IPv4 地址一共 32 位,看起来能表示 43 亿多个地址,但现实里不可能把这 43 亿个地址都直接分给联网设备。
原因之一是 IP 地址不是一个单纯的编号。它由“网络标识”和“主机标识”两部分组成。网络标识说明这台机器属于哪个网络,主机标识说明它是这个网络里的哪一台机器。路由器转发时,关心的首先不是某台具体机器,而是目标地址属于哪个网络。
所以理解 IP,不要从“这是一串数字”开始,而要从“这串数字怎么被切成网络号和主机号”开始。切分方式不同,能容纳的主机数量、广播范围、路由粒度都会变。
分类地址:简单,但太硬
早期 IPv4 使用过分类地址,把地址分成 A、B、C、D、E 五类。A、B、C 类主要用于普通主机地址,D 类用于多播,E 类是预留地址。分类地址的好处是规则直观,通过地址前几位就能判断类型,选路也比较简单。
但这种简单是有代价的。文中举了一个很现实的矛盾:C 类地址最多只有 254 个可用主机地址,稍微大一点的局域网就不够;B 类地址又能容纳 6 万多台主机,普通企业很难真的用满,剩下的地址就浪费了。
另一个问题是分类地址缺少层次。一个公司可能要把生产环境、测试环境、本地环境分开管理,但传统 A、B、C 类地址只按固定边界切分,不能很好贴合这种内部网络结构。网络一复杂,固定分类就显得笨。
CIDR:把固定分类改成可变切分
CIDR,也就是无分类地址,解决的正是固定分类太僵的问题。文中说,CIDR 不再使用分类地址的概念,而是把 32 位 IP 地址划成两部分:前面是网络号,后面是主机号。表示形式是 `a.b.c.d/x`,其中 `/x` 表示前 x 位属于网络号,x 的范围是 0 到 32。
比如 `192.168.1.23/24`,意思是这个 IPv4 地址前 24 位是网络号,后 8 位是主机号。它所在的网络通常写成 `192.168.1.0/24`。在这个网段里,`192.168.1.1` 到 `192.168.1.254` 常用于主机,`192.168.1.255` 通常是广播地址。
CIDR 的价值在于灵活。你可以按真实规模切网络:机器少,就用更长的网络前缀,主机位少一点;机器多,就给主机位留得多一点。它把“一个网络应该多大”这件事,从固定分类里拿了出来。

CIDR 用 /x 表示网络号长度;子网掩码与 IP 地址按位 AND 后得到网络地址。
子网掩码:换一种方式说同一件事
CIDR 用 `/24` 这种写法说明前多少位是网络号,子网掩码则用另一种形式表达同样的切分。文中说,掩码的意思是掩盖掉主机号,剩下的就是网络号。把子网掩码和 IP 地址按位计算 AND,就能得到网络号。
还是看 `192.168.1.23/24`。它的子网掩码是 `255.255.255.0`。前 24 位都是 1,表示这些位参与网络号计算;后 8 位都是 0,表示这些位是主机号。IP 地址和这个掩码做 AND 运算后,结果就是 `192.168.1.0`。
日常配置里,有的地方让你填 CIDR,比如 `192.168.1.23/24`;有的地方让你填 IP 地址和子网掩码,比如 IP 填 `192.168.1.23`,掩码填 `255.255.255.0`。它们不是两套知识,本质都是在说明网络号和主机号怎么切。
为什么一定要分网络号和主机号
资料 在这里给了一个很好用的判断标准:两台计算机通信时,首先要判断是否处在同一个广播域内,也就是网络地址是否相同。如果网络地址相同,说明目标主机就在本网络,可以直接把数据包发过去。
如果网络地址不同,事情就变了。主机不能假装对方就在身边,而要把数据交给网关,再由路由器根据目标网络号一跳一跳转发。路由器做的不是记住全世界每台机器的位置,而是根据网络号找到下一跳。
这就是为什么网络号很重要。它像地址里的城市和街区,主机号像门牌号。你要先把包送到正确的网络,再在这个网络里找到具体主机。没有这层切分,路由表会膨胀到难以管理,局域网广播也会失控。
网络地址、广播地址和可用主机数
很多初学者算网段时会忘记两个特殊地址:主机号全 0 和全 1。文中在 A、B、C 类地址部分提到,最大主机数一般按 `2^主机号位数 - 2` 计算,因为全 0 和全 1 是特殊地址。
以 `192.168.0.0/24` 为例,后 8 位是主机号。主机号全 0 的 `192.168.0.0` 通常表示这个网络本身;主机号全 1 的 `192.168.0.255` 通常表示这个网段的广播地址。真正能分给普通主机的,是中间的 `192.168.0.1` 到 `192.168.0.254`。
这也是为什么 `/24` 常说有 254 个可用主机地址,而不是 256 个。这个细节在配置服务器、容器网络、VPC 子网时经常出现。少算两个地址不是死记硬背,是因为它们承担了网络标识和广播语义。
广播地址:同一链路里的群发
广播地址用于在同一链路里给一组主机发送数据包。文中把广播分成本地广播和直接广播。本地广播只在本网络内传播,例如 `192.168.0.0/24` 的广播地址是 `192.168.0.255`,这个广播包通常不会被路由器继续转发到其他链路。
直接广播则是发往另一个网络的广播地址,例如向 `192.168.1.255/24` 发送数据,让目标网络里的多台主机都能收到。不过 资料 也提醒,直接广播有安全问题,多数情况下路由器会设置为不转发。
理解广播地址,对排查局域网问题很有帮助。像 ARP 请求、DHCP 发现这类过程都和广播有关。广播能解决“我还不知道对方具体是谁”的问题,但广播范围太大,也会带来流量和安全压力。
子网划分:把一个大网络切成更好管理的小网络
有了网络号和主机号,还可以继续做子网划分。文中说,子网划分实际上是把主机地址再分成两部分:子网网络地址和子网主机地址。换句话说,你从原本的主机位里借出一部分,当作更细的网络编号。
例如一个公司拿到一个较大的网段,不一定要把所有设备放在同一个网络里。可以按部门、环境、机房、业务线切成多个子网。这样做以后,广播范围更小,权限边界更清楚,路由和排障也更容易落到具体区域。
但子网划分不是越碎越好。前缀越长,子网数量可能变多,但每个子网能容纳的主机数会减少。设计时要先估算主机规模,再留一点增长空间。很多线上问题不是 CIDR 不会算,而是规划时把网段切得太满,后面扩容时无处下手。
NAT:IPv4 不够用时的折中办法
CIDR 缓解了地址浪费,但 IPv4 地址仍然紧张。文中接着讲 NAT,也就是网络地址转换。简单说,公司、家庭、教室里的多台主机使用私有 IP,对外通信时,由 NAT 设备把私有 IP 转成公有 IP。
如果只是普通 NAT,一台内网主机换一个公网地址,那并不能真正省地址。文中也直接提出了这个疑问:N 个私有 IP 如果还要 N 个公有 IP,怎么缓解 IPv4 地址耗尽?真正常用的是 NAPT,也就是同时转换 IP 地址和端口号。
多数网络应用都使用 TCP 或 UDP。NAPT 把“内网 IP + 内网端口”映射成“公网 IP + 公网端口”。这样,多台内网主机可以共享同一个公网 IP,只要端口不同,NAT 设备就能通过转换表把返回数据送回正确的内网主机。

NAPT 通过转换表记录内网地址端口与公网地址端口的映射,让多个内网连接共享同一个公网 IP。
NAT 也会带来边界
NAT 很实用,但它不是没有代价。文中列了几个典型问题。第一,外部无法主动和 NAT 内部服务器建立连接,因为转换表里没有现成记录。只有内网主机先发起连接,NAT 设备才知道应该建立怎样的映射关系。
第二,转换表的生成和转换操作会带来性能开销。每个连接都要查表、改地址、改端口,再把返回数据按表项转回去。家用路由器流量不大时感受不明显,连接数很高时就会成为设备负担。
第三,NAT 设备重启会影响连接。文中提到,在 TCP 场景下,首次握手发出 SYN 后就会生成转换表,连接关闭时表项再删除。如果路由器中途重启,转换表没了,已有 TCP 连接也就很难继续保持。
实际配置时先问三个问题
看到一个 IP 和掩码,先问第一个问题:它的网络地址是什么?比如 `192.168.1.23/24` 的网络地址是 `192.168.1.0`。这能判断两台机器是否在同一网段,也能判断默认网关配置是否合理。
第二个问题:这个网段能放多少主机?`/24` 常见可用主机数是 254,`/30` 常用于点到点链路,因为可用地址很少;`/16` 能放很多主机,但广播域也更大,不一定适合直接拿来当一个扁平局域网。
第三个问题:出公网时有没有 NAT?如果有,外部看到的通常不是内网私有 IP,而是 NAT 后的公网地址和端口。排查接口来源、回调失败、内网服务暴露、长连接断开时,这个问题经常比代码本身更关键。
面试里怎么讲
如果被问 IP 地址和子网掩码,可以这样说:IPv4 地址是 32 位,逻辑上分为网络号和主机号。CIDR 用 `a.b.c.d/x` 表示前 x 位是网络号;子网掩码则通过连续的 1 标识网络位、0 标识主机位。IP 地址和子网掩码按位 AND,可以得到网络地址。
如果被问为什么要区分网络号和主机号,就说两台主机通信前要判断是否在同一网络。网络地址相同,可以在本网络内直接通信;网络地址不同,就需要交给路由器按目标网络号转发。
如果被问 NAT,可以补一句:NAT 把内网私有地址转换成公网地址,常见的 NAPT 会同时转换 IP 和端口,让多台内网主机共享同一个公网 IP。但它依赖转换表,所以外部主动访问、设备重启、表项过期都可能带来连接问题。
常见问题
CIDR 里的 /24 是什么意思?
`/24` 表示 IPv4 地址前 24 位是网络号,剩下 8 位是主机号。常见的 `192.168.1.0/24` 可用主机地址通常是 `192.168.1.1` 到 `192.168.1.254`。
子网掩码和 CIDR 是两套东西吗?
不是。它们都在表达网络号和主机号的切分方式。CIDR 用 `/x` 表示网络位长度,子网掩码用类似 `255.255.255.0` 的形式表示哪些位属于网络号。
NAT 为什么能缓解 IPv4 地址不够?
常见的 NAPT 会同时转换 IP 地址和端口号,多台内网主机可以共享一个公网 IP,并通过不同公网端口区分不同连接。