一、主机发送IPv4数据报的过程
1. 交付方式
主机发送数据报前,需通过IP地址与子网掩码的逐比特逻辑与运算 ,判断目的主机与自身是否在同一网络,从而选择交付方式:
-
直接交付 :同一网络内主机通信,无需路由器中转,直接发送数据报。
-
间接交付 :不同网络主机通信,需将数据报发送给默认网关(路由器) ,由路由器中转。
2. 具体实例
已知:主机A的IP为10.1.1.1,子网掩码255.255.255.0;主机B的IP为10.1.1.2,主机C的IP为10.2.2.1。
-
主机A计算自身网络地址:
10.1.1.1 & 255.255.255.0 = 10.1.1.0。 -
主机A计算主机B的网络地址:
10.1.1.2 & 255.255.255.0 = 10.1.1.0(与自身一致,直接交付)。 -
主机A计算主机C的网络地址:
10.2.2.1 & 255.255.255.0 = 10.2.2.0(与自身不同,间接交付 )。
3. 默认网关配置
-
以太网1([10.1.1.0/24](10.1.1.0/24))主机的默认网关:路由器R的接口0(
10.1.1.254)。 -
以太网2([10.2.2.0/25](10.2.2.0/25))主机的默认网关:路由器R的接口1(
10.2.2.126)。
二、路由器转发IPv4数据报的过程
1. 转发前提:正确接收数据报
路由器需确认收到的IPv4数据报满足两个条件:
-
首部无差错(无字段缺失、非法值);
-
生存时间(TTL)字段未到期。
2. 查表转发的具体步骤(以路由器R转发主机A→主机C的数据报为例)
-
提取目的地址 :数据报首部的目的IP为
10.2.2.1。 -
路由表匹配(路由器R的路由表条目):
|------------------------|--------------------------------------|-------|
| 目的网络 | 地址掩码 | 下一跳 |
| [10.1.1.0](10.1.1.0) | [255.255.255.0](255.255.255.0) | 接口0直连 |
| [10.2.2.0](10.2.2.0) | [255.255.255.128](255.255.255.128) | 接口1直连 | -
网络地址计算 :将目的IP
10.2.2.1与路由表中10.2.2.0的掩码255.255.255.128做与运算,得到10.2.2.0,匹配第二条条目。 -
转发执行:按"接口1直连"的指示,从接口1将数据报直接交付给主机C。
3. 广播数据报的处理规则
路由器不转发广播IPv4数据报,包括:
-
直接广播(如以太网1的
10.1.1.255、以太网2的10.2.2.127); -
受限广播(
255.255.255.255)。
→ 路由器是隔离广播域的核心设备。
4. 路由匹配的规则
-
无匹配条目:丢弃数据报,并向源主机发送ICMP差错报文;
-
多条匹配条目:采用最长前缀匹配原则(匹配掩码最长的条目)。
三、IPv4数据报分片
1. 分片原因
数据链路层有最大传输单元(MTU) (如以太网MTU=1500字节),若IPv4数据报总长度超过MTU,无法直接封装成帧,需拆分为更小的分片。
2. 分片相关首部字段
|-----|-------|--------------------------------------------------------------------------------|
| 字段 | 长度/单位 | 核心作用 |
| 标识 | 16比特 | 同一原数据报的所有分片标识相同,用于目的站重组。 |
| 标志 | 3比特 | MF(最低位):MF=1表示后续有分片,MF=0为最后一片;DF(中间位):DF=1禁止分片,DF=0允许分片;保留位(最高位):固定为0。 |
| 片偏移 | 13比特 | 以8字节为单位,指示分片在原数据报中的位置(最后一片除外,其他分片数据载荷需为8字节整数倍)。 |
3. 分片计算实例
原数据报:总长度3820字节(首部20字节+数据载荷3800字节),以太网MTU限制数据载荷最大1420字节。
-
分片1:总长度
1440字节(20+1420),MF=1,片偏移0(0/8)。 -
分片2:总长度
1440字节(20+1420),MF=1,片偏移175(1400/8)。 -
分片3:总长度
1020字节(20+1000),MF=0,片偏移350(2800/8)。
若分片2需再次分片(载荷800+600字节):
-
分片2-1:总长度
820字节(20+800),MF=1,片偏移175。 -
分片2-2:总长度
620字节(20+600),MF=0,片偏移275(2200/8)。
四、与发送/转发相关的IPv4首部字段
1. 基础字段
-
版本 :4比特,IPv4对应值为
4,通信双方版本需一致。 -
首部长度 :4比特,以4字节 为单位,最小值为5(对应20字节固定首部),最大值为15(对应60字节首部);若首部长度非4字节整数倍,需用填充字段补全。
-
总长度 :16比特,以1字节为单位,指示数据报首部+数据载荷的总长度,最大值为65535字节(受MTU限制,实际很少用满)。
2. 生存时间(TTL)
-
长度:8比特,路由器转发前将TTL减1;若TTL减至0,丢弃数据报并发送"时间超过"的ICMP报文。
-
作用:防止数据报因路由环路无限兜圈;可实现
traceroute/tracert路由跟踪、限制多播范围。
3. 协议字段
- 长度:8比特,指示数据载荷对应的上层协议,典型值:TCP(6)、UDP(17)、IPv6(41)。
4. 首部检验和
-
长度:16比特,仅检验数据报首部(减少计算量),数据载荷不参与。
-
发送方计算步骤:
-
将首部检验和字段置
0; -
把首部划分为若干16比特字序列;
-
对序列做反码算术求和,将结果按位取反后写入检验和字段。
-
-
接收方检验步骤:
-
把首部划分为若干16比特字序列;
-
对序列做反码算术求和,结果按位取反;
-
若结果为
0,首部无差错;否则丢弃数据报。
-