计算机网络 - 彻底理解 CIDR、子网掩码与网段划分
文章目录引言一、10.100.100.100/32 到底是什么意思二、CIDR 是什么为什么今天大家都在用它三、理解 CIDR 的关键前缀长度到底在说什么四、把 IP 写成二进制你就一下子明白了五、常见 CIDR 速查表六、为什么 /24 看起来有 256 个地址但可用主机数常常不是 2561. 地址总数和可用主机数不是一回事2. 传统子网里有两个地址通常不能分给主机3. 但别把这个规则绝对化七、一个例子把网段范围算清楚八、为什么今天的开发者必须看懂 CIDR1. 云网络和 VPC2. 安全组、ACL 和白名单3. Kubernetes 和容器网络4. 路由聚合和跨网络互联九、CIDR 和子网掩码是什么关系十、几个最容易犯错的地方1. 把 /32 当成一个很小的网段而不是单主机2. 把 /24 理解成“255 个主机”3. 以为 0.0.0.0/0 是一个普通网段4. 忽略网段冲突5. 只会背不会算十一、开发和运维里几个高频场景应该怎么读场景一数据库白名单场景二办公内网开放场景三默认路由场景四Kubernetes Service 网段场景五单机静态路由十二、如果只记三件事应该记什么第一CIDR 的 /N 表示前缀长度不是地址数量第二/32 只表示一个 IP第三前缀越长网段越小结语附一张简版速查卡引言很多人第一次看到10.100.100.100/32这种写法时第一反应都是一样的这到底是一个 IP还是一个网段后面的/32又是什么意思如果你只是在防火墙白名单、安全组、路由表、Kubernetes 配置或者云厂商 VPC 控制台里偶然碰到它通常只需要记住一句话就够了10.100.100.100/32表示一个单独的 IP 地址只包含这一台主机。但如果只停留在这个结论你后面很容易继续困惑。为什么/32只表示一个地址为什么/24经常出现在局域网里为什么192.168.1.0/24看起来有 256 个地址但实际可用主机数常常不是 256为什么有的地方写255.255.255.0有的地方写/24为什么云网络、容器网络、路由聚合都在用 CIDR这篇文章就从10.100.100.100/32这个最小的例子出发把 CIDR 这套东西一次讲清楚。你不需要有很强的网络基础只要对 IPv4 地址稍微有一点印象就可以顺着往下看。一、10.100.100.100/32到底是什么意思先直接给结论。10.100.100.100/32是一种CIDR 表示法可以拆成两部分来看10.100.100.100是 IPv4 地址/32表示网络前缀长度是 32 位IPv4 地址总长度是 32 位。如果前缀长度也是 32 位就意味着这 32 位全部被固定住了没有任何位可以变化。所以它代表的不是一个地址段而是只匹配10.100.100.100这一个 IP换成传统子网掩码的写法就是10.100.100.100 255.255.255.255也就是我们常说的主机路由或者单 IP 匹配。这也是为什么在很多系统里你会看到这样的配置防火墙白名单允许10.100.100.100/32安全组规则仅放行203.0.113.8/32某条静态路由目标是一个/32某个 VPN 只给一台主机下发精确路由它们的意图都很明确不是放一个网段而是只认这一台机器。二、CIDR 是什么为什么今天大家都在用它CIDR 是Classless Inter-Domain Routing的缩写中文通常叫无类别域间路由。这个名字看起来有点学术但它解决的问题其实很实际。早期 IPv4 地址分配采用 A 类、B 类、C 类这种固定分类方式。比如A 类网络默认子网掩码是255.0.0.0B 类网络默认子网掩码是255.255.0.0C 类网络默认子网掩码是255.255.255.0这种划分方式简单但很浪费。举个很直观的例子一个单位如果只需要几百个 IP给它一个 C 类地址可能不够给它一个 B 类地址又太大。中间没有细粒度空间。结果就是地址浪费严重路由表也会迅速膨胀。CIDR 的核心改进就是不再死守 A、B、C 类而是直接用前缀长度来表示网络规模。于是就有了今天这种写法192.168.1.0/2410.0.0.0/8172.16.0.0/1210.100.100.100/32这种写法有两个巨大好处它更灵活网段可以按实际需要切分它更适合路由聚合能降低路由表规模所以你今天在 Linux、云平台、交换机、路由器、Kubernetes、Service Mesh、VPN、ACL、WAF、安全组里看到的几乎都是 CIDR 表示法。三、理解 CIDR 的关键前缀长度到底在说什么理解 CIDR最关键的是理解/N里的这个N。/N的意思不是“有 N 个地址”而是前 N 位是网络位剩下的位是主机位。IPv4 总共有 32 位所以/8表示前 8 位固定后 24 位可变/16表示前 16 位固定后 16 位可变/24表示前 24 位固定后 8 位可变/32表示前 32 位固定后 0 位可变你可以把它理解成一把尺子。前缀越短可变空间越大网段越大。前缀越长可变空间越小网段越小。这是 CIDR 最核心的直觉。四、把 IP 写成二进制你就一下子明白了IPv4 地址一共 32 位通常写成 4 段十进制每段 8 位比如10.100.100.100写成二进制就是10 00001010 100 01100100 100 01100100 100 01100100合起来是00001010 01100100 01100100 01100100如果后面跟的是/32意思就是11111111 11111111 11111111 11111111前 32 位全部是网络位也就是全部固定不能变化。所以这个网段里只剩一个值也就是它自己。如果后面跟的是/24意思就是11111111 11111111 11111111 00000000也就是前三段固定最后一段可以变化。这时10.100.100.0/24表示的就是从10.100.100.0到10.100.100.255一整段地址空间。所以很多人背/24、/16、/8背不住原因不是 CIDR 难而是没有把它跟二进制的“固定多少位、还能变多少位”联系起来。一旦这层关系想通了CIDR 就不再是死记硬背。五、常见 CIDR 速查表下面这张表是最常用的 IPv4 CIDR 速查表基本足够应付大多数开发和运维场景。CIDR子网掩码地址总数常见理解/8255.0.0.016,777,216很大的网段/16255.255.0.065,536中等规模网段/24255.255.255.0256最常见的小网段/25255.255.255.128128把/24切成两半/26255.255.255.19264更小的子网/27255.255.255.22432小规模分段/28255.255.255.24016常用于小型网络/29255.255.255.2488常见于点状分配/30255.255.255.2524传统点对点链路/31255.255.255.2542点对点链路特例/32255.255.255.2551单个主机如果你只想快速记忆最实用的是这四条/8看第 1 段/16看前 2 段/24看前 3 段/32精确到完整 IP比如192.168.0.0/16就是192.168.x.x192.168.1.0/24就是192.168.1.x203.0.113.8/32就只是一台主机六、为什么/24看起来有 256 个地址但可用主机数常常不是 256这是初学网络时最容易疑惑的地方之一。1. 地址总数和可用主机数不是一回事CIDR 计算出来的是地址总数公式是地址总数 2^(32 - 前缀长度)所以/24是2^(32-24) 256/16是2^(32-16) 65536/32是2^(32-32) 1但“总数”不等于“都能分给主机”。2. 传统子网里有两个地址通常不能分给主机以192.168.1.0/24为例它的地址范围是192.168.1.0 - 192.168.1.255这里通常有两个特殊地址192.168.1.0是网络地址192.168.1.255是广播地址所以传统意义上可分配给主机的地址是192.168.1.1 - 192.168.1.254也就是 254 个。这就是为什么很多人会说/24有 256 个地址但只有 254 个可用主机地址3. 但别把这个规则绝对化在现代网络场景里这个结论要加前提。因为有些场景不是“传统二层广播网络”而是点对点链路、隧道接口、主机路由、云厂商虚拟网络规则会有变化。比如/31在点对点链路上可以有效使用两个地址/32本来就不是拿来分配一个“网段”的而是表示单主机某些云平台子网里还会额外保留几个地址不完全等于传统理论值所以更准确的说法是CIDR 先定义地址空间实际可用地址数还要结合网络场景来理解。七、一个例子把网段范围算清楚假设你看到这样一个网段10.100.100.0/24它的含义是前 24 位固定最后 8 位可以变化所以最后一段从二进制00000000变化到11111111也就是十进制0到255。地址范围就是10.100.100.0 - 10.100.100.255再看一个10.100.100.128/25/25说明最后一段里前 1 位固定剩下 7 位可变。128的二进制是10000000于是这个网段的最后一段范围是10000000 - 11111111也就是十进制128 - 255所以整个网段范围是10.100.100.128 - 10.100.100.255同理10.100.100.0/25就是10.100.100.0 - 10.100.100.127这就是把一个/24切成两个/25。你会发现一旦理解了前缀长度和二进制可变位的关系算网段范围根本不用背模板。八、为什么今天的开发者必须看懂 CIDR很多人以为 CIDR 只是网络工程师的基本功和应用开发关系不大。这个判断放在十几年前还勉强说得过去但在今天已经不成立了。原因很简单现代软件系统越来越依赖网络边界、访问控制和基础设施编排而这些地方几乎都绕不开 CIDR。1. 云网络和 VPC在公有云里创建 VPC 时第一步通常就是指定网段比如10.0.0.0/16然后你再继续切子网10.0.1.0/2410.0.2.0/2410.0.3.0/24如果一开始网段规划太小后面扩容会很难看。如果一开始规划混乱和办公网、IDC、其他 VPC、VPN 网段冲突后面连通性会非常痛苦。所以 CIDR 不只是“能看懂”还关系到网络设计是否能扩展。2. 安全组、ACL 和白名单这是开发者最常遇到的场景之一。比如203.0.113.10/32只允许你的办公出口 IP10.10.0.0/16允许整个内网访问0.0.0.0/0允许所有 IPv4 地址访问这里面最危险同时也最常见的就是误把网段放大。原本你想放行一台机器应该写/32。结果你写成了/24一下就把整个小网段都放进来了。这类错误在数据库白名单、堡垒机策略、对象存储访问控制、云防火墙里都很常见。3. Kubernetes 和容器网络Kubernetes 里经常能看到这些概念Pod CIDRService CIDRNode CIDR比如某个集群配置Pod CIDR10.244.0.0/16Service CIDR10.96.0.0/12如果你完全看不懂 CIDR就很难判断集群地址空间够不够是否会和现有 VPC 冲突多集群互联时是不是会撞网段为何某些 Pod 无法跨网段访问容器编排看起来是平台层问题但排查网络时CIDR 就是基础语言。4. 路由聚合和跨网络互联CIDR 的一个重要价值是路由聚合。比如你有四个连续的/24网段192.168.0.0/24192.168.1.0/24192.168.2.0/24192.168.3.0/24如果它们地址连续且边界对齐就可以聚合成一个更大的网段192.168.0.0/22这样做的意义是路由表更简洁网络传播的前缀更少管理成本更低这也是 CIDR 诞生时要解决的核心问题之一。今天在 BGP、IDC 互联、云专线、企业 VPN 设计里这个思想依然非常重要。九、CIDR 和子网掩码是什么关系很多资料会把 CIDR 和子网掩码分开讲结果越讲越绕。其实它们描述的是同一件事只是写法不同。比如/24等价于255.255.255.0/16等价于255.255.0.0/32等价于255.255.255.255原理就是把前缀长度转换成二进制掩码网络位写1主机位写0例如/2411111111.11111111.11111111.00000000转成十进制就是255.255.255.0例如/2611111111.11111111.11111111.11000000转成十进制就是255.255.255.192所以当你在不同系统里看到下面两种写法时不要觉得它们是两套东西192.168.1.0/24IP: 192.168.1.10 Mask: 255.255.255.0本质上表达的是同一个网络范围。十、几个最容易犯错的地方1. 把/32当成一个很小的网段而不是单主机/32不是“小网段”而是“没有主机位了”。它表示一个确定的、唯一的地址。2. 把/24理解成“255 个主机”/24总地址数是 256。在传统子网场景下可用主机常说是 254。这两个数字不要混淆。3. 以为0.0.0.0/0是一个普通网段0.0.0.0/0的意思是前缀长度为 0也就是不固定任何位。换句话说它匹配所有 IPv4 地址这也是默认路由和“全网开放”经常出现/0的原因。4. 忽略网段冲突你在本地实验时随手用了一个10.0.0.0/8下的网段可能没问题。但一旦接入公司网络、云 VPC、VPN 或多集群环境就很可能和别人撞地址。今天的网络设计里选 CIDR 不只是语法问题更是规划问题。5. 只会背不会算只背/24、/16、/8没问题但一旦遇到/27、/22、/19就容易卡住。真正实用的办法不是死背全部结果而是记住这两个原则前缀越长网段越小主机位有多少就有多少变化空间十一、开发和运维里几个高频场景应该怎么读下面给几个非常常见的实际例子。场景一数据库白名单203.0.113.5/32含义很明确只允许这一台主机访问数据库。这是最常见也最安全的精确授权方式之一。场景二办公内网开放10.20.0.0/16说明允许整个10.20.x.x网段访问。这种配置要确认你是否真的需要放这么大。场景三默认路由0.0.0.0/0表示匹配所有目标地址。路由器遇到更具体的路由时优先走更具体的兜底才走默认路由。场景四Kubernetes Service 网段10.96.0.0/12这通常是集群内部虚拟服务地址空间不代表所有地址都会真的分配出去但它定义了服务 IP 的可用范围。场景五单机静态路由10.100.100.100/32 via 192.168.1.1表示去往10.100.100.100这个目标主机的流量下一跳走192.168.1.1。这是非常典型的主机路由。十二、如果只记三件事应该记什么如果你不想一次记太多至少把下面三件事记住。第一CIDR 的/N表示前缀长度不是地址数量/24不是 24 个地址/32也不是 32 个地址。它表示的是“前多少位被固定”。第二/32只表示一个 IP10.100.100.100/32只匹配10.100.100.100。这是你在安全组、ACL、白名单里最需要一眼看懂的东西。第三前缀越长网段越小这个直觉非常重要/8很大/16较大/24常见/32最小只剩一个地址很多看似复杂的题最后都能归结到这条直觉上。结语10.100.100.100/32这个写法本身并不复杂真正让人困惑的从来不是它的语法而是它背后的网络思维。一旦理解了 CIDR 的核心逻辑很多原本零散的问题都会连起来为什么/32是单主机为什么/24常见为什么子网掩码和前缀长度能互相转换为什么安全组、VPC、Kubernetes、路由聚合都在使用这套表示法为什么一个错误的前缀长度可能直接把权限范围放大 256 倍甚至更多对今天的开发者来说CIDR 不是一个只存在于教材里的概念。它已经渗透到云网络、容器平台、访问控制、跨网络互联和故障排查的每一个角落。你不一定需要成为网络专家但你至少应该做到一件事当你再看到10.100.100.100/32、192.168.1.0/24、0.0.0.0/0这种配置时脑子里能立刻浮现出它究竟代表多大的范围以及它会影响谁。这就够用了。附一张简版速查卡写法含义x.x.x.x/32单个 IPx.x.x.0/24一个常见小网段x.x.0.0/16一个中等网段x.0.0.0/8一个很大的网段0.0.0.0/0所有 IPv4 地址如果以后你还想继续往下走下一步最值得弄懂的两个主题是如何快速计算任意 CIDR 的网络地址、广播地址和可用地址范围IPv6 里的 CIDR 为什么更常见以及为什么/64在 IPv6 世界里几乎是默认常识这两块打通之后你对现代网络配置的理解会再上一个台阶。