3. 网络层核心协议:IP协议与子网划分、ARP协议工作原理、ICMP协议与网络诊断

网络层是整个TCP/IP协议栈的「交通枢纽」。说白了,它负责把数据包从源主机送到目标主机,中间可能跨过好几个路由器。我经常跟团队里的新人讲,你搞懂了网络层,就等于拿到了网络世界的「驾照」。

这一章我们重点聊三个协议:IP(寻址与路由)、ARP(地址解析)、ICMP(诊断与报错)。它们各司其职,又紧密配合。

核心逻辑:IP负责「送到哪」,ARP负责「找谁收」,ICMP负责「到了没、出啥问题了」。

网络层核心协议知识体系 网络层核心协议 IP协议 寻址 + 路由 + 分片 ARP协议 ICMP协议 诊断 + 差错报告 子网划分与VLSM CIDR无类域间路由 广播请求 → 单播应答 Ping / Traceroute 三者关系 IP决定数据包去哪 → ARP找到下一跳的MAC地址 → ICMP反馈途中是否出错

3.1 IP协议:互联网的「门牌号系统」

IP协议的核心就两件事:编址和路由。每个接入网络的设备都得有一个唯一的IP地址,就像你家门牌号一样。

目前主流还是IPv4,32位,分4段,每段0-255。比如 192.168.1.1。但IPv4地址早就枯竭了,我记得2019年RIPE(欧洲IP地址管理机构)宣布最后一批IPv4地址分配完毕。所以IPv6的推广是必然趋势,不过在企业内网里,IPv4+ NAT的组合拳还能撑很久。

3.1.1 IP地址分类(传统分法)

早期IP地址分A、B、C、D、E五类。你想想看,这种分法其实很浪费。一个B类网络有6万多个地址,小公司根本用不完。

类别 首字节范围 默认子网掩码 可用主机数 典型用途
A类 1 - 126 255.0.0.0 16,777,214 大型ISP/骨干网
B类 128 - 191 255.255.0.0 65,534 中型企业
C类 192 - 223 255.255.255.0 254 小型网络/公司
D类 224 - 239 组播地址 — 组播通信
E类 240 - 255 保留 — 实验/研究

个人经验:我建议你在做网络规划时,直接忘掉「有类」这个概念。现在都用CIDR(无类域间路由),灵活得多。比如 192.168.1.0/24 就比说「C类地址」精确得多。

3.1.2 子网划分与VLSM

子网划分说白了,就是把一个大网络切成几个小网络。为什么要切?因为广播域太大,网络性能会下降。我在一个数据中心项目里遇到过,一个C类网段里挂了300多台服务器,广播风暴导致交换机CPU飙升到80%。后来切成4个/26的子网,问题就解决了。

VLSM(可变长子网掩码) 允许你在同一个主网络中使用不同长度的子网掩码。比如:

  • 销售部:50台主机 → 需要 /26(62个地址)
  • 研发部:100台主机 → 需要 /25(126个地址)
  • 管理部:10台主机 → 需要 /28(14个地址)

这样就不浪费IP了。嗯,这里要注意:子网划分时,第一个地址是网络号,最后一个地址是广播地址,都不能分配给主机。

划分子网三步法:

  1. 确定需要多少个子网 → 借位
  2. 确定每个子网需要多少主机 → 留位
  3. 计算新掩码和子网范围

3.1.3 CIDR与路由聚合

CIDR(无类域间路由)彻底抛弃了ABC类的概念。用 IP地址/前缀长度 来表示。比如 10.0.0.0/8 表示前8位是网络位,后24位是主机位。

CIDR最大的好处是路由聚合。我举个例子:

  • 公司有4个连续C类网段:192.168.0.0/24、192.168.1.0/24、192.168.2.0/24、192.168.3.0/24
  • 聚合后:192.168.0.0/22

这样路由表就从4条变成1条。互联网上的核心路由器如果没这个技术,路由表早爆炸了。

3.2 ARP协议:IP地址到MAC地址的「翻译官」

IP地址是逻辑地址,数据链路层只认MAC地址。所以当一台主机要发送数据时,它必须知道目标IP对应的MAC地址。这就是ARP(地址解析协议)的工作。

3.2.1 ARP工作原理

ARP的工作流程其实很简单,就两步:

  1. 广播请求:主机A问「谁的IP是192.168.1.2?请告诉我你的MAC地址」
  2. 单播应答:主机B回复「我是192.168.1.2,我的MAC是AA:BB:CC:DD:EE:FF」

