4. 网络层核心协议IP:IP协议功能与特点、IPv4地址结构、IPv6简介、IP数据报格式
聊到TCP/IP协议栈,网络层是真正承上启下的核心。而IP协议,就是网络层的灵魂。说白了,IP协议解决的是“如何把数据包从一台机器送到另一台机器”的问题,不管这两台机器隔了几条街还是半个地球。
我刚开始学网络时,总觉得IP地址就是一台电脑的“门牌号”。后来在项目里排查一个跨网段通信故障,折腾了两天才发现是子网掩码配错了。嗯,从那以后我才真正理解——IP地址不是孤立的数字,它背后有一套完整的分层、聚合、路由体系。
4.1 IP协议的功能与特点
IP协议的全称是Internet Protocol,中文叫“网际协议”。它的核心功能就三个:寻址、路由、分片与重组。
- 寻址:给每个网络接口分配一个唯一的IP地址,就像快递包裹上的收件人地址。
- 路由:根据目的IP地址,决定数据包下一跳该往哪个方向走。
- 分片与重组:当数据包太大,超过链路层的MTU(最大传输单元)时,IP层会把它切成小块,到了目的地再拼回去。
IP协议有几个特点,我挑重要的说:
- 无连接:发送数据前不需要先建立连接。每个包独立发送,各自找路。这跟打电话不一样,更像寄明信片。
- 不可靠:IP层不保证数据包一定能到达。丢了?重传是上层TCP的事,IP只管尽力送。
- 尽力而为:IP会尽最大努力把数据送到,但如果网络拥塞、链路断了,它就直接丢包,不会通知你。
4.2 IPv4地址结构
IPv4地址是32位的二进制数,通常写成点分十进制,比如 192.168.1.1。32位意味着最多只有约43亿个地址。你想想看,全球几十亿人,每人好几台设备,这点地址哪够用?所以后来才有了IPv6。
4.2.1 分类编址(Classful Addressing)
早期的IPv4地址分成了A、B、C、D、E五类。前三类是给主机用的,D类组播,E类保留。分类的依据是地址的前几位:
| 类别 | 前导位 | 地址范围 | 默认子网掩码 | 用途 |
|---|---|---|---|---|
| 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 | — | 保留 |
分类编址有个大问题:浪费地址。比如一个公司只有300台机器,分一个B类地址(支持6万多个主机)太浪费,分一个C类(最多254台)又不够。所以后来出现了子网掩码和CIDR。
4.2.2 子网掩码(Subnet Mask)
子网掩码的作用是区分IP地址中的“网络号”和“主机号”。它也是一个32位的数,网络号部分全1,主机号部分全0。
举个例子:IP地址 192.168.1.100,子网掩码 255.255.255.0。把IP和掩码做“与”运算,得到网络号 192.168.1.0,主机号就是 0.0.0.100。
关键点: 两个IP要通信,必须判断它们是否在同一个子网里。如果在,直接发二层广播找对方;如果不在,就得通过网关转发。
我曾经帮一个创业公司排查网络问题,他们所有机器都配了 255.255.255.0,但IP段是 10.0.0.0/8。结果跨部门通信全走网关,慢得要命。改完子网掩码,速度一下就上来了。
4.2.3 CIDR(无类别域间路由)
CIDR彻底抛弃了A/B/C类的固定分界,改用“前缀长度”来表示网络号位数。写法就是IP后面加个斜杠跟数字,比如 192.168.1.0/24,意思就是前24位是网络号。
CIDR的好处有两个:
- 节省地址:可以根据实际需要灵活分配,比如
/25有126个主机,/26有62个,非常灵活。 - 路由聚合:可以把多个连续的小网段聚合成一个大网段,减少路由表的条目数。比如
192.168.0.0/24到192.168.3.0/24可以聚合成192.168.0.0/22。
/30 分配给一个需要3台机器的部门,结果广播地址和网络号占掉两个,只剩两个可用地址,根本不够用。
4.3 IPv6简介
IPv6是下一代IP协议,主要解决IPv4地址枯竭的问题。IPv6的地址长度是128位,是IPv4的4倍。理论上地址数量是2的128次方,地球上每粒沙子都能分到一堆地址。
IPv6的地址写法也变了,用冒号分隔的16进制数,比如 2001:0db8:85a3:0000:0000:8a2e:0370:7334。连续的全0段可以用双冒号省略,比如 2001:db8::8a2e:370:7334。
IPv6相比IPv4,有几个重要改进:
- 更大的地址空间:这个不用多说。
- 简化的头部格式:IPv6的固定头部只有40字节,比IPv4的20-60字节更简洁,路由器处理更快。
- 内置安全性:IPSec是IPv6的标配,而IPv4里IPSec只是个可选扩展。
- 无状态地址自动配置(SLAAC):设备插上网线就能自动获取IP,不需要DHCP服务器。
我个人习惯在内部实验环境里优先用IPv6。虽然现在IPv6的普及率还没到100%,但大型云厂商和运营商都已经全面支持了。如果你现在做新项目,建议直接考虑双栈(IPv4+IPv6)部署。
4.4 IP数据报格式
IP数据报就是IP层传输的基本单位。IPv4的头部长度是20到60字节,其中固定部分20字节,后面跟着可选项。下面这张图是我手绘的IPv4头部结构:
几个关键字段我单独说一下:
- 版本:4位,IPv4就是4,IPv6就是6。
- 首部长度:4位,单位是4字节。最小值5(20字节),最大值15(60字节)。
- 总长度:16位,整个数据报的字节数,包括头部和数据。最大值65535字节。
- 生存时间(TTL):每经过一个路由器减1,减到0就丢弃。防止数据包在网络里死循环。
- 协议:告诉接收方这个IP包里面装的是TCP(6)、UDP(17)还是ICMP(1)等。
- 首部校验和:只校验头部,不校验数据。每经过一个路由器都要重新计算,因为TTL变了。
IPv6的头部就简洁多了,固定40字节,没有选项字段(选项被放到扩展头部里)。路由器处理IPv6包时不需要解析扩展头部,所以转发效率更高。
好了,这一章的内容就这些。IP协议是整个网络层的基石,理解它的地址结构和数据报格式,后面学路由协议、NAT、ICMP都会轻松很多。