3. 网络层核心协议:IP协议(IPv4/IPv6)、IP地址分类与子网划分、ARP协议、ICMP协议

网络层是整个协议栈的“交通枢纽”。数据链路层解决了局域网内直连设备的通信,但要把数据包送到千里之外的另一台机器,就得靠网络层。说白了,网络层负责两件事:寻址和路由。这一章我们重点拆解IP协议、ARP和ICMP,这些都是我日常排障时打交道最多的东西。

3.1 IP协议:互联网的“门牌号”系统

IP协议定义了网络层数据单元——IP数据报的格式,以及如何为每台设备分配一个逻辑地址。目前主流是IPv4,IPv6正在逐步普及。我个人习惯把IP地址比作“门牌号”:MAC地址是身份证号(全球唯一,不可变),IP地址则是你当前住址(可变,取决于你连到哪个网络)。

3.1.1 IPv4数据报格式

一个IPv4数据报头部固定20字节,选项部分最多40字节。我当年面试时被要求手画这个结构,画错一个字段就被刷了。核心字段如下:

字段 长度(位) 说明
版本 4 IPv4为4,IPv6为6
首部长度 4 以4字节为单位,最小5(20字节)
总长度 16 整个数据报长度,最大65535字节
标识 16 分片时用于重组
标志 3 DF(不分片)、MF(更多分片)
片偏移 13 分片在原始数据报中的偏移量
生存时间(TTL) 8 每经过一跳减1,为0时丢弃
协议 8 上层协议类型(1=ICMP, 6=TCP, 17=UDP)
首部校验和 16 仅校验头部,不校验数据
源IP地址 32 发送方IP
目的IP地址 32 接收方IP
我的经验:TTL字段经常被忽视。有一次客户反馈网络“间歇性不通”,我抓包发现TTL值在某个路由器后直接归零。原因是路由环路——数据包在几个路由器之间死循环,直到TTL耗尽。traceroute就是利用TTL递增的原理来探测路径的。

3.1.2 IPv6:为什么我们需要它?

IPv4地址只有32位,理论上43亿个,但实际可用的远少于这个数。我记得2011年IANA就把最后一批IPv4地址分配完了。IPv6用128位地址,号称“地球上每粒沙子都能分到一个IP”。

IPv6头部固定40字节,比IPv4简单很多:去掉了校验和、分片相关字段,加入了流标签。你想想看,路由器处理IPv6头部时负担更轻,转发效率自然更高。

IPv4 vs IPv6 核心差异:

  • 地址长度:32位 vs 128位
  • 表示法:点分十进制 vs 冒号十六进制(如 2001:db8::1)
  • 分片:由路由器完成 vs 由发送端完成(路径MTU发现)
  • 校验和:有 vs 无(依赖上层协议校验)
  • 广播:支持 vs 不支持(用组播代替)

3.2 IP地址分类与子网划分

这部分是网络工程师的基本功。我刚入行时,给一个C类网段划分子网,算错了掩码,导致整个办公室无法上网。嗯,从那以后我再也不敢手算子网了,但原理必须吃透。

3.2.1 传统分类编址

IPv4地址最初按前几位分成A、B、C、D、E五类:

类别 前导位 网络号位数 主机号位数 地址范围 默认子网掩码
A类 0 8 24 1.0.0.0 – 126.255.255.255 255.0.0.0
B类 10 16 16 128.0.0.0 – 191.255.255.255 255.255.0.0
C类 110 24 8 192.0.0.0 – 223.255.255.255 255.255.255.0
D类(组播) 1110 — — 224.0.0.0 – 239.255.255.255 —
E类(保留) 1111 — — 240.0.0.0 – 255.255.255.255 —

分类编址浪费严重。一个C类只有254个主机地址,一个B类却有65534个。大部分公司用B类浪费,用C类不够。所以才有了无类别域间路由(CIDR)和子网划分。

3.2.2 子网划分实战

子网划分的核心是“借主机位作为网络位”。举个例子:

假设你有一个C类网络 192.168.1.0/24,需要划分成4个子网,每个子网至少50台主机。