收到应答后,主机会把IP-MAC映射关系缓存起来,默认缓存时间一般是2-5分钟。为什么要缓存?你想想看,每次发数据都广播一次,网络就炸了。

我曾经踩过的坑:有一次排查网络间歇性丢包,查了两天。最后发现是一台Windows服务器发了大量ARP广播,把交换机CPU打满了。原因是它的ARP缓存表被某个恶意软件不断清空。解决方案:在交换机上配置ARP限速,并给关键服务器绑定静态ARP条目。

3.2.2 ARP报文结构

ARP报文直接封装在以太网帧里,类型字段是0x0806。结构如下:

字段 长度 说明
硬件类型 2字节 1表示以太网
协议类型 2字节 0x0800表示IPv4
硬件地址长度 1字节 MAC地址长度,6
协议地址长度 1字节 IP地址长度,4
操作码 2字节 1=请求,2=应答
发送方MAC 6字节 —
发送方IP 4字节 —
目标MAC 6字节 请求时为全0
目标IP 4字节 —

3.2.3 代理ARP与免费ARP

  • 代理ARP:路由器替其他网段的主机回应ARP请求。比如主机A想找主机B,但B在另一个子网,路由器会用自己的MAC地址回复A。我建议你在部署VPN或隧道时注意这个机制,有时候会引发奇怪的路由问题。
  • 免费ARP:主机主动广播自己的IP-MAC映射,用于检测IP冲突或更新其他设备的ARP缓存。比如你换了网卡,发个免费ARP,交换机就更新了。

3.3 ICMP协议:网络的「体检医生」

ICMP(互联网控制报文协议)主要用来传递差错报告和诊断信息。它不传输用户数据,但网络工程师天天跟它打交道。

3.3.1 ICMP报文类型

ICMP报文分两大类:差错报告报文和查询报文。常用的有:

类型 代码 含义 典型场景
0 0 回显应答 Ping回复
3 0-15 目标不可达 网络/主机/端口不可达
8 0 回显请求 Ping请求
11 0 超时 TTL超时(Traceroute用)

3.3.2 Ping:最常用的网络诊断工具

Ping的原理很简单:发送ICMP回显请求(类型8),等待回显应答(类型0)。

# 基本用法
ping 8.8.8.8

# 持续ping(Linux默认持续,Windows加 -t)
ping -t 192.168.1.1

# 指定包大小
ping -l 1500 192.168.1.1

# 限制跳数(TTL)
ping -i 5 8.8.8.8

我个人习惯,排查网络问题时先ping网关,通了再ping外网。如果网关不通,问题大概率在二层(ARP、交换机端口、网线)。

避坑指南:我曾经遇到一个案例,ping外网丢包30%,但ping网关全通。查了半天发现是出口路由器的MTU设置不对,导致大包被分片后重组失败。用 ping -f -l 1472 测试MTU,最终把MTU从1500改成1492就解决了。

3.3.3 Traceroute:路径探测工具

Traceroute利用ICMP超时报文(类型11)来探测路径。它发送TTL从1开始递增的UDP包(Windows用ICMP请求),每跳路由器都会把TTL减1,减到0时返回超时报文。

# Linux/macOS
traceroute 8.8.8.8

# Windows
tracert 8.8.8.8

输出结果会显示每一跳的IP地址和延迟。如果某跳显示 * * *,可能是路由器禁用了ICMP响应,或者路径上有防火墙。

3.3.4 ICMP的安全风险

ICMP虽然好用,但也是攻击者的工具。比如:

  • Ping Flood:大量ICMP请求耗尽目标带宽
  • Smurf攻击:伪造源地址为受害者的广播Ping
  • ICMP重定向攻击:欺骗主机修改路由表

安全建议:在生产环境中,我建议在边界防火墙上限制ICMP流量。比如只允许内部发起的Ping出去,禁止外部Ping进来。但完全禁用ICMP也不对,因为PMTUD(路径MTU发现)依赖ICMP不可达报文,禁用了会导致某些网站打不开。

3.4 本章小结

网络层的这三个协议,就像快递系统的三个角色:IP是地址和路线规划,ARP是快递员找具体门牌号,ICMP是客服反馈「送到了没、哪里出了问题」。搞懂它们,你就能解决90%的网络层故障。

嗯,最后提醒一句:别光看书,打开Wireshark抓几个包看看ARP请求和ICMP报文,比背十遍报文格式都管用。