网络层核心协议:IP协议详解

网络层是整个TCP/IP协议栈的「交通枢纽」。而IP协议,就是枢纽里的交通规则。说白了,它负责把数据包从源主机送到目标主机,中间可能经过好几跳路由器。我刚开始学的时候,总觉得IP协议很简单——不就是个地址嘛?后来踩了坑才发现,里面的门道多着呢。

IPv4地址结构与分类

IPv4地址是32位的二进制数,通常写成点分十进制,比如 192.168.1.1。这32位分成网络号和主机号两部分。网络号标识一个网段,主机号标识网段里的具体设备。

早期设计者把地址分成了五类:

类别 起始位 地址范围 默认子网掩码 用途
A类 0 1.0.0.0 – 126.255.255.255 255.0.0.0 大型网络
B类 10 128.0.0.0 – 191.255.255.255 255.255.0.0 中型网络
C类 110 192.0.0.0 – 223.255.255.255 255.255.255.0 小型网络
D类 1110 224.0.0.0 – 239.255.255.255 无 组播
E类 1111 240.0.0.0 – 255.255.255.255 无 保留/实验
我的经验: 实际项目中A类地址很少见,大部分企业网都用C类或B类。D类组播在视频会议、路由协议(比如OSPF)里很常见。E类基本不用,你看到它多半是抓包抓到了异常流量。

子网划分与CIDR

分类地址有个大问题:浪费。一个C类只有254个主机,一个B类却有65534个。你想想看,一个中型公司用B类太浪费,用C类又不够。怎么办?

子网划分就是解决方案。它把主机号借几位给网络号,把一个大的网络切成多个小的子网。比如 192.168.1.0/24 可以切成 192.168.1.0/25 和 192.168.1.128/25,每个子网126个可用主机。

后来CIDR(无类别域间路由)彻底打破了分类的束缚。CIDR用「前缀长度」代替了固定的分类,比如 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16。前缀长度可以是0到32之间的任意值。

CIDR的核心思想: 不再看地址是A、B还是C类,只看网络前缀长度。这让路由聚合变得非常灵活,也大大减少了路由表的条目数。

我记得有一次帮客户做网络规划,他们申请了一个 10.0.0.0/8 的私有地址段。按分类法这就是一个A类网,但用CIDR我把它切成了几十个 /24 子网,每个部门一个,互不干扰。要是用老方法,光子网掩码就得算半天。

ARP协议工作原理

IP地址是逻辑地址,数据链路层只认MAC地址。ARP(地址解析协议)就是干这个翻译活的——把IP地址转成MAC地址。

工作流程很简单:

  1. 主机A要发数据给主机B,知道B的IP,不知道B的MAC。
  2. A在局域网里广播一个ARP请求:「谁的IP是192.168.1.2?告诉我你的MAC。」
  3. 所有主机都收到这个广播,但只有B回应:「我是192.168.1.2,我的MAC是aa:bb:cc:dd:ee:ff。」
  4. A收到回应,把IP-MAC映射缓存起来,然后正常通信。
避坑指南: 我曾经遇到过一个故障,某台服务器间歇性丢包。查了半天发现是ARP缓存冲突——两台设备配置了相同的IP地址。ARP表里一会是MAC1,一会是MAC2,导致流量乱跳。解决方案:静态ARP绑定,或者用DHCP Snooping做防护。

ARP还有一个变种叫RARP(逆地址解析协议),用于无盘工作站启动时获取自己的IP。不过现在基本被DHCP取代了,你了解就行。

ICMP协议与Ping

ICMP(互联网控制报文协议)是IP协议的「助手」。它不传用户数据,专门传控制信息和错误报告。你平时用的 ping 和 traceroute 都是基于ICMP的。

ICMP报文类型很多,常见的有:

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

Ping的原理:发送ICMP Echo Request,目标回复ICMP Echo Reply。通过计算往返时间(RTT)和丢包率,就能判断网络连通性和延迟。

我的习惯: 排查网络问题时,我第一件事就是ping网关。如果网关通,说明二层没问题;如果网关不通,先查物理链路和ARP。然后ping一个外网IP(比如8.8.8.8),如果通说明三层路由正常。如果内网通外网不通,多半是缺省路由或NAT配置有问题。

ICMP还有一个重要功能:Path MTU Discovery。它利用ICMP的「Fragmentation Needed」报文,让发送端自动调整数据包大小,避免在路径中被分片。我在调优大文件传输时经常用到这个机制。

网络层核心协议关系图 IP协议 ARP协议 ICMP协议 子网划分/CIDR IPv4地址分类 IP协议是核心,ARP解决二层寻址,ICMP提供控制与诊断 子网划分和CIDR让IP地址使用更高效

嗯,到这里网络层核心协议的基本骨架就搭起来了。IP协议是基石,ARP和ICMP是左右护法,子网划分和CIDR是让这个体系能在大规模网络中运转的关键。你把这些搞清楚了,后面学路由协议、NAT、IPsec都会轻松很多。