# 4.3 IPv4 ## 一、IPv4概述 ### 1.1 什么是IPv4 **IPv4(Internet Protocol version 4)**: - 互联网协议的第四版 - 目前使用最广泛的网络层协议 - 使用32位地址 ### 1.2 IPv4的特点 - **无连接**:每个分组独立传输 - **不可靠**:不保证分组到达 - **尽力而为**:尽力传输,不保证质量 - **分组交换**:数据报服务 --- ## 二、IPv4地址 ### 2.1 IPv4地址结构 **32位二进制地址**: - 通常用点分十进制表示 - 如:192.168.1.1 **结构**: ``` | 网络号 | 主机号 | ``` ### 2.2 IP地址分类 #### A类地址 **范围**:1.0.0.0 ~ 126.255.255.255 **结构**: ``` | 0 | 网络号(7位) | 主机号(24位) | ``` **特点**: - 第一位为0 - 网络号:1-126(126个) - 每个网络主机数:2²⁴ - 2 = 16,777,214 - 用于大型网络 #### B类地址 **范围**:128.0.0.0 ~ 191.255.255.255 **结构**: ``` | 10 | 网络号(14位) | 主机号(16位) | ``` **特点**: - 前两位为10 - 网络号:128.0-191.255(16,384个) - 每个网络主机数:2¹⁶ - 2 = 65,534 - 用于中型网络 #### C类地址 **范围**:192.0.0.0 ~ 223.255.255.255 **结构**: ``` | 110 | 网络号(21位) | 主机号(8位) | ``` **特点**: - 前三位为110 - 网络号:192.0.0-223.255.255(2,097,152个) - 每个网络主机数:2⁸ - 2 = 254 - 用于小型网络 #### D类地址 **范围**:224.0.0.0 ~ 239.255.255.255 **特点**: - 前四位为1110 - 用于组播(Multicast) - 不分配给主机 #### E类地址 **范围**:240.0.0.0 ~ 255.255.255.255 **特点**: - 前四位为1111 - 保留用于实验和研究 - 不分配给主机 ### 2.3 特殊IP地址 | 地址 | 用途 | |-----|------| | 0.0.0.0 | 本网络的本主机 | | 255.255.255.255 | 受限广播地址 | | 127.0.0.0/8 | 环回地址(Loopback) | | 10.0.0.0/8 | A类私有地址 | | 172.16.0.0/12 | B类私有地址 | | 192.168.0.0/16 | C类私有地址 | | 169.254.0.0/16 | 链路本地地址(APIPA) | ### 2.4 私有地址和NAT **私有地址范围**: - A类:10.0.0.0 ~ 10.255.255.255 - B类:172.16.0.0 ~ 172.31.255.255 - C类:192.168.0.0 ~ 192.168.255.255 **NAT(网络地址转换)**: - 将私有地址转换为公网地址 - 节省公网地址 - 隐藏内部网络 --- ## 三、子网划分 ### 3.1 为什么要划分子网 **问题**: - IP地址浪费 - 网络太大,广播风暴 - 管理困难 **解决**: - 将大网络划分为小网络(子网) - 提高地址利用率 - 减少广播域 ### 3.2 子网划分方法 **从主机号借用若干位作为子网号**: ``` | 网络号 | 子网号 | 主机号 | ``` **子网掩码**: - 区分网络号和主机号 - 网络号和子网号对应位为1 - 主机号对应位为0 ### 3.3 子网掩码表示 **点分十进制**: - A类默认:255.0.0.0 - B类默认:255.255.0.0 - C类默认:255.255.255.0 **CIDR表示法**: - /n,表示前n位为网络位 - 如:/24 表示前24位为网络位 ### 3.4 子网划分计算 **已知**: - IP地址:192.168.1.0/24 - 需要划分4个子网 **计算**: 1. 需要借用的位数:2² = 4,借用2位 2. 子网掩码:/24 + 2 = /26,即255.255.255.192 3. 每个子网主机数:2⁶ - 2 = 62 **子网**: - 192.168.1.0/26(主机:1-62) - 192.168.1.64/26(主机:65-126) - 192.168.1.128/26(主机:129-190) - 192.168.1.192/26(主机:193-254) ### 3.5 CIDR(无类别域间路由) **概念**: - 消除传统的A、B、C类地址界限 - 使用可变长子网掩码 - 聚合路由,减少路由表 **表示**: - IP地址/前缀长度 - 如:192.168.1.0/24 **路由聚合**: - 将多个小网络合并为大网络 - 减少路由表项 --- ## 四、IPv4分组格式 ### 4.1 IPv4首部格式 ``` 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options (if IHL > 5) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ ``` ### 4.2 首部字段详解 **版本(Version,4位)**: - IP协议版本 - IPv4:0100(4) **首部长度(IHL,4位)**: - 首部长度,单位为4字节 - 最小值:5(20字节) - 最大值:15(60字节) **服务类型(TOS,8位)**: - 区分服务(DSCP,6位) - 显式拥塞通知(ECN,2位) **总长度(Total Length,16位)**: - 首部和数据的总长度 - 最大:65535字节 **标识(Identification,16位)**: - 分片标识 - 同一分组的分片标识相同 **标志(Flags,3位)**: - 第1位:保留 - 第2位(DF):Don't Fragment,1表示不分片 - 第3位(MF):More Fragment,1表示还有分片 **片偏移(Fragment Offset,13位)**: - 分片在原分组中的位置 - 单位为8字节 **生存时间(TTL,8位)**: - 分组在网络中的寿命 - 每经过一个路由器减1 - 为0时丢弃 **协议(Protocol,8位)**: - 上层协议类型 - 1:ICMP - 6:TCP - 17:UDP **首部校验和(Header Checksum,16位)**: - 只检验首部 - 每经过一个路由器重新计算 **源地址(Source Address,32位)**: - 发送方的IP地址 **目的地址(Destination Address,32位)**: - 接收方的IP地址 **选项(Options,可变)**: - 安全、严格源路由、松散源路由、记录路由、时间戳等 ### 4.3 数据部分 - 上层协议数据 - 如:TCP段、UDP数据报、ICMP报文 --- ## 五、IP分片 ### 5.1 为什么要分片 **MTU(最大传输单元)**: - 链路层帧的数据部分最大长度 - 以太网MTU:1500字节 **分片原因**: - IP分组长度 > 链路MTU - 需要分片传输 ### 5.2 分片过程 1. 路由器检查分组长度 2. 如果长度 > MTU,需要分片 3. 将数据部分分割成若干片 4. 每片添加首部(大部分字段相同) 5. 修改标志和片偏移字段 6. 分别发送 ### 5.3 分片示例 **原始分组**: - 数据:4000字节 - 首部:20字节 - 总长度:4020字节 - MTU:1500字节 **分片**: - 每片数据最多:1500 - 20 = 1480字节 - 1480 / 8 = 185,是整数,可以 **分片结果**: | 分片 | 数据长度 | 片偏移 | MF | |-----|---------|--------|-----| | 1 | 1480 | 0 | 1 | | 2 | 1480 | 185 | 1 | | 3 | 1040 | 370 | 0 | ### 5.4 重组 **重组地点**: - 目的主机 - 不在中间路由器重组 **重组过程**: 1. 根据标识、源地址、目的地址、协议识别同一分组的分片 2. 根据片偏移排序 3. 重组数据 4. 交给上层协议 --- ## 六、IP转发 ### 6.1 转发过程 1. 提取目的IP地址 2. 检查是否是直接交付(同一网络) 3. 如果不是,查找路由表 4. 选择最长前缀匹配的路由 5. 将分组发送到下一跳 6. TTL减1,重新计算校验和 7. 转发 ### 6.2 最长前缀匹配 **概念**: - 路由表中可能有多个匹配项 - 选择网络前缀最长的(最具体的) **例子**: - 目的地址:192.168.1.100 - 路由表: - 192.168.0.0/16 - 192.168.1.0/24 - 选择:192.168.1.0/24(前缀更长) --- ## 七、考研重点 1. **IPv4地址**: - 32位地址 - 点分十进制表示 - 地址分类:A、B、C、D、E类 - 特殊地址:私有地址、环回地址、广播地址 2. **子网划分**: - 子网号 - 子网掩码 - CIDR表示法 - 子网划分计算 3. **IPv4分组格式**: - 首部各字段的含义 - 版本、首部长度、总长度 - 标识、标志、片偏移 - TTL、协议、校验和 - 源地址、目的地址 4. **IP分片**: - MTU概念 - 分片过程 - 片偏移计算 - 重组过程 5. **IP转发**: - 转发过程 - 最长前缀匹配 --- *下一节:4.4 IPv6*