4、网络层核心:IP协议、IPv4地址分类、子网掩码、CIDR、ARP协议、ICMP协议

网络层,说白了就是整个通信栈的「交通枢纽」。我做了这么多年网络协议栈,最深的感触就是:如果网络层没搞明白,上层应用跑得再欢也是白搭。今天咱们就把网络层的几个核心家伙——IP协议、地址分类、子网掩码、CIDR、ARP和ICMP——一个一个掰扯清楚。

4.1 IP协议:互联网的「身份证」系统

IP协议(Internet Protocol)是网络层的核心协议。它的任务就一个:把数据包从源主机送到目标主机。你想想看,全球几十亿台设备互联,靠什么找到彼此?靠的就是IP地址。

IP协议有两个版本:IPv4和IPv6。目前主流还是IPv4,但地址快枯竭了,IPv6正在逐步替换。咱们先重点讲IPv4。

4.2 IPv4地址分类:A、B、C、D、E五类

IPv4地址是32位的,通常写成点分十进制,比如 192.168.1.1。早期设计时,人们把地址分成了五类:

类别 首字节范围 默认子网掩码 用途
A类 1.0.0.0 – 126.255.255.255 255.0.0.0 大型网络(如IBM、AT&T早期)
B类 128.0.0.0 – 191.255.255.255 255.255.0.0 中型网络(如大学、中型企业)
C类 192.0.0.0 – 223.255.255.255 255.255.255.0 小型网络(如家庭、小公司)
D类 224.0.0.0 – 239.255.255.255 无 组播(多播通信)
E类 240.0.0.0 – 255.255.255.255 无 保留(实验用途)

重要提醒:127.0.0.0/8 是回环地址,用于本地测试。你ping 127.0.0.1 就是在ping自己。

我记得刚入行时,有个同事把公司网络配成了A类地址,结果整个子网广播域太大,交换机直接撑爆了。嗯,这就是分类地址的坑——地址浪费严重,灵活性差。

4.3 子网掩码:划分子网的「刀」

子网掩码的作用,就是告诉设备:IP地址中,哪部分是网络号,哪部分是主机号。

举个例子:
IP地址:192.168.1.100
子网掩码:255.255.255.0
网络号:192.168.1.0
主机号:0.0.0.100

怎么算的?把IP和掩码做「按位与」运算。说白了,掩码为1的位就是网络位,为0的位就是主机位。

我的小技巧:如果你看到掩码是255.255.255.0,那这个子网最多有254个可用主机(去掉网络地址和广播地址)。我习惯用 /24 来表示,也就是CIDR写法。

4.4 CIDR:告别分类,拥抱无类

CIDR(Classless Inter-Domain Routing)是1993年提出的,目的就是解决分类地址的浪费问题。它不再死板地分A/B/C类,而是用「前缀长度」来表示网络位。

写法很简单:IP地址/前缀长度。比如:

  • 192.168.1.0/24 等价于掩码 255.255.255.0
  • 10.0.0.0/8 等价于掩码 255.0.0.0
  • 172.16.0.0/12 等价于掩码 255.240.0.0

CIDR的好处是:你可以任意划分网络大小。比如一个部门只需要10个IP,那就用 /28(16个地址,14个可用),而不是硬塞一个C类(254个地址)。

避坑指南:我曾经在配置云服务器安全组时,把CIDR写成了 0.0.0.0/0,结果所有人都能访问。嗯,那是生产环境,差点出大事。记住:0.0.0.0/0 代表所有IP,慎用!

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

ARP(Address Resolution Protocol)解决一个问题:我知道对方的IP,但不知道对方的MAC地址,怎么把数据帧发过去?

ARP的工作流程很简单:

  1. 主机A广播一个ARP请求:「谁的IP是192.168.1.2?请告诉我你的MAC地址」
  2. 主机B收到后,发现是自己的IP,就单播回复:「我是192.168.1.2,我的MAC是AA:BB:CC:DD:EE:FF」
  3. 主机A把映射关系缓存起来,下次直接用

ARP缓存默认存活几分钟到几小时不等。我遇到过一个问题:ARP缓存过期导致网络间歇性断连。排查了半天,最后发现是某台设备的MAC地址变了,但缓存没更新。解决办法:手动清缓存 arp -d。

ARP欺骗攻击:攻击者伪造ARP回复,让网关把流量发到攻击者机器上。这就是中间人攻击的一种。防御方法:使用静态ARP表或开启DAI(Dynamic ARP Inspection)。

4.6 ICMP协议:网络层的「诊断医生」

ICMP(Internet Control Message Protocol)主要用于传递错误信息和诊断结果。你平时用的 ping 和 traceroute 就是基于ICMP的。

常见的ICMP消息类型:

类型 含义 典型场景
0 Echo Reply ping回复
3 Destination Unreachable 目标不可达(网络、主机、端口)
8 Echo Request ping请求
11 Time Exceeded TTL超时(traceroute用这个)

我个人习惯用 ping -c 4 8.8.8.8 快速测试网络连通性。如果ping不通,先看ICMP回复是什么:

  • Destination Host Unreachable:本地路由表有问题,或者目标网段不存在
  • Request Timed Out:目标没回复,可能是防火墙拦截了ICMP
  • TTL Exceeded:跳数太多,路由环路或TTL设置太小

一个小经验:很多云服务器默认禁用了ICMP,所以你ping不通不代表服务挂了。这时候改用 telnet ip port 或 nc -zv ip port 测试端口更靠谱。

4.7 本章知识体系总览

下面这张图把网络层核心协议的关系梳理清楚了。我画图时习惯把「IP协议」放在中心,因为它是一切的基础。

IP协议 IPv4地址分类 A/B/C/D/E五类 子网掩码 划分网络/主机位 CIDR 无类域间路由 ARP协议 IP→MAC地址解析 ICMP协议 错误报告/诊断 ping/traceroute 基于ICMP的工具 网络层核心协议关系图:IP协议为中心,周边协议协同工作

这张图你看懂了吗?IP协议是核心,它定义了地址格式和路由方式。IPv4分类和CIDR是地址分配方案,子网掩码是划分子网的工具。ARP负责在局域网内解析MAC地址,ICMP则负责网络诊断和错误报告。这几个家伙配合起来,才构成了完整的网络层。

一句话总结:IP协议让数据包找到路,ARP让数据包找到门,ICMP告诉你路通不通。这三者缺一不可。


可可精品资料库