步骤:

  1. 需要4个子网 → 需要2位子网号(2²=4)
  2. 原主机位8位,借走2位 → 剩余6位主机位
  3. 6位主机位可容纳2⁶-2=62台主机(减掉网络地址和广播地址)
  4. 新子网掩码:原24位 + 2位 = 26位,即255.255.255.192

4个子网分别是:

  • 192.168.1.0/26(可用范围:192.168.1.1 – 192.168.1.62)
  • 192.168.1.64/26(可用范围:192.168.1.65 – 192.168.1.126)
  • 192.168.1.128/26(可用范围:192.168.1.129 – 192.168.1.190)
  • 192.168.1.192/26(可用范围:192.168.1.193 – 192.168.1.254)
避坑指南:每个子网的第一个地址是网络地址,最后一个地址是广播地址,都不能分配给主机。我曾经见过一个同事把192.168.1.0配给了服务器,结果全网广播风暴,排查了整整一下午。

3.3 ARP协议:IP地址到MAC地址的桥梁

ARP(地址解析协议)解决了一个看似简单的问题:我知道对方的IP,但不知道它的MAC地址,怎么把数据帧发过去?

ARP的工作原理:

  1. 主机A广播一个ARP请求:“谁的IP是192.168.1.2?请告诉我你的MAC地址。”
  2. 目标主机B收到后,单播回复ARP应答:“我是192.168.1.2,我的MAC是00:1a:2b:3c:4d:5e。”
  3. 主机A将映射关系写入ARP缓存,下次直接使用。

我建议你记住一个关键点:ARP只在同一个广播域内有效。跨网段通信时,数据帧的目标MAC地址是网关的MAC,而不是最终目标的MAC。

我的经验:ARP欺骗攻击是局域网安全的常见威胁。攻击者伪造ARP应答,告诉网关“我是受害者IP,我的MAC是攻击者的MAC”。这样所有发往受害者的流量都会经过攻击者。排查方法:在网关上看ARP表,检查是否有IP对应多个MAC。

3.4 ICMP协议:网络层的“信使”

ICMP(互联网控制报文协议)用于在IP网络中传递错误报告和诊断信息。它不传输用户数据,而是传输控制消息。说白了,它是网络层的“信使”,帮你了解网络状况。

3.4.1 常见ICMP报文类型

类型 代码 含义 典型场景
0 0 回显应答 ping命令的回复
3 0 目标网络不可达 路由表中没有目标网络
3 1 目标主机不可达 ARP解析失败
3 3 目标端口不可达 端口未监听
8 0 回显请求 ping命令的请求
11 0 TTL超时 traceroute或路由环路

ping和traceroute是ICMP最经典的应用。ping发送ICMP回显请求,目标回复回显应答,通过计算往返时间(RTT)判断网络延迟和连通性。traceroute则利用TTL超时报文,逐跳探测路径上的路由器。

排障口诀:

  • ping通 → 网络层及以下正常
  • ping不通但ARP能解析 → 检查防火墙或路由策略
  • ARP解析失败 → 检查链路层或VLAN配置
  • 收到“目标不可达” → 检查路由表或端口状态

3.5 本章知识体系总览

下面这张图把网络层核心协议的关系梳理清楚了。我每次培训都拿这张图开场,学员反馈说“一下子就看懂了”。

网络层核心协议知识体系 网络层核心协议知识体系 网络层核心协议 IP协议 ARP协议 ICMP协议 IPv4数据报格式 IPv6地址与头部 地址分类(A/B/C/D/E) 子网划分与CIDR ARP请求/应答 ARP缓存表 ARP欺骗与安全 差错报告报文 查询报文 ping与traceroute 核心关系:IP负责寻址和转发,ARP解决IP到MAC的映射,ICMP提供诊断和差错报告 三者协同工作,构成网络层的基础能力

网络层的这三个协议,IP是核心,ARP和ICMP是辅助。IP负责把数据包从源送到目的地,ARP帮IP找到下一跳的MAC地址,ICMP则在出问题时给你报信。三者缺一不可。

我的建议:学网络层最好的方法就是抓包。打开Wireshark,ping一下百度,看看ARP请求、ICMP回显请求和应答的交互过程。亲眼看到这些报文在网线上跑,比背一百遍协议格式都管用。