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.010.0.0.0/8等价于掩码 255.0.0.0172.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的工作流程很简单:
- 主机A广播一个ARP请求:「谁的IP是192.168.1.2?请告诉我你的MAC地址」
- 主机B收到后,发现是自己的IP,就单播回复:「我是192.168.1.2,我的MAC是AA:BB:CC:DD:EE:FF」
- 主机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分类和CIDR是地址分配方案,子网掩码是划分子网的工具。ARP负责在局域网内解析MAC地址,ICMP则负责网络诊断和错误报告。这几个家伙配合起来,才构成了完整的网络层。
一句话总结:IP协议让数据包找到路,ARP让数据包找到门,ICMP告诉你路通不通。这三者缺一不可。
可可精品资料库