IPv4 分组(数据报)
分组格式
| 字段 | 说明 |
|---|---|
| 版本 | IP 协议版本号(IPv4 = 4) |
| 首部长度 | 4B 为单位,最小 5(20B),最大 15(60B) |
| 总长度 | 首部 + 数据,最大 65535B |
| 标识 | 同一数据报的分片具有相同标识 |
| 标志(3 位) | MF(More Fragment)、DF(Don’t Fragment)、保留位 |
| 片偏移 | 8B 为单位,表示分片在原始数据报中的位置 |
| TTL | 生存时间,每经过一个路由器减 1 |
| 协议 | 标识上层协议(TCP=6, UDP=17) |
| 首部校验和 | 只校验首部,不校验数据部分 |
| 源地址 | 发送方 IPv4 地址(32 位) |
| 目的地址 | 接收方 IPv4 地址(32 位) |
关键标志位
- MF = 1:表示后面还有分片(最后一片 MF = 0)
- DF = 0:数据报可以被分片;DF = 1 时不可分片,超长则丢弃
分片与重组
- MTU(最大传输单元):以太网 1500B,广域网 576B
- 分片在目的主机重组,不在路由器重组
- 片偏移计算:数据起始位置 / 8
IPv4 地址
地址结构
IP 地址 = {<网络号>, <主机号>}
地址分类
| 类别 | 第一个字节范围 | 网络号位数 | 主机号位数 | 最大网络数 | 每个网络最大主机数 |
|---|---|---|---|---|---|
| A 类 | 1-126 | 8 | 24 | 126 | 16,777,214 |
| B 类 | 128-191 | 16 | 16 | 16,384 | 65,534 |
| C 类 | 192-223 | 24 | 8 | 2,097,152 | 254 |
| D 类 | 224-239 | 组播地址 | - | - | - |
| E 类 | 240-255 | 保留 | - | - | - |
特殊 IP 地址
| 地址 | 含义 |
|---|---|
| 主机号全 0 | 网络本身(如 192.168.1.0) |
| 主机号全 1 | 广播地址(如 192.168.1.255) |
| 127.x.x.x | 环回自检地址(Loopback),不进入网络 |
| 0.0.0.0 | 本网络上的本主机 |
| 255.255.255.255 | 受限广播地址(整个 TCP/IP 网络) |
网络地址转换 NAT
将私有 IP 地址转换为公有 IP 地址,工作在传输层(需要查看端口号)。
私有 IP 地址网段
| 类别 | 网段范围 | 数量 |
|---|---|---|
| A 类 | 10.0.0.0 ~ 10.255.255.255 | 1 个 |
| B 类 | 172.16.0.0 ~ 172.31.255.255 | 16 个 |
| C 类 | 192.168.0.0 ~ 192.168.255.255 | 256 个 |
使用私有 IP 的互联网称为专用互联网或本地互联网。
子网划分与 CIDR
子网划分
IP 地址 = {<网络号>, <子网号>, <主机号>}
通过借用主机号的若干位作为子网号,将一个大网络划分为多个子网。
子网掩码
与 IP 地址进行按位与运算得到网络地址。
- 子网掩码中连续 1 对应网络位,连续 0 对应主机位
无类别域间路由 CIDR
IP 地址 = {<网络前缀>, <主机号>}
- 使用斜线记法(如 192.168.1.0/24)
- 路由聚合:多个子网聚合成一个超网
- 最长前缀匹配:转发时选择最具体的路由项
网络层转发分组
直接交付
发送站和目的站在同一物理网络上,直接交付。
间接交付
发送站和目的站不在同一网络,需要通过路由器转发。
转发过程
- 提取目的 IP 地址,计算网络地址
- 查找路由表匹配
- 通过 ARP 将下一跳 IP 地址转换为 MAC 地址
- 将 MAC 地址放入 MAC 帧首部,通过物理网络发送
注意:不同网络间传送时,MAC 帧的源地址和目的地址会发生变化。
网络层协议
ARP(地址解析协议)
- 网络层协议
- 功能:根据 IP 地址查询对应的 MAC 地址
- 工作范围:同一局域网内
DHCP(动态主机配置协议)
- 应用层协议,基于 UDP
- 采用 C/S 模型
- 功能:动态为主机分配 IP 地址、子网掩码、默认网关、DNS 服务器
- 提供报文包含 IP 地址、租用期等信息
ICMP(网际控制报文协议)
- 网络层协议
- 目的:提高 IP 数据报交付成功的机会
ICMP 差错报告报文
| 类型 | 说明 |
|---|---|
| 终点不可达 | 路由器无法交付分组 |
| 源点抑制 | 拥塞导致分组丢弃 |
| 时间超过 | TTL 减为 0 |
| 参数问题 | 分组首部有错误 |
| 改变路由(重定向) | 通知主机更优路由 |
ICMP 询问报文
| 类型 | 说明 |
|---|---|
| 回送请求和回答 | ping 命令 |
| 时间戳请求和回答 | 时间同步 |
| 掩码地址请求和回答 | 获取子网掩码 |
| 路由器询问和通告 | 发现附近路由器 |