3、网络层核心协议:IP协议头部结构详解、IPv4地址分类与子网划分、IPv6基础
网络层是整个TCP/IP体系的灵魂。而IP协议,就是这灵魂的骨架。今天咱们就把它拆开看看,里面到底长什么样。
3.1 IP协议头部结构详解
IP头部,说白了就是包裹在最外面的那个信封。信封上写明了从哪来、到哪去、怎么走。我刚开始学的时候,总觉得这20个字节没啥好看的。后来在项目里抓包排查丢包问题,才发现每一个字段都可能成为瓶颈。
标准的IPv4头部固定20字节,加上选项最多60字节。咱们先看固定部分:
| 字段 | 长度(bit) | 作用 |
|---|---|---|
| 版本号 | 4 | IPv4填4,IPv6填6 |
| 首部长度 | 4 | 以4字节为单位,最小5,最大15 |
| 服务类型(ToS) | 8 | 现在演变为DSCP,用于QoS |
| 总长度 | 16 | 整个IP包的长度,最大65535字节 |
| 标识符 | 16 | 分片时用于重组 |
| 标志位 | 3 | DF(不分片)、MF(更多分片) |
| 片偏移 | 13 | 分片在原包中的位置 |
| 生存时间(TTL) | 8 | 每经过一跳减1,为0时丢弃 |
| 协议号 | 8 | 标识上层协议,6=TCP,17=UDP |
| 首部校验和 | 16 | 只校验头部,不校验数据 |
| 源IP地址 | 32 | 发送方IP |
| 目的IP地址 | 32 | 接收方IP |
核心要点:TTL字段是防环的关键。我曾经在数据中心里遇到过一台交换机配置错误,导致路由环路。要不是TTL归零后设备主动丢包,整个网络可能都被广播风暴冲垮了。
个人习惯:排查网络问题时,我第一件事就是看IP头部的TTL值。如果TTL不是常见的64、128、255,说明中间可能经过了NAT或者隧道封装。
3.2 IPv4地址分类与子网划分
IPv4地址是32位的,通常写成点分十进制。但早期设计时,人们把地址分成了A、B、C、D、E五类。说实话,这种分类方式现在基本被CIDR取代了,但理解它有助于你搞懂子网划分的来龙去脉。
3.2.1 传统分类
| 类别 | 首字节范围 | 默认子网掩码 | 可用主机数 |
|---|---|---|---|
| A类 | 1 - 126 | 255.0.0.0 | 16,777,214 |
| B类 | 128 - 191 | 255.255.0.0 | 65,534 |
| C类 | 192 - 223 | 255.255.255.0 | 254 |
| D类 | 224 - 239 | 组播地址 | — |
| E类 | 240 - 255 | 保留 | — |
你想想看,一个A类网络有1600多万个主机地址,谁用得了?而C类只有254个,稍微大点的公司就不够用。这就是为什么后来要搞子网划分。
3.2.2 子网划分实战
子网划分,说白了就是把一个大的网络切成多个小的网络。核心操作就是向主机位借位,变成网络位。
举个例子:给你一个C类网络 192.168.1.0/24,需要划分成4个子网。
原网络:192.168.1.0/24
子网掩码:255.255.255.0
二进制:11111111.11111111.11111111.00000000
借2位给网络位:
新掩码:255.255.255.192
二进制:11111111.11111111.11111111.11000000
4个子网:
子网0:192.168.1.0/26 可用范围:192.168.1.1 - 192.168.1.62
子网1:192.168.1.64/26 可用范围:192.168.1.65 - 192.168.1.126
子网2:192.168.1.128/26 可用范围:192.168.1.129 - 192.168.1.190
子网3:192.168.1.192/26 可用范围:192.168.1.193 - 192.168.1.254
避坑指南:我曾经在配置交换机管理地址时,把子网掩码写成了255.255.255.0,但实际网络是/26的。结果管理地址跟业务地址不在同一个子网,设备死活ping不通。排查了半小时才发现是掩码写错了。记住:子网掩码决定了广播域的范围。
3.2.3 CIDR与VLSM
CIDR(无类域间路由)的出现,彻底打破了ABC类的限制。它用前缀长度来表示网络位,比如192.168.1.0/24。VLSM(可变长子网掩码)则允许在一个主网络中使用不同长度的子网掩码。
我个人习惯用CIDR来规划地址。举个例子:
需求:一个公司有3个部门
- 研发部:100台主机
- 市场部:50台主机
- 行政部:20台主机
分配方案:
研发部:192.168.1.0/25 (128个地址)
市场部:192.168.1.128/26 (64个地址)
行政部:192.168.1.192/27 (32个地址)
这样分配,地址利用率高,而且每个子网都有余量用于扩展。
3.3 IPv6基础
IPv4地址枯竭这事儿,喊了快20年了。现在终于到了不得不面对的时候。IPv6用128位地址,号称可以为地球上的每一粒沙子分配一个IP地址。
3.3.1 IPv6地址表示
IPv6地址是128位的,写成8组16进制数,每组4个字符,用冒号分隔。
完整格式:2001:0db8:85a3:0000:0000:8a2e:0370:7334
简化规则:
1. 每组前面的0可以省略
2. 连续的0可以用::代替(只能使用一次)
简化后:2001:db8:85a3::8a2e:370:7334
小技巧:我在配置IPv6地址时,经常用双冒号来简化书写。但要注意,双冒号只能出现一次,否则设备不知道到底省略了多少个0。
3.3.2 IPv6地址分类
| 类型 | 前缀 | 用途 |
|---|---|---|
| 全局单播地址 | 2000::/3 | 公网通信,相当于IPv4的公网地址 |
| 链路本地地址 | fe80::/10 | 同一链路内通信,自动配置 |
| 唯一本地地址 | fc00::/7 | 相当于IPv4的私有地址 |
| 组播地址 | ff00::/8 | 一对多通信 |
| 任播地址 | — | 多个接口共享一个地址,最近者响应 |
3.3.3 IPv6头部简化
IPv6的头部比IPv4简单得多。固定部分只有40字节,而且没有校验和、没有分片相关字段(分片功能移到了扩展头部)。
IPv6固定头部(40字节):
- 版本号(4bit):固定为6
- 流量类别(8bit):相当于IPv4的ToS
- 流标签(20bit):用于QoS
- 有效载荷长度(16bit):数据部分长度
- 下一个头部(8bit):相当于IPv4的协议号
- 跳数限制(8bit):相当于IPv4的TTL
- 源地址(128bit)
- 目的地址(128bit)
核心变化:IPv6去掉了校验和,因为链路层和传输层已经做了校验。去掉了分片字段,因为分片由源端负责。这些改动让路由器处理IPv6包时更快,转发效率更高。
3.3.4 IPv6过渡技术
从IPv4到IPv6不是一蹴而就的。目前主流的过渡技术有三种:
- 双栈:设备同时运行IPv4和IPv6协议栈。这是最常用的方式。
- 隧道:把IPv6包封装在IPv4包里传输。比如6to4、Teredo。
- NAT64:在IPv6网络和IPv4网络之间做地址转换。
我记得有一次帮客户做IPv6改造,他们内部网络全是IPv6,但需要访问一个只支持IPv4的老系统。最后就是用NAT64解决的。说白了,过渡技术就是给新旧协议之间搭一座桥。
3.4 本章知识体系
下面这张图把本章的核心知识点串起来了。你可以看到IP头部、地址分类、子网划分、IPv6之间的逻辑关系。
这张图把本章的三个核心模块串在了一起。IPv4头部是基础,地址分类和子网划分是实战技能,IPv6是未来方向。三者缺一不可。