3. 网络层核心协议:IP协议(IPv4与IPv6)、子网划分与CIDR、ARP协议原理、ICMP协议与Ping工具
网络层是整个协议栈的“交通枢纽”。说白了,它的任务就是把数据包从源主机送到目标主机,中间可能跨过好几个路由器。我刚开始学网络时,总觉得这层离应用层太远,不如HTTP直观。直到有一次排查一个跨机房延迟问题,才发现不懂网络层,你连问题出在哪都说不清楚。
这一章我们聚焦四个核心话题:IP协议(IPv4和IPv6)、子网划分与CIDR、ARP协议、ICMP协议。它们构成了网络层的基础骨架。
本章知识体系速览
3.1 IP协议:IPv4与IPv6
IP协议是网络层的“身份证”。每个设备要想上网,就得有一个IP地址。IPv4是32位地址,写成四个十进制数,比如192.168.1.1。你想想看,32位最多也就42亿个地址。90年代大家觉得够用了,结果移动互联网一来,地址瞬间枯竭。
IPv6就是来救场的。128位地址,写成八组十六进制数,比如2001:db8::1。这个地址空间有多大?地球上每一粒沙子都能分到好几个IP。我前几年帮一个物联网项目做架构,客户坚持用IPv4私网,结果设备一上万,NAT表撑爆了。后来全切IPv6,问题迎刃而解。
| 特性 | IPv4 | IPv6 |
|---|---|---|
| 地址长度 | 32位 | 128位 |
| 表示方式 | 点分十进制 | 冒号十六进制 |
| 地址数量 | 约43亿 | 约3.4×10^38 |
| NAT需求 | 普遍需要 | 基本不需要 |
| 头部长度 | 可变(20-60字节) | 固定40字节 |
| 安全性 | 可选(IPsec) | 原生支持IPsec |
我的习惯:在规划新网络时,我会优先考虑IPv6。即使当前只用IPv4,也建议预留IPv6地址空间。否则以后迁移,成本翻倍。
3.2 子网划分与CIDR
子网划分说白了就是把一个大网络切成几个小网络。为什么要切?因为广播域太大,网络效率会下降。我记得有一次帮一个学校做网络改造,他们整个校园网就一个C类段,200多台电脑天天广播风暴。后来我帮他们按楼层划了4个/26的子网,广播域缩小了,网络瞬间稳定了。
CIDR(无类域间路由)是更灵活的方式。它用“IP地址/前缀长度”来表示网络范围,比如192.168.1.0/24。前缀长度就是网络位的个数。你想想看,/24就是255.255.255.0,/26就是255.255.255.192。
划分子网时,记住两个关键点:
- 网络地址:主机位全0,代表这个子网本身
- 广播地址:主机位全1,代表这个子网的所有设备
举个例子,192.168.1.0/26:
- 子网掩码:255.255.255.192
- 可用主机数:2^(32-26) - 2 = 62台
- 网络地址:192.168.1.0
- 广播地址:192.168.1.63
- 可用IP范围:192.168.1.1 ~ 192.168.1.62
我曾经踩过的坑:有一次配置路由器,我把子网掩码写成了255.255.255.128,结果两个子网的路由器无法互通。查了半天才发现,我忘了把路由器接口的IP地址配置成对应子网的网关。记住,网关IP必须是该子网内的可用地址。
3.3 ARP协议原理
ARP(地址解析协议)解决一个问题:我知道对方的IP,但不知道它的MAC地址,怎么把数据帧发过去?
ARP的工作流程很简单:
- 主机A广播一个ARP请求:“谁的IP是192.168.1.2?请告诉我你的MAC地址。”
- 主机B收到后,发现IP是自己的,就单播回复一个ARP应答:“我是192.168.1.2,我的MAC是00:1a:2b:3c:4d:5e。”
- 主机A收到后,把IP和MAC的映射关系缓存到ARP表中。
ARP缓存一般保留几分钟。为什么?因为设备可能更换网卡,MAC地址会变。我遇到过一个问题:一台服务器换了网卡,但ARP缓存没更新,导致其他设备一直往旧MAC发数据,丢包严重。解决办法就是手动清ARP缓存:
# Windows
arp -d
# Linux
ip neigh flush all
# 查看ARP表
arp -a
避坑指南:ARP欺骗是局域网常见攻击。攻击者伪造ARP应答,让网关把流量发到它的机器上。防范方法:在交换机上配置动态ARP检测(DAI),或者绑定静态ARP条目。
3.4 ICMP协议与Ping工具
ICMP(互联网控制报文协议)是IP协议的“小助手”。它不传输用户数据,而是传递控制信息和差错报告。最常见的ICMP消息类型有:
| 类型 | 代码 | 含义 |
|---|---|---|
| 0 | 0 | Echo Reply(Ping响应) |
| 3 | 0 | 目标网络不可达 |
| 3 | 1 | 目标主机不可达 |
| 8 | 0 | Echo Request(Ping请求) |
| 11 | 0 | TTL超时(Traceroute用) |
Ping工具就是基于ICMP的Echo请求和应答。它发送一个ICMP Echo Request,目标主机回复Echo Reply。通过计算往返时间(RTT),你可以判断网络连通性和延迟。
我个人习惯用Ping做第一轮排查:
- 先Ping 127.0.0.1(本地回环),确认本机协议栈正常
- 再Ping网关,确认局域网连通
- 然后Ping外网地址,确认路由和NAT正常
# 连续Ping 5次
ping -c 5 8.8.8.8
# Windows下持续Ping
ping -t 8.8.8.8
# 指定数据包大小
ping -s 1000 8.8.8.8
注意:有些网络会屏蔽ICMP,导致Ping不通。这时候不代表网络不通,可能是防火墙策略。我曾经遇到过客户说“网络断了”,结果一查,只是防火墙禁了ICMP,业务流量完全正常。所以Ping不通时,别急着下结论,试试用telnet或curl测一下具体端口。
Traceroute工具也是基于ICMP(或UDP)。它通过发送TTL从1递增的数据包,让沿途路由器返回ICMP超时消息,从而绘制出路径拓扑。这个工具在排查路由环路和延迟瓶颈时特别好用。
# Linux
traceroute www.baidu.com
# Windows
tracert www.baidu.com
好了,这一章的内容就这些。IP协议是网络层的基石,子网划分和CIDR是网络规划的基本功,ARP和ICMP则是日常排查的利器。把这些搞明白,网络层你就入门了。