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 |
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台主机。
步骤:
- 需要4个子网 → 需要2位子网号(2²=4)
- 原主机位8位,借走2位 → 剩余6位主机位
- 6位主机位可容纳2⁶-2=62台主机(减掉网络地址和广播地址)
- 新子网掩码:原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)
3.3 ARP协议:IP地址到MAC地址的桥梁
ARP(地址解析协议)解决了一个看似简单的问题:我知道对方的IP,但不知道它的MAC地址,怎么把数据帧发过去?
ARP的工作原理:
- 主机A广播一个ARP请求:“谁的IP是192.168.1.2?请告诉我你的MAC地址。”
- 目标主机B收到后,单播回复ARP应答:“我是192.168.1.2,我的MAC是00:1a:2b:3c:4d:5e。”
- 主机A将映射关系写入ARP缓存,下次直接使用。
我建议你记住一个关键点:ARP只在同一个广播域内有效。跨网段通信时,数据帧的目标MAC地址是网关的MAC,而不是最终目标的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是辅助。IP负责把数据包从源送到目的地,ARP帮IP找到下一跳的MAC地址,ICMP则在出问题时给你报信。三者缺一不可。