Skip to content

IPv4

IPv4分组

IPv4分组的格式

IPv4首部的部分重要字段

Tip

  • IPv4 基本首部最小 20B(IHL=5),IHL 的单位是 4B

  • 路由器每转发一跳:TTL 减 1,因此首部校验和需要随之更新

字段 作用 易错点
Version 固定为 4 -
IHL(首部长度) 4B 为单位;决定“数据从哪里开始” 把单位当字节
Total Length(总长度) 首部+数据,单位字节;用于分片计算 忘了包含首部
Identification(标识) 同一原始数据报的各分片相同 -
Flags(DF/MF) DF=不允许分片;MF=后面还有分片 MF 在最后一片为 0
Fragment Offset(片偏移) 指示该片数据在原报文中的位置 单位是 8B
TTL 抑制环路 “时间秒数”是误解
Protocol 指明上层:ICMP=1,TCP=6,UDP=17 不要与端口混淆
Header Checksum 只校验首部 IPv6 中取消

Tip

实际传输过程中,IP分组(数据报)数据部分的长度实际受下一段链路的最短/最长帧长度的限制。

最大传送单元(MTU)

一个链路层数据帧能承受的最大数据量称为最大传送单元(MTU)。以太网的MTU为1500字节。

IP数据报分片

为什么会分片

不同链路层的 MTU 不同;当某段链路 MTU 小于 IPv4 数据报长度时,如果 DF=0,则路由器可以分片。

分片做题模板

给定:

  • 链路 MTU

  • IPv4 首部长度 \(H\)(无选项时 \(H=20\)

  • 原始数据报总长度 \(L\)

步骤:

  1. 每片最大数据载荷(不含首部):

  2. \(D_{\max} = MTU - H\)

  3. 除最后一片外,每片数据长度必须是 8B 的整数倍:

  4. \(D = \left\lfloor \frac{D_{\max}}{8} \right\rfloor \times 8\)

  5. 分片数

  6. 前面若干片用 \(D\) 装满,最后一片装剩余

  7. 字段填写

  8. Identification:所有分片相同

  9. MF:除最后一片外为 1,最后一片为 0

  10. Fragment Offset:第 \(k\) 片(从 0 开始)偏移 = \(\frac{k \cdot D}{8}\)

分片与重组位置

  • 分片:IPv4 可以在路由器发生

  • 重组:只在 目的主机 发生(路由器不重组)

Warning

如果在路由转发的过程中,下一链路的MTU小于IP分组的长度,但是DF又不等于0(不允许分片),路由器会丢弃该IP分组,并向发送方回复一个ICMP包用于报告异常。

IPv4地址与NAT

IPv4地址

编址的核心:前缀 + 主机号

在 CIDR 时代,IPv4 地址最重要的表示是:

  • a.b.c.d/x\(x\) 为网络前缀长度)

理解两件事就足够做题:

  • 同一网段判断:把 IP 与掩码按位与(AND),网络号相同即同网段

  • 主机数:若主机位数为 \(h=32-x\),理论主机数 \(2^h\),可用主机数通常为 \(2^h-2\)

特殊地址

  • 网络地址:主机位全 0

  • 广播地址:主机位全 1(IPv4 有广播;IPv6 没有)

  • 私有地址段

    • 10.0.0.0/8

    • 172.16.0.0/12

    • 192.168.0.0/16

默认网关

默认网关是“本机发往外网时的第一跳路由器接口 IP”,它与“子网掩码”一起决定:

  • 哪些目的在本地直达

  • 哪些目的需要交给网关转发

网络地址转换

NAT 解决什么

  • IPv4 地址不足:让多个内网主机共享少量公网地址

常见 NAT 形态

  • 静态 NAT:一对一映射(消耗公网地址)

  • 动态 NAT:地址池映射

  • NAPT(端口复用):多对一,通过端口区分连接(最常见)

