ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

IPv4:地址、掩码、分片与 TTL 到底在管什么

2026/8/3 9:00:47 拓冰建站 浏览量
IPv4:地址、掩码、分片与 TTL 到底在管什么 专栏《计算机网络基础》对应总览第四篇 网络层让包跨越「很多个网络」本篇角色IPv4 专章——地址怎么写、掩码怎么算、TTL / 分片在路径上管什么承接《包怎么跨过很多个网络网络层一次讲清》读完你能读懂 IPv4 头关键字段手算网段 / 广播 / 主机数解释错掩码与 MTU 黑洞用ip/ping/tcpdump验证 TTL 与转发假设获取更多网络编程代码实例请关注上方公众号导读上一篇画了地图这一篇拆「地址本体」导论里说过网络层把包送到「那台主机」。日常说的「那台主机」在绝大多数现网里仍然靠IPv4 地址认。连上 Wi‑Fi 后系统设置里常出现三行IP 地址 192.168.1.23 子网掩码 255.255.255.0 网关 192.168.1.1很多人只会「照抄给网管」。可排障时错掩码、错网关、TTL 耗尽、路径 MTU 问题都会以很具体的方式坑你——不是玄学是字段语义没对齐。本篇把 IPv4 头、CIDR、TTL、分片和特殊地址拆开并配上本机能做的小实验。你不必一次背完整头格式先把「前缀怎么划、TTL 怎么减、大包卡在哪」变成肌肉记忆后面看抓包和路由表会轻松得多。下一篇再讲 IPv6 与双栈地址变长之后坑反而更「偶发」。应用 / 传输层数据 │ ▼ ┌───────────────────┐ │ IPv4 头部 │ ← 源、目的、TTL、协议、分片相关字段…… └─────────┬─────────┘ ▼ 链路层帧发出去一、概念IPv4 在认什么、管什么1.1 一句话IPv4Internet Protocol version 4用 32 位逻辑地址标识网络接口并提供尽最大努力best-effort的包转发——不保证不丢、不乱序可靠交给上层如 TCP。它负责「送到哪台机器附近」端口不在这一层。1.2 它管什么 / 默认不管什么它管默认不管源 / 目的 IP重传、保序、流量控制分片以及何时需要「一定到达」TTL 防环路加密那是 IPsec / TLS 等协议字段后面是 TCP/UDP/ICMP…端口端口在传输层经典边界再念一遍ping 不通 → 先怀疑网络 / 链路 / 物理 / 策略 ping 通但 443 不通 → 多半端口、防火墙、未监听或应用1.3 点分十进制人读的只是包装32 位拆成 4 个字节每个字节写成 0–255 的十进制用点隔开192.168.1.23 11000000 . 10101000 . 00000001 . 00010111记住三件事每个点分位最大255一个字节出现 256 就是写错了比较大小、算网段时心里要能回到「二进制前缀」——CIDR 就是干这个的「地址长得像」不等于「同网段」——同不同看掩码不看观感1.4 掩码与 CIDR哪一段是「网」哪一段是「主机」早期爱写255.255.255.0现在更常用CIDR记法192.168.1.0/24。/24表示前 24 位是网络前缀剩下 8 位给主机。地址: 192.168.1.23 掩码: /24 → 255.255.255.0 网段: 192.168.1.0 广播: 192.168.1.255 可用主机大致: 192.168.1.1 ~ 192.168.1.254常见用法手算口诀地址与掩码按位与 → 网络号主机位全 1 → 广播在常见以太网广播域语境下。主机数直觉减掉网络地址和广播地址后的「可用」近似前缀主机位地址总数常见可用主机数直觉/248256~254/257128~126/161665536很大公司/园区常见/3024点到点链路常用约 2 可用/3201单主机路由云上很常见/032全体默认路由「其它都走这」人话版同一前缀里的地址协议栈倾向当成「直连邻居」出了前缀就去找网关。掩码写错本质是「同网段判断」错了——后面排障会反复碰到。1.5 特殊地址先记会撞到的类型例子用途直觉本机回环127.0.0.0/8常用127.0.0.1只在本机转不出台私网RFC191810/8、172.16/12、192.168/16内网用公网不路由链路本地169.254.0.0/16没拿到 DHCP 时常出现同链路通信默认路由0.0.0.0/0「其它目的都走这」文档/测试203.0.113.0/24等文档示例别当生产地址家里设备满屏192.168.x.x是因为私网 出口 NAT细节在 NAT 专章。笔记本突然变成169.254.x.x先查 DHCP / 网线 / Wi‑Fi别先怀疑应用代码。回环地址再强调一次127.0.0.1通只证明本机栈还活着不能拿它当「外网也没问题」的证据。私网能互访也不等于公网出口一定健康。二、原理头字段、TTL、分片分别卡在哪一环2.1 IPv4 头先盯住「排障会用到的」完整头还有选项、校验和细节本篇抓常用字段0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 -------------------------------- |Version| IHL |Type of Service| Total Length | -------------------------------- | Identification |Flags| Fragment Offset | -------------------------------- | Time to Live | Protocol | Header Checksum | -------------------------------- | Source Address | -------------------------------- | Destination Address | -------------------------------- | Options (可选) … |字段你要知道的Version4Total Length整个 IP 包长度Identification / Flags / Fragment Offset分片与重组TTL剩余跳数防环路Protocol上一层是 TCP(6)、UDP(17)、ICMP(1) 等Source / Destination源、目的 IPv4中间路由器主要看目的地址 自己的路由表一般不帮你重传 TCP。2.2 转发时的「同网段」判断排障时把这一步想清楚能少做很多无用抓包主机并不是「看见点分四段长得像就直连」而是严格按本地配置的前缀做判断。你的主机要发往某个目的 IP1. 看目的是否落在本机某网卡的「直连网段」 2. 是 → 链路层直接找对端ARP 等 3. 否 → 查路由表通常丢给默认网关 4. 网关再重复「查表 → 下一跳」所以IP 头里写的是最终目的每一跳只决定此刻扔给谁。两台机器地址看起来「差不多」掩码一个/16一个/24就会出现A: 192.168.1.10/24 认为同网段是 192.168.1.0–255 B: 192.168.1.200/16 认为同网段大得多A 觉得 B 是邻居直接 ARPB 觉得 A 在外网丢给网关——典型「半边能通」玄学。对齐前缀往往比换网线有效。2.3 TTL不是「秒」是「还能跳几下」TTLTime To Live早期设计带过时间语义现在按跳递减Linux 发出去常见初值64Windows 常见128每过一个路由器严格说是每转发一跳通常减 1到 0丢弃并常发 ICMP Time Exceeded你ping回显里看到的ttl是回程包到达你这边时的剩余 TTL可以反推「大概经过了多少跳」初值要猜对64 还是 128发出初值 64回来 ttl52 → 大约走了 12 跳粗算 发出初值 128回来 ttl117 → 大约 11 跳环路时 TTL 会被耗光——这是它存在的核心理由之一。traceroute则故意从 TTL1 往上加逼每一跳说话ICMP 专章细讲。2.4 分片与现代 PMTUD直觉比公式重要链路有MTU常见以太网 1500。IP 包太大路径上某跳装不下旧路径中间设备可能把包切开分片目的端再重组现代常见策略很多地方希望端到端尽量不分片发端用PMTUDPath MTU Discovery探出路径最大可用尺寸过大的包直接缩小或报错IPv4 里还有 DFDont Fragment标志置上后中间不能分片装不下就丢并可能用 ICMP 通知「需要更小」。排障直觉大文件 / VPN / 某些 UDP 怪异失败而小包正常 → 先怀疑 MTU / 分片 / ICMP「需要分片」被墙掉PMTUD 黑洞不必死记所有标志位组合先建立路径上存在「最大能过的包」这个上限TTL 管跳数MTU 管尺寸。2.5 和传输层的交接IPv4 Protocol 6 → 把载荷交给 TCP IPv4 Protocol 17 → 交给 UDP IPv4 Protocol 1 → 交给 ICMPping 通只说明「IP/ICMP 这条探测路径」大致可达且策略放行不等于443 一定通。三、应用你每天都在填这些字段3.1 家用 Wi‑FiDHCP 下发地址、掩码常 /24、网关、DNS。浏览器访问外网时目的不在192.168.x.0/24包全部走向默认网关再 NAT 出去。两台手机「连着同一个 Wi‑Fi 却互 ping 不通」除了 AP 隔离也要核对是不是各自拿到了奇怪前缀。3.2 云主机的/32很多云厂商给弹性网卡配x.x.x.x/32再靠 VPC 路由指下一跳。乍看「没有同网段邻居」其实是靠路由表而不是靠「长主机位」找路——别用家庭 /24 的直觉硬套。安全组再叠一层你开了业务端口别人仍可能 ping 不通——那是 ICMP 策略下一篇细说。3.3 容器与叠加网Docker / K8s 里一堆10.x、172.16段靠路由和 iptables/NFT、CNI 拼起来。错一段路由或掩码表现常常是同节点通、跨节点不通或 Service IP 黑洞。排障时先ip addr/ip route get PodIP别一上来重启业务进程。3.4 安全设备看的也是五元组里的 IP防火墙、安全组先匹配源/目的 IP再加端口协议。你改错网段规划策略再漂亮也对不上流量——「规则写了却不命中」有时根因就是地址根本不在你以为的那段。3.5 办公网与 VPN公司内网大量10.0.0.0/8你笔记本在家是192.168.x.x连上 VPN 后多出一条或几条到10.0.0.0/8的路由。「网页能开、内网系统打不开」——经常是默认路由在但内网前缀路由丢了或分流策略把10/8指错了。3.6 为什么工程师要「会算前缀」而不是只会抄设置DHCP 把地址配好时你感觉不到 IPv4一到手工扩容、对接合作方专线、给测试机加别名地址前缀立刻变成硬技能。举例业务要在10.20.0.0/16里划出一小段给联调环境你是切/24还是/28这决定了广播域大小、地址浪费、以及防火墙对象怎么写。再举例两台路由器做点到点互联常见用/30或/31——你若随手写成/24等于把一大段地址浪费在一条链路上还可能和别处规划冲突。会算前缀本质是会回答三个问题1. 哪些地址算「自己人」直连 2. 广播/网关落在哪 3. 路由条目应该写多宽才既够用又不误伤这三问清楚了后面看安全组、看 ACL、看云路由表都不会再被「长得像同网段」骗到。3.7 和总览篇的衔接IPv4 只是网络层第一块砖导论里的主角名单里IPv4 旁边还有 ICMP、路由、NAT、隧道。本篇把「地址本体」钉牢是为了后面排障时你不会把所有问题都怪到应用先确认源目的 IP 与掩码是否自洽再问 TTL 是否在路径上耗尽再问是不是 MTU然后才轮到端口与业务。顺序反了工单会越写越玄。四、问题定位错掩码、环路、黑洞4.1 故障速查现象IPv4 侧常见根因先做什么同交换机却 ping 不通掩码不一致、IP 冲突、没 ARP、AP 隔离对比双方ip addr看是否误判同网段能上部分网、不能上其他路由缺失、下一跳错ip route/ip route get延迟异常高或路径怪次优路由、环路边缘mtr/traceroute看 TTL 是否异常耗尽大包失败、小包成功MTU / 分片 / PMTUD 黑洞缩小包试验检查是否丢「需要分片」类 ICMP出现169.254.x.xDHCP 失败拿到链路本地查 DHCP/链路而不是怪应用只有127.0.0.1网卡没地址 / 未联网ip -br addrping 通业务不通非 IPv4 寻址问题转端口 / 安全组 / 应用4.2 错掩码经典坑对齐双方前缀比「换一根网线」更常治好问题。若系统有ipcalc/sipcalc可用来核对没有就用手算地址与掩码按位与 → 网络号。4.3 环路TTL 在擦屁股错误的静态路由互相指向包在两台路由器之间转圈直到 TTL 耗尽。表现CPU/接口流量怪、业务超时、traceroute在某几跳重复。这时别先调应用超时先把「互相指」的路由拆开。4.4 黑洞路由「有」路「没有」路由表指向一个并不转发的下一跳或安全策略默丢包进洞没回声。和「禁 ping」不同禁 ping 可能业务仍通黑洞常常是TCP 也一起没了。ip route get告诉你内核「打算怎么走」走得对不对还要靠对端/路径实测。常见黑洞三件套值得背下来1. 下一跳地址写错但路由条目还在——表「看起来有路」 2. 下一跳机器禁了转发或接口 down——包交出去就消失 3. 策略/安全组默丢——既无 ICMP 也无业务回包排障时不要只截一张路由表交差用ping、业务端口、必要时tcpdump在出接口上看包有没有真正离开本机。「本机发出去了」和「对端收到了」是两件事IPv4 头只能保证你按表转发不保证路径诚实。4.5 决策树4.6 实操命令Linux 为主Windows 可用ipconfig/route print对照ip -br addr ip addr show ip route ip route get 1.1.1.1 # 掩码/网段手算辅助若已安装 ipcalc / sipcalc ipcalc 192.168.1.23/24 ping -c 4 192.168.1.1 ping -c 4 1.1.1.1 # 看回程 TTL ping -c 2 223.5.5.5 # 输出里关注 ttl # 抓 IPv4看 TTL、是否分片等 sudo tcpdump -ni any icmp or ip host 1.1.1.1ip route get仍然是导论里强调的那句问内核「去这个地址你打算从哪走」示例含义示意1.1.1.1 via 192.168.1.1 dev wlan0 src 192.168.1.23表示去1.1.1.1下一跳是网关192.168.1.1从wlan0出去源地址用192.168.1.23。五、动手把地址和 TTL 摸实下面以常见 Linux/iproute2为例。Windows 可把ip addr换成ipconfig把ip route换成route print思路相同。实验 A读出「我是谁、哪段、网关谁」ip -br addr ip route ip route get 223.5.5.5在纸上填我的 IPv4__________ / __________ 网段网络地址__________ 广播若 /24 家庭网__________ 默认网关__________ 去公网 DNS 走哪块网卡__________若有ipcalcipcalc 192.168.1.23/24没有就手算/24把最后一节主机位清零得网络地址置全 1 得广播。实验 Bping看 TTL粗算跳数ping -c 4 127.0.0.1 ping -c 4 223.5.5.5对比回显里的ttl。本机回环与公网路径通常不同。假设对端或路径按 Linux 初值 64 回跳数粗算 ≈ 64 - 观察到的 ttl若结果很怪可能对端初值是 128或中间设备改写 TTL——粗算即可别当精密仪器。实验 C错掩码思想实验慎在生产改在实验机或虚拟机上不要拿公司生产网瞎改两台机设成同一「看起来像」的地址段故意一个/24、一个/16互相ping同时ip route get 对端IP sudo tcpdump -ni 网卡 arp or icmp体会内核「是否直连」完全由本地前缀决定不是由「地址长得像不像」决定。实验 Dtcpdump看 IP 头侧写# 终端 1 sudo tcpdump -ni any -v icmp # 终端 2 ping -c 3 1.1.1.1关注冗长输出里的ttl、length以及 ICMP 是 echo request / reply。有条件再试大包注意权限与路径ping -c 2 -s 1400 1.1.1.1 ping -c 2 -s 2000 1.1.1.1对比是否开始牵扯分片或失败——不同系统/网络表现不一重点是建立 MTU 意识。实验 E对比「主机通」和「端口通」ping -c 3 1.1.1.1 curl -v --connect-timeout 3 https://1.1.1.1 -o /dev/null体会ICMP 通不代表 443 策略一定放行反过来有的环境禁 pingHTTPS 却正常。实验 F把「网段直觉」写进笔记挑你当前环境的真实地址家里 Wi‑Fi 或虚拟机都行完成下面这段填空并保存一周后对照接口名________ 地址/前缀________ / ________ 网络地址________ 广播地址若适用________ 默认可达网关________ 同网段随便举两个地址________ / ________ 一个「必须走网关」的地址________ ip route get 该地址 的结果摘要________做完这页纸你对 IPv4 的掌握会从「听说过 CIDR」变成「能给同事讲清为什么 ping 不到隔壁工位」。很多线上事故复盘里真正缺的不是新命令而是这种把前缀、网关、直连关系写清楚的习惯。再补一段现场叙事错掩码如何骗过你假设桌面机192.168.1.10/24打印机被误配成192.168.1.50/16。桌面机觉得打印机就在旁边直接 ARP打印机觉得桌面机「也可能在更大网段某处」转发逻辑和 ARP 预期拧着。表现可以是偶发能发现设备、管理页时好时坏、换交换机端口也没用。你若只盯应用层「驱动要重装」会浪费一下午。先把双方ip addr或ipconfig里的前缀对齐故事往往立刻结束。云上版本也类似安全组规则写了10.0.1.0/24实例实际落在10.0.1.0/16规划里的另一段——规则「看起来覆盖了」五元组对不上流量照样丢。地址规划是策略的前提策略写得再细前缀理解错了也是空枪。本章小结若只能带走五句话就带走这些地址是 32 位前缀游戏掩码决定谁算邻居TTL 防环并喂饱路径探测MTU/分片解释大小包差异特殊地址帮你一眼认出「根本不该指望它出公网」。其余细节可以回查命令与表格但这五句能让你在排障时先站对层。IPv4 用 32 位地址寻址人读点分十进制机器看前缀 掩码/CIDR 决定「直连还是走网关」——错掩码是高频根因 TTL 按跳递减防环路也是 traceroute 的道具 分片仍存在但现代更常碰到 PMTUD / MTU 黑洞 特殊地址回环不出网私网靠 NAT169.254 多半 DHCP 凉了 工具ip addr / ip route / ipcalc或手算 / ping看ttl / tcpdump ip