ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

IP地址、子网掩码、网关:从原理到排障的完整指南

IP地址、子网掩码、网关:从原理到排障的完整指南 1. 从一个抓包现场说起为什么这三个概念总被混为一谈刚入行那会儿我在机房排查一个“能上内网、上不了外网”的故障。同事拍着胸脯说“网关配了肯定没问题”结果我一看网关地址压根不在本机子网里。那一刻我才真正意识到IP地址、子网掩码、网关这三样东西很多人是“照着模板填”的而不是“算出来”的。模板一换环境就翻车翻车了还不知道错在哪。这篇内容就是把这个坑填上。我会从实际配置和排障的角度把这三个概念拆开揉碎讲清楚它们各自解决什么问题、为什么必须配合使用、怎么算、怎么配、配错了会有什么现象。适合刚接触网络的新手也适合那些“配了几年但一直没搞明白原理”的运维、开发、嵌入式工程师。看完之后你拿到任何一个IP段都能自己推导出可用的地址范围、广播地址和网关位置而不是靠猜。先给一个最直白的类比后面所有细节都围绕它展开。把网络通信想象成寄快递IP地址是你家的门牌号子网掩码决定了“哪些门牌号算同一个小区”网关则是这个小区的出口大门。没有门牌号快递不知道送哪没有小区边界你不知道该自己送还是交给大门没有大门小区里的件永远出不去。三者缺一不可而且必须逻辑自洽。2. IP地址不只是“一串数字”它决定了你在哪个网络里2.1 IP地址的本质结构与分类逻辑IPv4地址是32位二进制数写成点分十进制就是四个0到255的数字比如192.168.1.10。这32位被拆成两部分网络部分和主机部分。网络部分标识你属于哪个网段主机部分标识你是这个网段里的哪台设备。关键在于这两部分的分界线不是固定的而是由子网掩码来划定的。传统上把IP地址分成A、B、C、D、E五类这是早期“有类网络”的做法。A类第一位是0默认掩码255.0.0.0B类前两位是10默认掩码255.255.0.0C类前三位是110默认掩码255.255.255.0。D类是组播E类保留实验用。现在实际组网基本不用“类”的概念了而是用CIDR无类别域间路由也就是用/24、/16这种前缀长度来灵活划分子网。但理解分类有助于你看懂一些老设备和老文档里的默认配置。还有一个必须提的私有地址。10.0.0.0/8、172.16.0.0/12、192.168.0.0/16这三段是专门留给内网用的不会在公网上路由。你在家里、公司看到的地址基本都是这三段之一。这也是为什么你家里路由器默认给你分192.168.1.x——它就是在用私有地址段。2.2 主机部分全0和全1为什么不能用这是新手最容易忽略的细节。在一个子网里主机位全为0的地址是网络地址代表整个网段本身主机位全为1的地址是广播地址用来向本网段所有设备发消息。这两个地址不能分配给具体主机。举个例子192.168.1.0/24这个网段网络地址是192.168.1.0广播地址是192.168.1.255可用主机地址是192.168.1.1到192.168.1.254一共254个。很多人算可用地址数时直接用256减2这个思路对但前提是你得先确认掩码。如果是/25那每个子网只有126个可用地址算法完全不同。注意有些特殊场景下/31和/32是例外。/31用于点对点链路两个地址都可用/32表示单个主机地址。这是RFC里明确规定的别一看到“全0全1不能用”就死记硬背。2.3 实操怎么快速算出网络地址和广播地址给你一个我平时用的手算方法不依赖计算器。假设地址是192.168.10.77/26。第一步确定块大小。/26意味着掩码是255.255.255.192最后一段的块大小是256 - 192 64。第二步找网络地址。看最后一段77落在哪个64的区间里0-63、64-127、128-191、192-255。77在64-127这个区间所以网络地址是192.168.10.64。第三步广播地址是下一个区间的起点减1即192.168.10.127。可用地址就是192.168.10.65到192.168.10.126。这个方法的核心就是块大小 256 - 掩码最后一段的值然后按块大小切分。你练熟之后看到任何地址和掩码组合几秒钟就能报出网络地址、广播地址和可用范围。这比背公式实用得多。3. 子网掩码划分子网的“尺子”也是排障的第一线索3.1 子网掩码的二进制本质与“取反”操作子网掩码和IP地址一样是32位但它的规则很简单网络部分全是1主机部分全是0。比如255.255.255.0写成二进制就是24个1后面跟8个0。它就像一把尺子量出IP地址里哪一段是网络号。热词里有人问“子网掩码取反怎么取”这其实是在问反掩码wildcard mask常见于ACL和OSPF配置。取反就是逐位翻转1变00变1。比如255.255.255.0取反是0.0.0.255。这个操作在写访问控制列表时特别常用因为ACL用反掩码来匹配地址范围。0.0.0.255表示“最后8位任意”也就是匹配整个/24网段。我见过不少人把反掩码和子网掩码搞混配ACL时直接填255.255.255.0结果规则完全不生效。记住一句话子网掩码是1表示“必须匹配”反掩码是0表示“必须匹配”两者逻辑正好相反。3.2 掩码长度与可用主机数的对应关系下面这张表是我排障时经常翻的建议你也存一份。它把常见掩码长度、点分十进制、可用主机数和典型用途列在一起一眼就能对照。掩码长度点分十进制可用主机数典型用途/30255.255.255.2522点对点链路、路由器互联/29255.255.255.2486小型设备互联/28255.255.255.24014小部门、服务器管理口/27255.255.255.22430小型办公网/26255.255.255.19262中型部门/25255.255.255.128126半个C类网/24255.255.255.0254标准C类网、家庭/小企业/23255.255.254.0510两个C类合并/22255.255.252.01022中型企业/16255.255.0.065534大型企业、园区网这张表的价值在于你规划网络时可以直接反查。比如要容纳50台设备选/2662个可用就够选/2730个就不够。别小看这个选择掩码划大了浪费地址划小了以后扩容要重新规划都是麻烦事。3.3 掩码配错会有什么现象三个真实案例案例一掩码写成255.255.255.0实际应该是255.255.254.0。现象是这台机器能ping通同网段部分设备但ping不通另一部分。原因是它把本该在同一子网的地址判成了不同子网于是把包发给了网关而网关可能没有回程路由。这种“部分通部分不通”是最迷惑人的。案例二两台机器IP相近但掩码不同。比如A是192.168.1.10/24B是192.168.1.20/25。A认为B在同网段直接ARP请求B认为A在192.168.1.0/25之外把包发给网关。结果就是单向通或完全不通。同网段设备掩码必须一致这是铁律。案例三掩码写成255.255.255.255。这台机器认为自己是独立网段任何地址都不在本地所有包都发给网关。如果网关配置正确可能还能上网但同网段通信会绕一圈延迟增加而且网关一旦故障就全断。实操心得排障时先看掩码再看网关最后看路由。掩码错误导致的故障占比非常高而且现象往往“似是而非”比完全不通更难查。4. 网关跨网段通信的“出口”不是随便填的地址4.1 网关的本质一条默认路由网关在设备上的体现其实就是一条默认路由。当设备发现目标IP不在本子网内它不会直接ARP目标而是把包发给网关的MAC地址由网关代为转发。所以网关必须满足两个条件第一它在本子网内第二它知道怎么到达目标网络。很多人以为网关是“一个特殊设备”其实网关就是一台普通主机通常是路由器或三层交换机的接口地址。你在电脑上填的“默认网关”本质是告诉系统“所有我不认识的地址都交给这个家伙。”这也解释了为什么网关地址必须和本机IP在同一子网。如果网关不在本子网你的机器根本无法ARP到它包连发都发不出去。我见过有人把网关填成192.168.1.1但本机是192.168.2.10/24结果就是“网络不可达”。4.2 网关地址为什么通常是.1或.254这是习惯问题不是技术强制。早期管理员喜欢把网关设成网段的第一个可用地址.1或最后一个可用地址.254方便记忆和管理。比如192.168.1.1和192.168.1.254都是常见选择。热词里有人问“网关1和254的详细解释”其实两者没有本质区别只要在子网内且不冲突即可。但有一个细节如果你把网关设成.254而广播地址是.255那网关和广播地址相邻某些老设备在处理时可能出问题。所以现在更多用.1。另外网关地址一旦确定全网设备必须一致不能一半填.1一半填.254否则会出现“部分设备能跨网段、部分不能”的诡异现象。4.3 实操Linux和Windows下查看与配置网关Linux以CentOS/RedHat系为例查看当前网关ip route show # 输出中 default via 192.168.1.1 dev eth0 就是默认网关临时添加网关ip route add default via 192.168.1.1 dev eth0永久配置CentOS 7# 编辑 /etc/sysconfig/network-scripts/ifcfg-eth0 GATEWAY192.168.1.1 # 然后重启网络 systemctl restart networkWindows查看ipconfig /all # 找到“默认网关”一行配置netsh interface ip set address 以太网 static 192.168.1.10 255.255.255.0 192.168.1.1注意Linux下如果同时存在多条默认路由会出现路由冲突。用ip route show确认只有一条default记录。多网卡场景下建议用策略路由而不是简单加默认网关。5. 三者如何协同一次完整的跨网段通信拆解5.1 同网段通信ARP直接搞定网关不参与假设A是192.168.1.10/24B是192.168.1.20/24。A要ping B。A先用自己的掩码算出B和我网络号相同都在192.168.1.0/24里。于是A直接发ARP广播“谁是192.168.1.20”B回应自己的MAC。之后A把数据帧直接发给B的MAC全程不经过网关。这个过程说明一个关键点同网段通信靠ARP跨网段通信靠网关。如果你发现同网段设备ping不通先查ARP表和物理链路别去折腾网关。5.2 跨网段通信网关接力逐跳转发假设A是192.168.1.10/24网关是192.168.1.1目标C是192.168.2.10/24它的网关是192.168.2.1。A要ping C。A用掩码一算C在192.168.2.0/24和我不同网段。于是A查路由表找到默认网关192.168.1.1。A发ARP问“谁是192.168.1.1”网关回应MAC。A把包发给网关MACIP层目标地址仍是C的IP。网关收到包发现目标IP是192.168.2.10查自己的路由表发现192.168.2.0/24在另一个接口上。于是网关把包从那个接口转发出去目标MAC换成C的MAC或下一跳的MAC。C收到包回包过程对称。整个过程中IP地址始终不变MAC地址逐跳改变。这是理解网络层和链路层分工的核心。很多人抓包时看到MAC变了就慌其实这是正常现象。5.3 用GNS3模拟一次完整转发并抓包分析热词里有人提到“GNS3中两个路由器分别连接主机然后分析IP数据转发报文ARP协议”这个实验非常经典。我按自己的做法复现一遍。拓扑R1和R2用串口或以太口互联R1下挂PC1R2下挂PC2。PC1的网关指向R1接口PC2的网关指向R2接口。配置要点R1接口f0/0配192.168.1.1/24f0/1配10.0.0.1/30R2接口f0/0配192.168.2.1/24f0/1配10.0.0.2/30PC1配192.168.1.10/24网关192.168.1.1PC2配192.168.2.10/24网关192.168.2.1在R1和R2的互联链路上抓包你会看到PC1先ARP网关然后ICMP包到达R1R1查路由从f0/1发出此时源MAC是R1的f0/1目标MAC是R2的f0/1R2收到后ARP PC2再转发。整个过程ARP请求和ICMP交替出现非常直观。实操心得做这个实验时先把所有设备的ARP表清空然后一步步ping边ping边抓包。你会亲眼看到“同网段ARP、跨网段网关”的完整流程比看十遍书都管用。6. 常见问题与排查技巧实录6.1 能ping通网关但上不了外网怎么查这是最经典的故障。能ping通网关说明本机到网关的链路和IP配置没问题。问题出在网关之后。排查顺序在网关上ping外网地址比如ping 8.8.8.8。如果网关自己都上不了问题在网关的上行链路或路由。如果网关能上检查网关是否开启了NAT或转发。很多家用路由器默认开启但企业设备可能需要手动配置。检查DNS。能ping通IP但打不开网页多半是DNS没配。用nslookup或dig测试。检查本机防火墙。Windows Defender防火墙有时会拦截出站虽然少见但确实遇到过。6.2 IP冲突导致网络时通时断IP冲突的现象是网络时好时坏ARP表里同一个IP对应两个MAC频繁切换。排查方法Windows下用arp -a查看如果某个IP的MAC频繁变化基本就是冲突。Linux下用arping工具arping -I eth0 192.168.1.10如果收到两个不同MAC的回应就是冲突。解决找到冲突设备改掉其中一个的IP。如果是DHCP环境检查DHCP服务器是否把静态地址也分配出去了。6.3 虚拟机固定IP后无法上网热词里有人问“Hyper-V虚拟机固定IP地址”和“Ubuntu固定IP地址”这个问题很典型。虚拟机网络模式很关键NAT模式虚拟机通过宿主机上网网关应指向虚拟网络的网关如VMware的.2VirtualBox的.1。桥接模式虚拟机和宿主机在同一物理网络网关指向物理网关。仅主机模式只能和宿主机通信不能上网。固定IP时最容易错的是网关和DNS。建议先用DHCP获取一次记下网关和DNS再改成静态。另外Hyper-V的“默认交换机”和“外部交换机”行为不同固定IP前先确认虚拟交换机的类型。6.4 常见问题速查表现象可能原因排查命令/方法同网段部分通部分不通掩码不一致对比双方掩码用ipconfig/ip addr能ping网关不能上网网关无上行路由或NAT在网关ping外网检查NAT配置时通时断IP冲突arp -a看MAC是否变化arping检测网络不可达网关不在本子网用掩码算网关是否同网段能ping IP不能开网页DNS问题nslookup测试检查DNS配置虚拟机固定IP后断网网络模式或网关错误先用DHCP获取正确参数再改静态最后分享一个我自己的习惯每次配完IP、掩码、网关先ping网关再ping一个外网IP最后ping一个域名。三步都通基本就没问题了。三步中哪步断问题范围立刻缩小到对应环节。这个习惯帮我省了无数排查时间。6.5 关于“加密后的IP地址”和“IP地址转换int”的补充热词里出现“加密后的IP地址”和“ip地址转换int”这两个偏开发场景。IP转int在Python里很简单import ipaddress ip_int int(ipaddress.IPv4Address(192.168.1.10)) # 输出 3232235786 # 反向转换 ip_str str(ipaddress.IPv4Address(3232235786))这个操作在数据库存储IP、做范围查询时很有用。存int比存字符串省空间而且比较大小直接比数值。至于“加密后的IP地址”通常是指对IP做哈希或脱敏处理用于日志分析时保护隐私。常见做法是用HMAC加盐哈希而不是简单编码因为简单编码可逆起不到保护作用。7. 从概念到直觉我自己的理解路径刚学网络时我把这三个概念当成三个独立的知识点背结果配起网来还是懵。后来我换了个方式拿一张纸画一个网段标出网络地址、广播地址、可用范围、网关位置然后自己给自己出题——随便给一个IP和掩码算出所有信息。练了大概二十组之后这些东西就变成直觉了。现在我看到10.0.0.5/30脑子里自动跳出网络地址10.0.0.4广播10.0.0.7可用10.0.0.5和10.0.0.6网关通常是.5或.6。这种直觉不是背出来的是算出来的。你也可以试试找一张纸从/24开始一路算到/30每个掩码算三组算完你就再也忘不掉了。网络这东西概念是骨架实操是血肉。光看不动手永远隔一层。找个模拟器或者虚拟机把今天讲的拓扑搭一遍抓一次包比看多少文章都值。
返回列表