NAT 的体系结构副作用

  • 破坏端到端可达性:外部主动访问内网主机困难

  • 某些协议/应用需要穿透:端口映射、打洞等(了解即可)

划分子网与路由聚合

划分子网

子网划分的本质:从主机位借若干位做子网号,让一个大网段变成多个更小网段。

做题最常见两种问法:

  • 给定需求主机数,求最小前缀长度:

    • 找到最小 \(h\) 使 \(2^h-2 \ge N\),则前缀 \(x=32-h\)
  • 给定前缀,求每个子网可用主机数:

    • \(h=32-x\),可用 \(2^h-2\)

子网掩码和默认网关

子网掩码(Subnet Mask)

  • 掩码的本质就是前缀长度的另一种表示:前缀位全 1,主机位全 0

  • 例:/24 等价于 255.255.255.0

默认网关(Default Gateway)

  • 只要目的 IP 不在本地网段,就把二层帧的目的 MAC 设置为“网关的 MAC”,交给网关继续转发

  • 这里会自然连到 ARP(见后文)

无分类编址CIDR

  • 用前缀长度表示网络规模/x

  • 转发使用最长前缀匹配(LPM):更具体的路由优先

最长前缀匹配(LPM)怎么理解

如果同时存在:

  • 192.168.0.0/16

  • 192.168.1.0/24

目的为 192.168.1.123 时应选 /24,因为它匹配位数更多、范围更小、更精确。

路由聚合

路由聚合(超网)的目的:减少路由表项

常见题型:判断能否聚合/写出聚合前缀。

一个够用的判定方法:

  • 若多个网络块 连续 且数量为 \(2^k\),通常可把前缀缩短 \(k\) 位进行聚合

(真正做题时,以二进制前缀共同前缀长度为准。)

网络层转发分组的过程

把一次“跨网段通信”拆成三步,基本就不会写错:

  1. 主机判断目的是否同网段(靠掩码)

    • 同网段:直达

    • 不同网段:交给默认网关

  2. 二层寻址(ARP)

    • 直达:解析“目的主机 IP → 目的主机 MAC”

    • 走网关:解析“网关接口 IP → 网关 MAC”

  3. 路由器转发

    • 查表(最长前缀匹配)决定下一跳/出口

    • TTL 减 1,必要时产生 ICMP

    • 重新封装下一跳链路层帧发出

地址解析协议

IP地址与硬件地址

  • IP 地址:端到端(跨网段)的逻辑标识,用于路由选择

  • MAC 地址:一跳范围(同一链路)的链路层标识,用于本地交付

Tip

IP 决定“走哪条路到哪张网”,MAC 决定“这一跳交给谁”。

地址解析协议

ARP(Address Resolution Protocol)解决的问题:

  • 在同一链路内,已知对方 IPv4 地址,求对方 MAC

基本过程:

  • 主机广播 ARP Request(谁是 X.X.X.X?告诉我你的 MAC)

  • 目标主机单播 ARP Reply

  • 双方(通常)缓存 ARP 表项(会老化)

Warning

ARP 不跨路由器传播(广播域被路由器隔离)。

动态主机配置协议

DHCP(Dynamic Host Configuration Protocol)解决的问题:

  • 主机自动获取:IP、子网掩码、默认网关、DNS 等配置

  • 典型过程:Discover → Offer → Request → Ack(DORA)

  • 租约(lease)与续租概念

网际控制报文协议

ICMP(Internet Control Message Protocol)用于:

  • 差错报告:目的不可达、超时(TTL=0)等

  • 诊断查询:Echo(ping)

  • ping:ICMP Echo Request/Reply

  • traceroute:利用 TTL 递增触发路由器返回 ICMP Time Exceeded,从而“探测路径上的路由器”


408 高频易错点清单

408 高频易错点清单

  • 片偏移单位:8B

  • IPv4 重组位置:目的主机

  • TTL 语义:每跳减 1(不是秒)

  • ARP 只在本地链路:不跨路由器