网络这行干久了,你会发现一个挺有意思的现象:很多人能噼里啪啦敲一堆命令把设备配通,但你要问他“这个掩码为什么是255.255.255.0而不是255.255.0.0”,他立马卡壳。更常见的是,两台机器明明IP看着差不多,一个192.168.1.10一个192.168.2.10,插在同一台交换机上就是ping不通,然后开始怀疑网线、怀疑交换机、怀疑人生。其实根子往往就出在两个最基础的概念上——子网掩码和网段。这两个东西属于那种“不懂也能凑合用,但一旦出问题就抓瞎”的典型,今天我就按自己平时带人、排障的思路,把这块掰开揉碎讲清楚,从二进制原理到实际判断方法,再到常见的坑,尽量让刚入行的朋友看完就能上手用。
1. 先搞清楚IP地址到底是个什么东西
1.1 IP地址的本质是一串32位二进制数
平时我们说的“192.168.1.10”,这叫点分十进制写法,纯粹是为了人看着舒服。机器眼里它其实是一串32位的二进制:11000000.10101000.00000001.00001010。每段8位,四段拼起来正好32位。这个认知特别重要,因为后面讲掩码、讲网段、讲与运算,全是在二进制层面操作的。你如果一直停留在十进制思维里,很多现象是解释不通的。
我一般给人讲这块会打个比方:IP地址就像门牌号,但这个门牌号不是随便编的,它内部有严格的层级结构。前面一部分位代表“你在哪个小区”,后面一部分位代表“你是小区里哪一户”。而子网掩码的作用,就是告诉你“从第几位开始切分”——前面是小区号,后面是户号。没有掩码,光看一个IP,你根本不知道哪部分是网络、哪部分是主机。
1.2 网络部分和主机部分的划分逻辑
一个IP地址被掩码切成两段:网络部分(Network)和主机部分(Host)。同一网段内的所有设备,网络部分必须完全一致,主机部分各不相同。举个例子,192.168.1.10/24和192.168.1.20/24,前24位都是192.168.1,这就是它们的网络部分,完全一样,所以属于同一网段;最后8位分别是10和20,是主机部分,不一样,所以是两台不同的设备。
这里有个容易混淆的点:网络部分和主机部分各占多少位,不是固定的,完全由掩码决定。同样是192.168.1.10,配/24掩码时网络部分是前24位,配/16掩码时网络部分就变成前16位了。也就是说,一个IP属于哪个网段,不是IP自己说了算,是IP加掩码共同决定的。这一点后面还会反复提到,因为太多人栽在这上面。
1.3 私有地址、公有地址和特殊地址的边界
顺带把地址范围也理一理,实际工作中经常要判断“这个地址能不能用”。私有地址是内网随便用的,不会在公网上路由,主要包括三段:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。家里路由器、公司内网基本都是这几段。公有地址是全球唯一的,需要分配才能用。另外还有几个特殊地址要记住:127.0.0.1是本地回环,测试本机协议栈用;169.254.x.x是自动私有地址,通常意味着DHCP没拿到地址,看到这个基本可以判断是获取IP失败了;还有每个网段的第一个地址是网络地址、最后一个地址是广播地址,这两个不能分配给主机。
提示:判断一个地址是否可用,先看它是不是网络地址或广播地址,再看是不是落在保留段里。很多“配了IP却不通”的问题,第一步就该查这个。
2. 子网掩码:那个决定“切在哪”的关键角色
2.1 掩码的二进制形态与“1的个数”含义
子网掩码本身也是一个32位二进制数,规则很简单:左边连续的一串1,右边连续的一串0,中间不能穿插。1的个数就是网络部分的位数,0的个数就是主机部分的位数。比如255.255.255.0,二进制是24个1后面跟8个0,所以叫/24,网络部分24位,主机部分8位。255.255.0.0就是16个1加16个0,叫/16。
这里必须强调“连续”两个字。掩码的1必须从最左边开始连续排布,不能出现1010这种断续的情况。这是协议规定的,不是随便定的。所以你看到255.0.255.0这种掩码,别管它十进制看着多整齐,二进制层面是不合法的,设备一般会直接拒绝配置。我见过有人为了“凑”一个奇怪的网段去手填这种掩码,结果配置根本下不进去,还以为是设备bug。
2.2 常见掩码对照表与CIDR写法
实际工作中最常打交道的掩码就那么几个,我整理成表,方便随时对照:
| CIDR写法 | 十进制掩码 | 网络位 | 主机位 | 每网段可用主机数 |
|---|---|---|---|---|
| /8 | 255.0.0.0 | 8 | 24 | 约1677万 |
| /16 | 255.255.0.0 | 16 | 16 | 65534 |
| /24 | 255.255.255.0 | 24 | 8 | 254 |
| /25 | 255.255.255.128 | 25 | 7 | 126 |
| /26 | 255.255.255.192 | 26 | 6 | 62 |
| /27 | 255.255.255.224 | 27 | 5 | 30 |
| /28 | 255.255.255.240 | 28 | 4 | 14 |
| /30 | 255.255.255.252 | 30 | 2 | 2 |
可用主机数的算法是2的主机位次方减2,减掉的2就是网络地址和广播地址。比如/24主机位8位,2的8次方是256,减2等于254。/30主机位2位,2的2次方是4,减2等于2,所以/30正好够点对点链路两端各一个地址,这也是为什么运营商互联链路爱用/30。
2.3 为什么掩码写错会引发“灵异”故障
掩码配错导致的故障特别隐蔽,因为现象往往不是“完全不通”,而是“部分通部分不通”,很容易让人误判。举个我实际遇到过的场景:两台服务器,A是10.1.1.10/24,B是10.1.1.20/16。从A ping B,A认为自己和B不在一个网段(A的网络部分是10.1.1,B在A眼里网络部分是10.1),于是A把包发给网关,网关再转回来,绕一圈能通。但从B ping A,B认为A和自己同网段(B的网络部分是10.1,A的10.1.1在B眼里也属于10.1网段),于是B直接发ARP找A,可A的实际网络配置和B的认知不一致,ARP可能就出问题,导致不通。
这种“单向通、反向不通”或者“时通时不通”的现象,十有八九是掩码不一致。排查的时候别光看IP,一定要把两端的掩码一起看。我个人的习惯是,只要遇到同网段通信异常,第一反应就是核对掩码,比查路由、查防火墙都快。
3. 网段:同一“小区”的判定标准
3.1 网段的严格定义:网络地址相同即同网段
所谓“同一个网段”,严格来说就是:两个IP分别和自己的掩码做与运算,得到的网络地址完全相同。与运算的规则是“两位都是1结果才是1,否则为0”。拿192.168.1.10/24举例,IP的二进制和掩码的二进制逐位与,前24位保留原样得到192.168.1,后8位因为掩码是0全部清零,所以网络地址是192.168.1.0。另一个192.168.1.20/24算出来也是192.168.1.0,两者网络地址一样,判定为同网段。
这个“与运算”是判断网段的唯一标准,没有例外。你肉眼看着像不像,都不算数,得按位算。当然实际工作中不用真拿纸笔算二进制,有更快的办法,下面会讲。
3.2 网络地址、广播地址与可用地址范围
每个网段都有三个关键地址要分清。第一个是网络地址,主机位全0,代表这个网段本身,不能配给设备;最后一个是广播地址,主机位全1,发给它的包会被网段内所有设备收到,也不能配给设备;中间那些才是可用的主机地址。
以192.168.1.0/24为例:网络地址192.168.1.0,广播地址192.168.1.255,可用范围192.168.1.1到192.168.1.254,共254个。再以192.168.1.64/26为例:网络位26位,主机位6位,网络地址是192.168.1.64,广播地址是192.168.1.127,可用范围是192.168.1.65到192.168.1.126,共62个。划分子网的时候,这几个边界一定要算准,配错一个地址段就废了。
3.3 快速判断两个IP是否同网段的实用方法
不用算二进制也能快速判断,我常用两个办法。第一个是“掩码对齐法”:把掩码换算成它覆盖到第几段。比如/24覆盖前三段,那就直接比前三位,192.168.1.x和192.168.1.y前三位都是192.168.1,同网段;192.168.1.x和192.168.2.y第三位不同,不同网段。这个方法对/8、/16、/24这种整段掩码特别好用,一眼就能看出来。
第二个是“借位法”,针对/25到/30这种非整段掩码。以/26为例,它把最后一段切成4块,每块64个地址:0-63、64-127、128-191、192-255。判断时先看两个IP最后一段落在哪个块里,同一块就是同网段。比如192.168.1.70和192.168.1.100,都在64-127这块,同网段;192.168.1.70和192.168.1.130,一个在64-127一个在128-191,不同网段。这个方法熟练之后心算就能出结果,比掏计算器快。
注意:借位法只适用于最后一段做子网划分的情况。如果掩码借位借到了第三段甚至第二段(比如/12、/20),就得往前一段推,逻辑一样但要多看一位。拿不准的时候老老实实按位与,别图快。
4. 掩码和网段在实际配置中的配合逻辑
4.1 主机配置IP时掩码为什么必须一起给
配IP的时候,操作系统要求同时填掩码,不是多此一举。因为主机要靠掩码来判断“目的地址和我是不是一个网段”,从而决定这个包是直接发给对方,还是交给网关转发。这个判断过程叫路由决策,是每发一个包都要做一次的。
具体逻辑是这样的:主机拿到目的IP,用自己的掩码和目的IP做与运算,算出目的网络地址;再和自己的网络地址比。一样,说明目的主机在同网段,直接ARP找对方MAC,二层发过去;不一样,说明在别的网段,把包丢给默认网关,让网关去操心。所以掩码填错,这个判断就错了,包要么该直发却绕了网关,要么该给网关却直发导致发不出去。
4.2 网关地址必须落在本网段内的原因
默认网关的地址必须和本机在同一个网段,这是硬性要求。原因还是上面那套逻辑:主机要把包交给网关,前提是它认为网关和自己同网段,才能直接二层送达。如果网关地址不在本网段,主机压根不会把包发给它,而是继续找“更匹配的网关”,找不到就丢弃。
我见过有人把网关配成另一个网段的地址,然后纳闷为什么上不了网。这种情况设备通常会直接报错或者静默丢弃,因为路由表里根本生成不了一条有效的默认路由。配置的时候养成习惯:配完IP先确认网关和自己同网段,这一步能省掉后面大量排查时间。
4.3 跨网段通信时数据包的完整走向
理解网段之后,跨网段通信的流程就顺了。假设A在192.168.1.0/24,B在192.168.2.0/24,中间有路由器。A要发数据给B:A先判断B不在自己网段,于是把包发给网关(网关是192.168.1.1,和A同网段);网关收到后查路由表,发现192.168.2.0/24从另一个接口出去,于是转发;B收到后回复,同样走一遍反向流程。
这个过程中,源IP和目的IP始终不变,变的是二层的源MAC和目的MAC,每经过一个路由节点就换一次。很多人搞不清“为什么跨网段要网关”,其实就是因为二层广播域被网段隔开了,A没法直接ARP到B的MAC,只能靠网关做三层转发。把这条链路想通,后面学路由、学NAT都会顺很多。
5. 排障现场:那些年和掩码网段有关的坑
5.1 同网段ping不通的排查顺序
遇到同网段ping不通,我一般按这个顺序查:先看两端IP和掩码是否真的同网段(别信“看着像”,要算);再看ARP表里有没有对方的MAC,没有说明二层就没通;然后查VLAN划分,同一网段被划到不同VLAN里是最常见的“隐形隔离”;最后看端口安全、ACL这些。这个顺序是从底层往上层走,能最快定位问题层级。
有一次现场就是典型:两台机器IP都是192.168.1.x/24,插同一台交换机,就是不通。查了半天发现两个端口一个划在VLAN 10一个划在VLAN 20,虽然IP同网段,但二层广播域被VLAN隔开了,ARP根本过不去。这种问题光看IP和掩码是看不出来的,必须查二层配置。
5.2 掩码不一致导致的“单向通”案例拆解
前面提过掩码不一致会导致单向通,这里展开说下排查思路。现象是A能ping通B,B ping不通A。第一步分别在两端执行查看路由表的命令,看它们各自认为的目标网段是什么。A的路由表里192.168.1.0/24指向直连,B的路由表里可能是192.168.0.0/16指向直连,两者对“同网段”的认知不同。第二步在B上ping A的同时抓包,会发现B发出的ARP请求A能收到并回复,但A回复的包源地址是192.168.1.10,B用自己的/16掩码一算,认为这个回复来自“同网段”,可它期待的可能是另一个逻辑,导致处理异常。
修复很简单,把两端掩码统一即可。但排查过程的关键是:不要只在一端看,两端都要看,而且要对比着看。单看一端永远发现不了“认知不一致”这个问题。
5.3 子网划分时最容易算错的边界
划分子网时,网络地址和广播地址算错是高频错误。尤其是借位之后,很多人习惯性地把“整段的第一和最后”当边界,其实不对。比如把192.168.1.0/24切成/26,四个子网的网络地址分别是.0、.64、.128、.192,广播地址分别是.63、.127、.191、.255。如果你把第二个子网的可用范围写成.65到.128,那就错了,.128是第三个子网的网络地址,不能给第二个子网用。
我的经验是,划分之前先把每个子网的起止范围列成表,配完再逐条核对一遍。别嫌麻烦,配错一个地址段,后面可能是一整片设备通信异常,返工成本远高于事前核对。
6. 几个能直接上手的计算与验证技巧
6.1 用系统命令快速验证网段判断
Windows下用ipconfig看IP和掩码,Linux下用ip addr或ifconfig。想看路由决策结果,Windows用route print,Linux用ip route,重点看目标网段对应的出口是直连还是网关。判断两个地址是否同网段,最直接的是看路由表里有没有对应的直连条目。
还有一个实用技巧:Linux下ip route get 目的IP能直接告诉你这个包会从哪个接口出去、下一跳是谁,等于把主机的判断过程直接摊给你看。排查“到底走没走网关”这类问题时,这条命令比反复ping高效得多。
6.2 心算子网范围的借位口诀
针对最后一段借位的情况,我总结了个口诀:借1位切2块每块128,借2位切4块每块64,借3位切8块每块32,借4位切16块每块16。记住这个,/25到/28的范围心算就能出。比如/27,切8块每块32,范围就是0-31、32-63、64-95……以此类推。再结合“网络地址是块起点、广播地址是块终点减1”,边界就不会错。
这个口诀只覆盖最后一段,如果借位跨段了,还是建议用计算工具或者按位算。工具不丢人,算错才丢人。
6.3 配置完成后的连通性验证清单
配完IP和掩码,别急着交付,按这个清单过一遍:第一,本机ip addr确认IP和掩码都生效了;第二,ping网关,通说明二层和网关配置没问题;第三,ping同网段另一台设备,通说明网段判断和ARP正常;第四,ping一个跨网段地址,通说明路由和网关转发正常;第五,如果有DNS需求,再测域名解析。这五步走完,基本能覆盖绝大多数配置问题。
提示:验证顺序一定是从近到远,先本机再网关再跨网段。跳过前面直接测外网,出了问题根本分不清是哪一层的事。
7. 我个人在这些年踩坑后沉淀的几点体会
干这行时间长了,越来越觉得基础概念的价值不在于“知道”,而在于“形成条件反射”。现在我看到一个IP,脑子里会自动把它和掩码绑在一起看,看到“同网段不通”第一反应就是查掩码和VLAN,这些都是被故障逼出来的习惯。新手最容易犯的错,是把IP和掩码割裂开看,觉得IP是主角掩码是配角,实际上两者是绑定的,缺了任何一个都没法判断网段。
另外一个体会是,别过度依赖“经验直觉”。我见过太多人凭“看着像”就下结论,结果在非整段掩码上翻车。/24看前三段确实快,但遇到/26、/27还这么看,必错。该算的时候老老实实算,该用工具就用工具,这不丢人,把网络配通了才是本事。
最后分享一个我常用来带新人的小练习:给一组IP和掩码,让对方判断任意两个是否同网段,并说出各自的网络地址和广播地址。练上二十组,基本就有感觉了。这个方法比看十遍理论都管用,因为网段判断这件事,本质是个熟练工种,算得多了自然就快了。