3. 网络层核心协议:IP协议与IP地址分类、子网掩码与CIDR、ARP协议工作原理、ICMP协议与Ping工具、路由基础与静态路由
网络层是整个TCP/IP协议栈的「交通枢纽」。说白了,数据包能不能从A点跑到B点,全靠这一层。我刚开始接触网络时,总觉得IP地址就是一台电脑的门牌号,后来踩了不少坑才明白——光有门牌号远远不够,你还得知道门牌号是怎么划分的、邻居是怎么找到的、路是怎么走的。
这一章,我们就把网络层的几个核心协议掰开揉碎,一个一个讲清楚。
3.1 IP协议与IP地址分类
IP协议(Internet Protocol)是网络层的核心。它的职责很简单:尽力而为地把数据包从源地址送到目的地址。注意「尽力而为」这四个字——它不保证可靠,不保证顺序,不保证不丢包。嗯,这就是IP的哲学。
IP地址,就是网络世界里每个设备的唯一标识。目前主流还是IPv4,32位,分4段,每段0-255。比如 192.168.1.1。
3.1.1 传统的IP地址分类(Classful)
早期设计者把IP地址分成了A、B、C、D、E五类。怎么区分?看第一个字节的高位:
| 类别 | 高位比特 | 第一字节范围 | 默认子网掩码 | 可用主机数 |
|---|---|---|---|---|
| A类 | 0 | 1 - 126 | 255.0.0.0 | 约1677万 |
| B类 | 10 | 128 - 191 | 255.255.0.0 | 约6.5万 |
| C类 | 110 | 192 - 223 | 255.255.255.0 | 254 |
| D类 | 1110 | 224 - 239 | 组播地址 | — |
| E类 | 1111 | 240 - 255 | 保留 | — |
你想想看,一个A类网络能容纳1600多万台主机,谁家用得了?而C类只有254个,稍微大点的公司就不够。这种「一刀切」的分类方式,造成了巨大的地址浪费。我在早期做网络规划时,就遇到过B类地址不够分、A类又不敢用的尴尬局面。
重要:私有地址范围
以下地址段不会在公网上路由,专门用于内网:
- A类私有:10.0.0.0/8
- B类私有:172.16.0.0/12
- C类私有:192.168.0.0/16
3.2 子网掩码与CIDR
传统的分类地址太死板了。后来大家想了个办法——子网掩码。它用来告诉设备:IP地址里,哪部分是网络号,哪部分是主机号。
比如 255.255.255.0,二进制就是连续的24个1加8个0。1的部分是网络位,0的部分是主机位。
3.2.1 CIDR——无类域间路由
CIDR彻底抛弃了A、B、C类的概念。它用「IP地址/前缀长度」来表示一个网络。比如 192.168.1.0/24,意思就是前24位是网络位。
这样做的好处是什么?灵活。你可以把一个C类地址切成更小的子网,也可以把多个C类地址合并成一个超网。
我的习惯:做子网划分时,我一般先确定需要多少个子网,每个子网需要多少台主机,然后反推掩码长度。记住一个公式:2^(32-掩码长度) - 2 = 可用主机数。减2是因为网络地址和广播地址不能用。
举个例子:你有一个 192.168.1.0/24 的网络,想分成4个子网。那就借2位主机位做子网位,掩码变成 /26(255.255.255.192)。每个子网有62个可用地址。
子网1: 192.168.1.0/26 可用范围: 192.168.1.1 - 192.168.1.62
子网2: 192.168.1.64/26 可用范围: 192.168.1.65 - 192.168.1.126
子网3: 192.168.1.128/26 可用范围: 192.168.1.129 - 192.168.1.190
子网4: 192.168.1.192/26 可用范围: 192.168.1.193 - 192.168.1.254
注意:每个子网的第一个地址是网络地址,最后一个地址是广播地址,都不能分配给主机。我曾经见过有人把广播地址配给服务器,结果整个网络广播风暴,排查了一下午。
3.3 ARP协议工作原理
IP地址是逻辑地址,但数据在链路上传输时,靠的是MAC地址(物理地址)。那么问题来了:我知道对方的IP,怎么知道对方的MAC?
这就是ARP协议(Address Resolution Protocol)干的事。
3.3.1 ARP的工作流程
- 主机A要发数据给主机B(已知B的IP)。
- A先查自己的ARP缓存表,看有没有B的IP对应的MAC。
- 如果有,直接封装帧发送。
- 如果没有,A在局域网内广播一个ARP请求:「谁的IP是192.168.1.2?请告诉我你的MAC地址。」
- 所有主机都收到这个广播,但只有B回应:「我是192.168.1.2,我的MAC是aa:bb:cc:dd:ee:ff。」
- A收到回应,把IP-MAC映射写入缓存,然后发送数据。
关键点:ARP请求是广播,ARP回应是单播。这个细节很多人搞反。
我在项目中遇到过一个问题:某台设备突然无法访问网关,但其他设备都正常。排查了半天,发现是ARP缓存表里网关的MAC地址被篡改了——典型的ARP欺骗攻击。从那以后,我养成了在关键网段配置静态ARP条目的习惯。
3.3.2 ARP缓存与老化
ARP缓存不是永久的。Windows默认超时是2分钟,Linux是30-60秒。为什么?因为网络拓扑会变,MAC地址可能换。缓存老化后,下次通信会重新发起ARP请求。
实用命令:
- Windows:
arp -a查看缓存,arp -d清空缓存 - Linux:
ip neigh show查看邻居表,ip neigh flush all清空
3.4 ICMP协议与Ping工具
ICMP(Internet Control Message Protocol)是IP协议的「助手」。它不传用户数据,专门用来传控制消息和错误报告。
你平时用的 ping 和 tracert,底层都是ICMP。
3.4.1 ICMP的主要功能
- 差错报告:比如目标不可达(Type 3)、超时(Type 11)
- 查询功能:比如回显请求/应答(Type 8/0),就是ping用的
- 重定向:告诉主机有更好的路由路径
3.4.2 Ping的工作原理
Ping发送一个ICMP Echo Request(类型8)给目标主机。目标主机收到后,回复一个ICMP Echo Reply(类型0)。Ping工具会计算往返时间(RTT),并统计丢包率。
# 一个典型的ping输出
C:\>ping 8.8.8.8
正在 Ping 8.8.8.8 具有 32 字节的数据:
来自 8.8.8.8 的回复: 字节=32 时间=12ms TTL=117
来自 8.8.8.8 的回复: 字节=32 时间=11ms TTL=117
来自 8.8.8.8 的回复: 字节=32 时间=13ms TTL=117
来自 8.8.8.8 的回复: 字节=32 时间=12ms TTL=117
8.8.8.8 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 11ms,最长 = 13ms,平均 = 12ms
TTL(Time To Live)字段很有意思。它每经过一个路由器就减1,减到0时路由器会丢弃数据包并回复ICMP超时消息。这就是 tracert 的原理——通过发送TTL从1递增的数据包,逐跳探测路径。
避坑指南:很多防火墙默认会屏蔽ICMP。我曾经排查一个「网络不通」的问题,ping网关不通,但业务流量正常。后来发现是防火墙禁用了ICMP。所以,ping不通不代表网络不通,要结合其他手段综合判断。
3.5 路由基础与静态路由
路由,就是数据包从源到目的地的「导航」。路由器维护着一张路由表,里面记录着:要去哪个网络,从哪个接口出去,下一跳是谁。
3.5.1 路由表的核心要素
| 字段 | 说明 |
|---|---|
| 目标网络 | 目的IP所在的网络地址 |
| 掩码 | 目标网络的子网掩码 |
| 下一跳 | 数据包要发给的下一个路由器接口IP |
| 出接口 | 数据包从本路由器的哪个接口发出 |
| 度量值 | 路径的优先级,值越小越优先 |
3.5.2 静态路由配置
静态路由就是管理员手动配置的路由。适合小型网络或特定场景。
假设我们有三个网络:
- 网络A:192.168.1.0/24
- 网络B:192.168.2.0/24
- 网络C:192.168.3.0/24
路由器R1连接A和B,路由器R2连接B和C。要让A能访问C,需要在R1上配置一条指向C的静态路由:
# 在R1上配置(华为/思科语法类似)
ip route-static 192.168.3.0 255.255.255.0 192.168.2.2
这条命令的意思是:去往192.168.3.0/24的数据包,下一跳交给192.168.2.2(R2的接口IP)。
我的建议:配置静态路由时,一定要确认下一跳IP是可达的。我见过有人把下一跳配成了不存在的地址,结果路由表里这条路由一直处于「无效」状态。用 display ip routing-table 查看时,注意看状态标志。
3.5.3 默认路由
默认路由是路由表里的「兜底条款」。当数据包的目标网络在路由表里找不到匹配项时,就走默认路由。
# 配置默认路由
ip route-static 0.0.0.0 0.0.0.0 192.168.1.1
0.0.0.0/0 代表所有网络。这个配置在出口路由器上非常常见——所有去往公网的流量,都交给运营商网关。
路由匹配原则:最长前缀匹配
路由器在查表时,会选择掩码最长的那个条目。比如目标IP是192.168.1.100,路由表里有两条:
- 192.168.1.0/24
- 192.168.1.0/25
路由器会选择/25的条目,因为它的掩码更长,更精确。
3.6 本章知识体系总览
下面这张图把本章的核心知识点串在了一起。你可以把它当作一张「网络层速查地图」:
网络层的这几个协议,就像一套组合拳。IP地址是门牌号,子网掩码是小区划分,ARP是问邻居门牌号,ICMP是敲门确认有没有人,路由是导航告诉你怎么走到另一个小区。少了任何一个,数据包都到不了目的地。
嗯,这一章的内容就到这里。记住,理论是基础,但真正理解它们,还得靠动手配、抓包看、踩坑悟。下次遇到网络不通,别急着甩锅给运营商,先想想——是IP配错了?掩码写错了?ARP缓存过期了?还是路由表缺了一条?