4、网络层基石:IP协议、IPv4地址与子网划分、ARP协议、ICMP协议
各位好,欢迎来到第四章。这一章我们聊聊网络层的几个核心协议。说实话,网络层是整个TCP/IP体系里最“硬核”的部分,也是我当年入行时花了不少功夫才啃下来的。
IP协议负责寻址和路由,ARP协议解决IP到MAC的映射,ICMP协议则承担差错报告与诊断。这三兄弟配合起来,才构成了网络层的基本骨架。你想想看,没有它们,数据包连门都出不去。
核心观点:网络层是“端到端”通信的起点。IP协议提供逻辑地址,ARP协议打通二层与三层,ICMP协议则让网络有了“反馈”能力。三者缺一不可。
4.1 IP协议:网络层的“身份证”
IP协议,全称Internet Protocol,是网络层的核心。它的主要职责就是给每个设备分配一个逻辑地址,然后根据这个地址把数据包从源头发到目的地。
我个人习惯把IP协议比作“快递系统”。IP地址就是收件人地址,路由器就是分拣中心,数据包就是包裹。没有这个系统,网络上的设备就是一堆孤岛。
IP协议有两个版本:IPv4和IPv6。目前主流还是IPv4,但IPv6的普及速度在加快。我在做物联网项目时,经常遇到IPv4地址不够用的情况,最后不得不引入NAT或者直接上IPv6。
4.2 IPv4地址与子网划分
IPv4地址是32位的,通常写成点分十进制,比如192.168.1.1。32位意味着最多只有2^32 ≈ 43亿个地址。听起来很多,但全球设备数量早就超过这个数了。
IPv4地址分为网络部分和主机部分。网络部分标识一个网段,主机部分标识网段内的具体设备。子网掩码就是用来区分这两部分的。
| 地址类别 | 起始位 | 默认子网掩码 | 地址范围 | 用途 |
|---|---|---|---|---|
| A类 | 0 | 255.0.0.0 | 1.0.0.0 – 126.255.255.255 | 大型网络 |
| B类 | 10 | 255.255.0.0 | 128.0.0.0 – 191.255.255.255 | 中型网络 |
| C类 | 110 | 255.255.255.0 | 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 | 保留 |
小技巧:判断一个IP地址属于哪一类,看第一个字节就够了。A类1-126,B类128-191,C类192-223。127开头的地址是回环地址,用于本地测试。
4.2.1 子网划分实战
子网划分说白了就是把一个大网段切成多个小网段。为什么要这么做?因为广播域太大,网络性能会下降。我曾经在一个C类网络里接了300多台设备,广播风暴搞得网络几乎瘫痪。后来做了子网划分,问题立刻解决。
子网划分的核心是“借位”。从主机部分借几位作为子网位,剩下的就是主机位。借的位数越多,子网数量越多,每个子网内的主机数越少。
举个例子:192.168.1.0/24,默认子网掩码255.255.255.0。如果我想把它分成4个子网,需要借2位。
原网络:192.168.1.0/24
借2位后:192.168.1.0/26
子网掩码:255.255.255.192
子网划分结果:
子网1:192.168.1.0 – 192.168.1.63
子网2:192.168.1.64 – 192.168.1.127
子网3:192.168.1.128 – 192.168.1.191
子网4:192.168.1.192 – 192.168.1.255
每个子网可用主机数:2^(32-26) - 2 = 62台
注意:每个子网的第一个地址是网络地址,最后一个地址是广播地址,这两个地址不能分配给设备使用。所以可用主机数要减2。
我在做子网规划时,习惯先画一张表,把借位情况、子网数量、主机数量都列清楚。这样不容易出错。尤其是做大型网络规划时,一步错步步错。
4.3 ARP协议:IP地址到MAC地址的“翻译官”
ARP协议,全称Address Resolution Protocol。它的作用很简单:已知目标IP地址,获取目标MAC地址。
你可能会问:为什么需要ARP?因为二层网络(以太网)通信靠的是MAC地址,不是IP地址。IP地址是逻辑地址,MAC地址是物理地址。数据包在链路上传输时,必须封装成帧,帧头里填的就是MAC地址。
ARP的工作原理是这样的:
- 主机A要发送数据给主机B,但只知道B的IP地址,不知道B的MAC地址。
- 主机A在局域网内广播一个ARP请求:“谁的IP是192.168.1.2?请告诉我你的MAC地址。”
- 所有主机都收到这个广播,但只有主机B响应:“我是192.168.1.2,我的MAC地址是00:1A:2B:3C:4D:5E。”
- 主机A收到响应后,把IP-MAC映射关系缓存到本地ARP表里,下次直接查表,不用再广播。
ARP缓存是有时效的,一般几分钟到几十分钟不等。我遇到过一个问题:网络里有一台设备频繁更换IP,但其他设备的ARP缓存没更新,导致通信失败。后来我手动清了ARP缓存才解决。
# 查看ARP缓存(Windows)
arp -a
# 查看ARP缓存(Linux)
arp -n
# 手动删除ARP条目(Windows)
arp -d 192.168.1.2
# 手动删除ARP条目(Linux)
arp -d 192.168.1.2
避坑指南:ARP协议有一个著名的安全漏洞——ARP欺骗。攻击者伪造ARP响应,把网关的IP地址映射到自己的MAC地址上,从而截获所有流量。我曾经在一个客户现场排查网络慢的问题,最后发现就是ARP欺骗。解决方案是启用交换机的DAI(Dynamic ARP Inspection)功能。
4.4 ICMP协议:网络层的“体检医生”
ICMP协议,全称Internet Control Message Protocol。它的主要功能是报告网络层的错误和异常情况。说白了,就是让网络设备之间能互相“打招呼”和“报错”。
ICMP协议最常用的两个工具是ping和traceroute。ping用于测试两台设备之间的连通性,traceroute用于追踪数据包经过的路由路径。
ICMP报文类型很多,常见的有:
| 类型 | 代码 | 含义 | 典型场景 |
|---|---|---|---|
| 0 | 0 | Echo Reply | ping响应 |
| 3 | 0 | Destination Unreachable (Network) | 目标网络不可达 |
| 3 | 1 | Destination Unreachable (Host) | 目标主机不可达 |
| 3 | 3 | Destination Unreachable (Port) | 目标端口不可达 |
| 8 | 0 | Echo Request | ping请求 |
| 11 | 0 | Time Exceeded (TTL expired) | TTL超时,traceroute使用 |
我记得有一次,客户说某个网站打不开。我ping了一下,发现请求超时。但用traceroute一看,数据包在第三跳就丢了。最后定位到是中间路由器的路由表配置错误。没有ICMP,这种问题排查起来就像大海捞针。
实用技巧:ping命令的-t参数(Windows)可以持续发送请求,适合长时间监测网络稳定性。Linux下用-c参数指定次数。另外,ping不通不一定是网络故障,也可能是防火墙禁用了ICMP。我遇到过好几次这种情况。
4.4.1 ICMP与网络诊断
ICMP在物联网设备入网过程中也扮演重要角色。设备上电后,通常会先ping一下网关,确认网络连通性。如果ping不通,设备会尝试重新获取IP地址或者进入故障模式。
我在一个智能家居项目中,发现部分设备经常掉线。排查后发现,这些设备的ICMP超时时间设置得太短,网络稍微波动一下就被判定为离线。后来把超时时间从1秒调整到3秒,问题就解决了。
# 持续ping网关,检查网络稳定性
ping 192.168.1.1 -t
# 使用traceroute追踪路由路径(Windows)
tracert 8.8.8.8
# 使用traceroute追踪路由路径(Linux)
traceroute 8.8.8.8