CIDR与子网划分实战:广播地址计算与IP地址规划精讲

CIDR与子网划分实战:广播地址计算与IP地址规划精讲 CIDR这玩意儿平时配置IP、写路由、做防火墙策略天天都要打交道但很多人对它的理解就停留在“/24就是255.255.255.0”这个层面。真到了面试、考试或者排障的时候碰到几个变长子网掩码的题目脑子里瞬间就乱了尤其是广播地址计算这种细节一不留神就翻车。前阵子整理知识库翻出两道特别经典的IP子网计算题一道考CIDR聚合的基本功一道考广播地址的边界条件。这两道题刷完基本上子网划分这块就没啥死角了。正好借这个机会把它们掰开揉碎讲清楚从二进制原理到实际配置一次说透。1. CIDR与子网划分的基础知识梳理在动手解题之前得先把CIDR这层窗户纸捅破。很多教程上来就讲子网掩码多少位、网络位主机位但没讲清楚这些东西到底是怎么来的。你如果理解了二进制的本质CIDR这东西根本不需要死记硬背。1.1 IP地址的本质一串32位的二进制数IPv4地址之所以写成192.168.1.1这种点分十进制格式纯粹是为了方便人类阅读。它本质上是32位二进制数每8位一组也就是一个字节转换成十进制就是0到255之间的数。以192.168.1.1为例拆成二进制就是11000000 . 10101000 . 00000001 . 00000001192对应二进制的11000000168对应10101000都是按8421法则换算过来的。这个必须熟练因为算网络地址和广播地址的时候靠的就是二进制逐位运算。如果你二进制转换还不熟建议先练熟0到255的二进制写法这是基本功。那32位里哪些位代表网络、哪些位代表主机呢这就是子网掩码干的事。子网掩码同样是32位二进制数网络位全部置1主机位全部置0。比如255.255.255.0二进制就是11111111 . 11111111 . 11111111 . 00000000前24位是1后8位是0所以叫/24。CIDR表示法就是斜杠后面跟一个数字直接告诉你网络位有多少位。这个设计就是为了代替那串又长又难看的255.255.255.0写起来方便理解起来也直观。1.2 网络地址、广播地址、可用主机地址的关系拿到一个IP和一个掩码能做三件事算网络地址、算广播地址、算可用主机范围。这三件事在配置静态IP、做VLAN间路由、防火墙策略放行时缺一不可。网络地址的计算规则很简单把IP地址和子网掩码做“与”运算。所谓“与”运算就是两个都是1结果才是1只要有一个是0结果就是0。原理就是网络位不变、主机位清零这样就能把同一网段里所有主机归到一个网络标识下。广播地址的算法则是网络位的部分保持不变、主机位全部置1。也就是说广播地址是主机位能取到的最大值。为什么不能用这个地址配给设备因为它是用来向整个网段发广播的发到它上面的数据包会被这个网段里所有主机接收。你要是把它配给某台服务器那相当于这台服务器一个人抢了整条街的喇叭其他设备的信息传递肯定会出问题。可用主机地址就是网络地址和广播地址之间的所有地址减去首尾两个不能用的。比如/24网段有256个地址可用的是254个。这个“可用主机数 2^(32-掩码位) - 2”公式是网络题里最常用的一个。1.3 为什么CIDR能解决地址浪费问题早期的IP地址是分类寻址的A类固定8位网络位、B类固定16位、C类固定24位。这有个很大的问题B类地址段能容纳65534台主机但绝大多数公司根本用不了这么多IP地址被大量浪费。而C类又只有254个可用地址稍大点的网络不够用。CIDR就是为了打破这种固定分类而设计的。它不关心你是A类还是B类只看掩码位写的是多少。你可以用/23这种掩码把两个C类地址段合并成一个逻辑子网也可以用/26把一个C类网段再切成四份。这种灵活性让IP地址的分配可以精确匹配实际需求。后面要讲的两道题就是围绕CIDR的聚合和广播地址计算这两个核心场景展开的。理解了这些背景知识你就知道每道题到底在考什么。2. 第一道经典题CIDR聚合计算与网络划分这道题长这样某公司申请了一段公网IP从202.100.16.0开始一共需要约500个可用IP地址要求写出最合适的CIDR掩码、网络地址和可用地址范围。这题考的就是CIDR聚合。所谓聚合就是把多个连续的IP段合并成一个大的网络段用更短的掩码表示。核心逻辑是找到这些地址共同的网络位前缀相同前缀的位数就是这个聚合网络的掩码长度。2.1 从需求反推掩码位数先算主机位。500个可用IP意味着2的n次方减2要大于等于500。9位主机位可以提供510个可用地址512减28位只有254个不够用。所以主机位n至少等于9掩码位就是32减9等于23。也就是说这套方案需要的是一个/23的子网。512个地址去掉网络地址和广播地址可用510个正好满足500个的需求。这里有个细节很多人会忽略为什么是减2而不是减1或减3因为一个子网里有两个地址不能用一个是主机位全0的网络地址一个是主机位全1的广播地址。剩下的地址里第一个可用地址比网络地址大1最后一个可用地址比广播地址小1。2.2 按地址边界计算网络地址需求给的是从202.100.16.0开始但问题和坑就在这起始地址必须是在这个掩码下的合法网络地址边界上。换句话说不是随便拿一个IP就能说它是网络地址你得验证这个地址的主机位是不是全0。计算方法是把202.100.16.0转成二进制然后看后9位。202就不看了100也不动关键是第三段16。16的二进制是000100008位写全。整个地址的后9位是最后一段8位加上第三段的最低位1位00010000 00000000拆开来看第三段的最后一个bit是0最后一段8个bit全0。所以主机位9位全是0202.100.16.0恰好就在/23的边界上它就是网络地址。这个验证过程极其重要。因为/23会横跨两个第三段数字比如202.100.16.0/23的地址范围是202.100.16.0到202.100.17.255而它对应的两个/24子网就是202.100.16.0/24和202.100.17.0/24。如果题目给的起始地址是202.100.16.128那它就不在网络边界上整个配置就要重新设计。2.3 广播地址与地址范围推导有了网络地址202.100.16.0广播地址怎么算把主机位的9位全部置1。第三段16的二进制00010000由于/23的掩码占用第三段的前7位第三段还剩最后1位是主机位把它置1变成00010001也就是17。第四段8位全部置1变成255。所以广播地址是202.100.17.255。地址范围就是202.100.16.1到202.100.17.254共510个可用地址。这类题的原理解释清楚了关键是要明白掩码跨字节时边界怎么找。很多人在/23、/22这种跨越第三段边界的题目上出错都是因为只盯着第四段看忽略了第三段末尾也有几位是主机位。2.4 第二道题的实际参考网关配置与IP冲突这种聚合后的网段在实际配置中最常见的坑就是网关地址选择。假设上面这个/23网段里你打算把网关放在202.100.16.1那所有客户端的默认网关都要写成这个地址并且客户端的掩码必须写成255.255.254.0也就是/23对应的十进制。一旦某台机器的掩码写成了255.255.255.0/24它就认为202.100.17.0/24这个网段的机器和自己不在同一网段访问时要走网关转发。如果客户端和网关之间没有多余路由你就发现202.100.17.x的机器能通202.100.17.x202.100.16.x的机器能通202.100.16.x但两边互相访问不顺畅。这种问题排查起来相当隐蔽因为ping网关总是通的但跨段访问就卡住。这也是为什么很多做网络规划的老手都强调部署大子网之前先在纸上把广播域范围画出来把所有终端规划的起始地址、掩码、网关统一核对一遍。IP冲突在这种大子网里更容易发生因为可用地址多大家配置的时候往往不像/24那么小心。3. 第二道经典题广播地址计算与子网边界判断第二道题很多人在面试时被问过给出IP地址172.22.35.50和子网掩码255.255.255.192请计算网络地址、广播地址和可用地址范围。这题比第一道更考验对子网划分边界的理解。因为掩码不是常见的/24而是/26。255.255.255.192转换成二进制是11111111 . 11111111 . 11111111 . 11000000相当于网络位向主机位借了2位把原本的第四段256个地址均分成了4个子网每个子网64个地址。4个子网的网络地址分别是第四段0、64、128、192开头也就是172.22.35.0/26范围0到63172.22.35.64/26范围64到127172.22.35.128/26范围128到191172.22.35.192/26范围192到255那172.22.35.50落在哪个子网里看第四段50在0到63这个区间里所以网络地址就是172.22.35.0。3.1 通过二进制与运算验证网络地址为了让步骤更严谨还是用“与”运算验证一遍。50的二进制是00110010而192的二进制是11000000。两者按位与00110010 (50) 11000000 (192) -------- 00000000 (0)网络位部分因为掩码是1所以IP里的网络位原样保留主机位部分因为掩码是0清零。得出的结果是0说明网络地址就是172.22.35.0。这跟上面的区间判断结果一致。很多时候你用十进制直接想不清楚但只要回到二进制逐位与运算答案一定不会错。这也是我推荐所有网络工程师把二进制转换练到熟的原因。真到了大型网络排障脑子里能快速完成这种位运算处理效率会高很多。3.2 广播地址为什么不是255而是63接下来说关键点这个子网的广播地址是多少很多人第一反应是172.22.35.255。大错特错。广播地址是主机位全1的地址关键在于主机位有多少位。这个/26的子网主机位是6位都在第四段。把网络地址172.22.35.0的第四段也就是二进制00000000的后6位全部置1得到00111111 (63)所以广播地址是172.22.35.63而不是172.22.35.255。255是172.22.35.192/26这个子网的广播地址跟你这个子网一点关系都没有。这个错误很典型。很多人习惯了/24的广播地址最后一段是255于是不管掩码怎么变都觉得广播地址最后一段一定是255。但255是主类C段地址的最后一位只有/24掩码才能用。一旦用了可变长子网掩码每个子网的广播地址就只落在它自己的边界上不会跨越到别的子网。3.3 可用地址范围与特殊用途地址网络地址172.22.35.0广播地址172.22.35.63那可用地址就是从172.22.35.1到172.22.35.62共62个。这里有个细节要留意子网大小64个地址可用62个但你有没有想过172.22.35.0这个网络地址能不能作为主机地址使用严格来说它代表的是这个子网本身不能配给接口。但在某些特殊场景里比如点对点链路的接口配置有的人图省事会把网络地址也配上去这种操作在标准网络里是有问题的建议不要学。还有个坑是网关地址。假如你的网关配在172.22.35.62这是子网最后一个可用地址看起来挺规整。但一旦这个子网将来要扩容可用地址就只剩61个了因为网关吃掉一个。很多人在规划时把网关固定放在最后一个可用地址结果地址不够用要重新规划折腾半天。我个人的习惯是网关放在第一个可用地址或靠前的位置这样地址利用率更高管理也更清晰。3.4 子网划分的实际意义回到咱们热搜词里那些问题为什么要做子网划分为什么防火墙配置子网掩码时有人会把网段配成0这两个问题其实指向同一个核心广播域隔离和路由汇总。比如一个公司有三个部门财务部、技术部、行政部直接用一个大/24网段所有机器都在同一个广播域里。任何一台机器发ARP广播全段机器都能收到。如果部门之间要做访问控制防火墙策略就得写得很细很累。而把网段划分成多个子网每个部门一个子网部门之间用路由器或三层交换机做VLAN间路由防火墙策略只控制子网之间的数据流清晰太多。至于“防火墙子网配0”的疑问其实多半是没搞清楚防火墙的接口地址和远端网段地址的区别。有些设备上远端网段可以填0.0.0.0/0表示全网段而接口地址必须写真实地址。这跟子网划分不是一回事别搞混了。4. 常见误区与实战排查技巧实录这两道题做完基本的计算功底算是有了。但真正用在实际环境里还是会碰到各种奇奇怪怪的问题。我根据自己的实操经验把最常见的坑和排障方法整理了一遍。4.1 掩码写错导致跨网段不通的排查思路前阵子一个朋友公司搬家网络怎么也调不通。现象是办公电脑能上网但访问不了文件服务器。文件服务器IP是192.168.10.30办公电脑IP是192.168.10.45掩码都是255.255.255.0网关也指向同一个路由器。乍一看没问题都在192.168.10.0/24里面。但排查后发现办公电脑的掩码被设置成了255.255.255.128。这个掩码把192.168.10.0/25和192.168.10.128/25分成了两个子网。办公电脑在0到127这个子网里文件服务器在128到255这个子网里。两边认为对方不在同一个网段访问文件服务器时走网关但网关没配置到位于是断联。排查方法很简单在电脑上ping文件服务器看看返回的是“无法访问目标主机”还是“请求超时”。前者通常是网络层不可达先排查IP和掩码后者可能是防火墙拦截或链路问题。然后用命令查看本机IP配置检查掩码是否和设计一致。这种低级错误说多了都是泪。4.2 广播地址计算易错点速查表为了帮你快速自查我整理了一个速查表覆盖常见的掩码长度对应的子网大小、可用地址数和广播地址特征。掩码长度子网掩码子网地址数可用地址数广播地址特征/30255.255.255.25242每个子网第4个地址/29255.255.255.24886每个子网第8个地址/28255.255.255.2401614每个子网第16个地址/26255.255.255.1926462第四段为63、127、191、255/25255.255.255.128128126第四段为127或255/24255.255.255.0256254第四段为255/23255.255.254.0512510第三段奇数的255如17.255这个表的核心价值在于它帮你建立了“子网边界”的意识。拿到一个掩码先算子网大小再看某个IP落在哪个子网范围网络地址和广播地址自然就出来了。不需要背算一遍就会。4.3 常用工具与命令的实战用法Windows环境下排查IP配置问题最常用的是ipconfig和ping。ipconfig /all能看完整信息包括DHCP是否启用、网关是否正确、DNS配置如何。Linux环境下是ip addr或ifconfigCentOS和Rocky Linux配置静态IP的话一般改/etc/sysconfig/network-scripts/ifcfg-*文件Debian/Ubuntu则改/etc/network/interfaces或netplan配置。如果在局域网里要扫描哪些IP被占用了我试过Angry IP Scanner轻量好用扫一段很快。不过要注意扫描这种操作在某些企业网络里有安全审计要求别在没授权的情况下乱扫。至于“powershell登录过的IP地址”“qq查IP”这类热搜词提醒一下查询日志里登录过的IP用Windows事件查看器就能看到登录记录。但用IP去定位一个具体的人这种“查IP”的想法在网络环境里基本不现实。IP地址是随时可能变化的尤其现在NAT普及你看得到一个公网IP但公网IP背后可能是几十台设备。别把IP和身份直接画等号。4.4 一句话总结核心心法做了这么多年的网络配置和排障我的体会是子网划分和广播地址计算的核心就是时刻记住“主机位全0是网络地址主机位全1是广播地址”。这两个边界定死了剩下的一切都好办。具体到一个IP上只需要三步第一步根据掩码确定主机位有几位第二步把主机位清零得到网络地址第三步把主机位置1得到广播地址。所谓CIDR也不过是这套规则在无类地址上的延伸掩码几位网络位就到哪没有任何神奇之处。最后分享一个小技巧如果你不想每次手工算二进制可以用系统自带的计算器切换到程序员模式输入十进制数直接看二进制或者用网上的子网计算器核对结果。但工具只是验证用的思路必须在自己脑子里。真到了面试现场或者断网排障的时候什么工具都可能用不了能在纸上画出二进制才是真本事。这也就是为什么我说这两道题虽然基础却特别值得反复做。基本功扎实了复杂的路由聚合、VLSM扩展、IPv6的地址规划学起来都会顺畅得多。