3. 网络层核心:IP协议、IPv4地址结构、子网掩码与CIDR、ARP协议、ICMP协议
网络层是整个TCP/IP协议栈的「交通枢纽」。我经常跟团队里的新人说,如果你只懂应用层和传输层,那只能算刚入门;真正把网络层吃透了,才算摸到了网络世界的门道。这一章,我们就把网络层的几个核心组件掰开揉碎了讲清楚。
3.1 IP协议:互联网的「通用语言」
IP协议(Internet Protocol)是网络层的核心协议。它的职责很简单:把数据包从源主机送到目标主机。听起来容易,但背后涉及寻址、分片、路由选择等一系列机制。
IP协议有两个版本:IPv4和IPv6。目前主流仍是IPv4,但IPv6的普及速度在加快。我个人习惯把IPv4看作「经典款」,IPv6则是「升级版」。本章我们重点讲IPv4,因为它是理解网络层的基础。
IP协议的核心特性:
- 无连接:发送数据前不需要建立连接,每个数据包独立传输
- 不可靠:IP层不保证数据包一定能到达,丢包、乱序、重复都是可能的
- 尽力而为:IP层会尽最大努力把数据送到,但不做任何承诺
你可能会问:「这么不可靠的协议,怎么还能成为互联网的基石?」嗯,这里要注意:IP层只负责「送」,至于「送没送到」、「顺序对不对」,那是上层协议(比如TCP)的事。这种分层设计,恰恰是TCP/IP协议栈的精妙之处。
3.2 IPv4地址结构:32位的「门牌号」
IPv4地址是一个32位的二进制数,通常用点分十进制表示。比如 192.168.1.1,每个十进制数对应8位二进制。
一个IPv4地址由两部分组成:网络号和主机号。网络号标识主机所在的网络,主机号标识该网络中的具体主机。
| 地址类别 | 前几位 | 网络号位数 | 主机号位数 | 地址范围 |
|---|---|---|---|---|
| A类 | 0 | 8位 | 24位 | 1.0.0.0 - 126.255.255.255 |
| B类 | 10 | 16位 | 16位 | 128.0.0.0 - 191.255.255.255 |
| C类 | 110 | 24位 | 8位 | 192.0.0.0 - 223.255.255.255 |
| D类(组播) | 1110 | - | - | 224.0.0.0 - 239.255.255.255 |
| E类(保留) | 1111 | - | - | 240.0.0.0 - 255.255.255.255 |
这里有个坑,我踩过。A类地址的0.0.0.0和127.0.0.0是保留的,127.0.0.1是回环地址,用来测试本机网络协议栈。我曾经在配置防火墙规则时,不小心把127.0.0.0/8的流量全封了,结果本机服务全连不上……嗯,从那以后我再也不敢动回环地址的规则了。
3.3 子网掩码与CIDR:告别「浪费」的地址分配
传统的分类地址(A/B/C类)有个大问题:浪费。一个C类网络只有254个主机地址,但一个B类网络却有65534个。如果你有300台机器,用C类不够,用B类又浪费太多。
子网掩码的出现,就是为了解决这个问题。它是一个32位的掩码,用来区分IP地址中的网络号和主机号。子网掩码中,网络号部分全为1,主机号部分全为0。
快速判断方法:把IP地址和子网掩码做「按位与」运算,得到的就是网络地址。比如:
IP地址: 192.168.1.100 → 11000000.10101000.00000001.01100100
子网掩码: 255.255.255.0 → 11111111.11111111.11111111.00000000
网络地址: 192.168.1.0 → 11000000.10101000.00000001.00000000
CIDR(无类别域间路由)进一步打破了分类地址的束缚。它用「IP地址/前缀长度」的格式来表示一个网络。比如 192.168.1.0/24,表示前24位是网络号,后8位是主机号。
CIDR的好处很明显:灵活。你可以用/25、/26、/27等任意长度的前缀,精确匹配你的需求。比如一个部门只有30台机器,用/27(32个地址,30个可用)就刚刚好。
注意:每个子网中,主机号全0的地址是网络地址,全1的地址是广播地址,这两个地址不能分配给主机使用。所以一个/24网络,实际可用地址是254个(256-2),而不是256个。
3.4 ARP协议:IP地址到MAC地址的「翻译官」
IP地址是逻辑地址,MAC地址是物理地址。数据包在链路上传输时,最终依赖的是MAC地址。那么问题来了:已知目标IP地址,如何知道它的MAC地址?
ARP(地址解析协议)就是干这个的。它的工作原理很简单:
- 主机A广播一个ARP请求:「谁的IP是192.168.1.2?请告诉我你的MAC地址」
- 目标主机B收到后,单播回复:「我是192.168.1.2,我的MAC是00:1A:2B:3C:4D:5E」
- 主机A收到回复后,把IP-MAC映射缓存起来,下次直接用
ARP缓存是动态的,默认存活时间一般是2分钟。我建议在生产环境中,把关键设备的ARP表项设为静态,防止ARP欺骗攻击。我曾经在一个客户现场排查网络故障,发现核心交换机的ARP表被篡改了,导致流量被劫持到一台恶意服务器上……嗯,从那以后,静态ARP成了我安全基线的一部分。
ARP协议的两个关键点:
- 请求是广播,回复是单播:ARP请求发到广播地址(FF:FF:FF:FF:FF:FF),所有主机都能收到;但只有目标主机回复
- ARP是链路层协议:虽然它服务于网络层,但它的报文直接封装在以太网帧里,不经过IP层
3.5 ICMP协议:网络层的「诊断工具」
ICMP(互联网控制报文协议)是IP协议的「助手」。它不传输用户数据,而是用来传递控制信息和错误报告。
最常见的ICMP应用就是ping命令。它发送ICMP回显请求(Type 8),目标主机回复ICMP回显应答(Type 0)。通过测量往返时间,可以判断网络连通性和延迟。
另一个常用工具是traceroute(Windows下是tracert)。它利用ICMP超时消息(Type 11)来探测路径上的每一跳路由器。原理是:发送TTL从1开始递增的UDP包,每经过一个路由器TTL减1,当TTL为0时,路由器会回复一个ICMP超时消息,从而暴露自己的IP地址。
| ICMP类型 | 名称 | 用途 |
|---|---|---|
| 0 | 回显应答 | ping回复 |
| 3 | 目标不可达 | 网络/主机/端口不可达 |
| 8 | 回显请求 | ping请求 |
| 11 | 超时 | TTL超时,traceroute使用 |
安全提醒:ICMP虽然好用,但也是攻击者的工具。比如ICMP洪水攻击、Smurf攻击(利用广播地址放大流量)。我建议在边界防火墙上,只允许必要的ICMP类型(如回显请求/应答、目标不可达、超时),其他类型一律封禁。
3.6 知识体系总览
下面这张图,把本章的核心知识点串起来了。你可以把它当作一个「思维导图」,快速回顾网络层的核心组件和它们之间的关系。
这张图把网络层的四个核心模块串在了一起。IP协议是骨架,负责寻址和路由;ARP协议是翻译,把IP地址转成MAC地址;ICMP协议是诊断工具,帮我们排查问题;地址与子网是基础,决定了网络怎么划分。四者缺一不可。
3.7 实战:用Wireshark抓包验证
光说不练假把式。我建议你打开Wireshark,做几个实验:
- 抓一个ARP包:在命令行执行
arp -d清空缓存,然后ping 192.168.1.1,观察ARP请求和回复的交互过程 - 抓一个ICMP包:
ping 8.8.8.8,观察ICMP回显请求和应答的报文结构 - 验证子网掩码:用
ipconfig(Windows)或ifconfig(Linux)查看本机IP和子网掩码,手动计算网络地址
小技巧:Wireshark的过滤语法很强大。抓ARP包时用 arp 过滤,抓ICMP包时用 icmp 过滤。这样可以排除无关流量,聚焦你想看的内容。
网络层的内容就讲到这里。记住,IP协议是核心,子网掩码和CIDR是工具,ARP和ICMP是辅助。把这几个点吃透了,网络层你就掌握了七八成。剩下的路由协议(RIP、OSPF、BGP等),我们会在后面的章节展开。