4.3 IPv4

4.3.1 IPv4分组

IPv4(Internet Protocol version 4)是互联网协议第四版,定义了数据报文的格式、寻址方案、分片和传输过程。

IPv4分组格式

IPv4数据报包含首部和数据部分。首部由20字节的固定部分和长度可变的可选字段组成。

首部字段说明

字段 长度 说明
版本 4位 IP协议版本号(IPv4为4)
首部长度 4位 头部长度,以4字节为单位(最小5,最大15)
区分服务 8位 服务类型字段(旧称TOS),用于区分优先级
总长度 16位 整个数据报总长度(首部+数据),单位字节,最大65535B
标识 16位 数据报的唯一ID,用于分片和重组
标志 3位 控制分片:DF(禁止分片位,0允许)、MF(更多分片位,1表示有后续分片)
片偏移 13位 分片相对于原始数据报起始位置的偏移量,以8字节为单位
生存时间(TTL) 8位 最大路由器跳数,每转发一次减1,为0时丢弃
协议 8位 上层协议类型(如TCP=6,UDP=17)
首部校验和 16位 只校验首部,不校验数据
源IP地址 32位 发送方IP地址
目的IP地址 32位 接收方IP地址
可选项 可变 用于扩展功能

常见协议字段值

  • ICMP:1, IGMP:2, IP:4, TCP:6, EGP:8, IGP:9, UDP:17, IPv6:41, ICMP-IPv6:58, OSPF:89

IP数据报分片

  • MTU(最大传送单元):数据链路层能承载的最大数据量。以太网MTU=1500B,广域网常≤576B。
  • 分片:当IP数据报长度超过MTU时,需分成多个,每个片都有自己的IP首部。
  • 标识:原始数据报的标识号复制到所有片中,用于重组。
  • 标志位
    • MF:除最后一个片外,MF=1。
    • DF:允许分片时设为0。
  • 片偏移:以8字节为单位,表示该片在原始数据报中的位置(除最后一个片外,每个片的数据长度必须是8字节的整数倍)。

例题(2021年36题)
路由器向MTU=800B的链路转发总长度1580B的IP数据报(首部20B),进行分片,每个分片尽可能大,求第2个分片的总长度字段和MF标志位的值。

  • 每个分片数据部分最大 = 800 - 20 = 780B,需为8的倍数,取776B。
  • 原始数据部分 = 1580 - 20 = 1560B。
  • 第1片:数据776B,偏移0,MF=1。
  • 第2片:数据776B,偏移776/8=97,MF=1(因还有剩余)。
  • 剩余数据 = 1560 - 776×2 = 8B,第3片数据8B,MF=0。
  • 第2片总长度 = 20 + 776 = 796B,MF=1。
    答案:B. 796, 1

首部校验和计算

  • 发送方:将首部按16位字序列求和(反码算术运算),校验和字段置0,求和后取反码写入。
  • 接收方:将首部所有16位字反码求和,结果取反,若为0则正确,否则丢弃。

4.3.2 IPv4地址与NAT

IPv4地址

  • 32位二进制,点分十进制表示(如192.168.0.1)。
  • 结构:IP地址 = {网络号, 主机号},网络号唯一标识网络,主机号标识网络内设备。

分类的IP地址(传统A、B、C类):

类别 网络号位数 主机号位数 范围 默认子网掩码
A 8 24 0.0.0.0 ~ 127.255.255.255 255.0.0.0
B 16 16 128.0.0.0 ~ 191.255.255.255 255.255.0.0
C 24 8 192.0.0.0 ~ 223.255.255.255 255.255.255.0

特殊IP地址

地址 说明
0.0.0.0 本网络上的本主机(只能作为源地址)
127.x.x.x 环回地址(测试用,不会出现在网络上)
主机号全0 网络地址(标识整个网络)
主机号全1 广播地址(向网络内所有主机发送)
255.255.255.255 受限广播(只能作为目的地址)

例题(2017年36题)
只能作为源IP地址但不能作为目的IP地址的是(A. 0.0.0.0)

网络地址转换(NAT)

  • 目的:解决IPv4地址枯竭,隐藏内部网络。

  • 私有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个网段)
  • NAT类型

    • 静态NAT:一对一映射。
    • 动态NAT:从地址池中动态映射。
    • NAPT(端口级NAT):多个私有IP映射到一个公共IP,用端口号区分。
  • 工作原理:NAT路由器维护转换表,将内部地址:端口映射为外部地址:端口。转发时修改IP地址和端口号。


4.3.3 子网划分、路由聚集、子网掩码与CIDR

1. 子网划分

  • 从主机号借位作为子网号,形成三级结构:IP地址 = {网络号, 子网号, 主机号}。
  • 子网划分对外部不可见。
  • 子网号不能全0或全1(RFC 950),但CIDR允许。

2. 子网掩码

  • 32位,1对应网络号+子网号,0对应主机号。
  • 默认掩码:A类255.0.0.0,B类255.255.0.0,C类255.255.255.0。
  • 同一子网内所有主机必须使用相同的子网掩码。

3. 无分类域间路由选择CIDR

  • 消除传统ABC类,使用网络前缀任意长度:IP地址 = {网络前缀, 主机号}。
  • 表示法:IP地址/前缀长度(如192.168.0.0/24)。
  • CIDR地址块:网络前缀相同的连续IP地址集合。
  • 最长前缀匹配:路由表中选择匹配结果中网络前缀最长的条目(最具体)。
  • 路由聚合:将多个连续CIDR地址块合并为一个更大的地址块,减少路由表条目。

例题(2010年37题)
192.168.5.0/24,子网掩码255.255.255.248,最大子网个数和每个子网最大可分配地址个数?

  • 248 = 11111000,借用了5位主机位作为子网号,子网数 = 2^5 = 32(去掉全0全1?原题采用定长子网划分,是否允许全0全1?通常习题中按可用子网计算,但此处未说明,选项B.32,6 对应子网数32,每个子网主机数2^3-2=6。选B)

例题(2012年39题)
主机IP 180.80.77.55,子网掩码255.255.252.0,向其所在子网发送广播分组,目的地址?

  • 掩码252=11111100,网络前缀22位(180.80.76.0/22)。广播地址为主机号全1,即180.80.79.255。选D

例题(2018年38题)
四条路由35.230.32.0/21, 35.230.40.0/21, 35.230.48.0/21, 35.230.56.0/21聚合后的目的网络地址?

  • 这四个网络的前缀21位,前16位相同,后5位不同。32=00100000, 40=00101000, 48=00110000, 56=00111000。公共前缀为前19位(00100000前5位),聚合为35.230.32.0/19。选C

例题(2021年35题)
将一个IP网络划分为3个子网,其中一个子网是192.168.9.128/26,不可能是另外两个子网之一的是?

  • /26的子网掩码255.255.255.192,块大小64。128/26覆盖128-191。A. /25覆盖0-127,不重叠且大小合适;B. /26覆盖0-63,与128/26不重叠;C. /26覆盖192-255,不重叠;D. /27覆盖192-223,与128/26不重叠,但/27是/26的子集,如果已用/26划分,再分/27可能造成重叠?实际上/26的地址块128-191与/27的192-223不重叠,所以D也是可能的。但选项A是/25,包含0-127,与128-191不重叠;B是/26(0-63);C是/26(192-255);D是/27(192-223)。这里考察的是划分成三个子网,其中一个为128/26,剩下地址空间为0-127和192-255,如果另外两个子网是0/26和192/26,则正好三个/26,所以A、B、C都是可能的,但D是/27,使用192-223,另一个子网需覆盖剩下的224-255,也是一个/27,这样总共得到两个/26和一个/27,但还需要一个/27,实际上将192/26分成两个/27,那么三个子网就是128/26、0/26、192/27、224/27,实际上是4个子网。所以题目要求“划分为3个子网”,因此另外两个子网必须恰好覆盖剩余空间,不能有剩余。因此D不是可能之一(因为如果192/26被分成两个/27,则子网数变为4)。选D

4.3.4 ARP协议、DHCP协议与ICMP协议

1. IP地址与MAC地址

  • IP地址用于网络层寻址,MAC地址用于数据链路层寻址。
  • 路由器转发时,数据链路层帧的MAC地址不断改变,IP地址不变。

2. ARP协议

  • 地址解析协议,将IP地址解析为MAC地址。
  • 工作过程:
    1. 主机A在ARP缓存中查找目标IP,若无则广播ARP请求(目的MAC=FF-FF-FF-FF-FF-FF)。
    2. 目标主机B收到请求,若IP匹配,则单播ARP响应(包含自己的MAC地址)。
    3. A收到响应,更新缓存,发送数据帧。
  • ARP仅在同一个局域网内使用,不同网络通过路由器转发。

例题(2012年38题)
ARP协议的功能是(A. 根据IP地址查询MAC地址)

3. DHCP协议

  • 动态主机配置协议,应用层协议,基于UDP(客户端端口68,服务器端口67)。
  • 即插即用,自动分配IP地址。
  • 工作流程:
    1. DHCPDISCOVER:客户端广播(源IP 0.0.0.0,目的255.255.255.255)。
    2. DHCPOFFER:服务器广播提供IP地址。
    3. DHCPREQUEST:客户端广播请求使用该地址。
    4. DHCPACK:服务器广播确认,绑定地址,并设置租用期T。
    5. 租用期到达T1=0.5T时,客户端单播请求更新;到达T2=0.875T时广播请求更新。
  • DHCP中继代理:用于跨网络转发DHCP报文。

4. ICMP协议

  • 网际控制报文协议,网络层,用于传递控制消息和诊断。
  • ICMP报文封装在IP数据报中。

ICMP差错报告报文(向源主机报告):

  • 终点不可达(3)
  • 时间超过(11)
  • 参数问题(12)
  • 改变路由(5)

ICMP询问报文

  • 回送请求/回答(8/0)—— ping使用
  • 时间戳请求/回答(13/14)

不应发送ICMP差错报文的几种情况

  • 对ICMP差错报文不再发送
  • 对非第一个分片的数据报片
  • 对组播地址的数据报

例题(2010年36题)
路由器因拥塞丢弃IP分组,发送的ICMP报文类型是(C. 源点抑制)—— 注:源点抑制已在最新标准中不再使用,但考题仍可能涉及。


习题(部分)

  1. ping命令使用哪两种ICMP消息类型?
    B. 回显请求和回显应答

  2. DHCP客户端第一次发出的请求消息是?
    A. DHCPDISCOVER

  3. 谢希仁4-11:计算首部检验和(略,按反码求和计算)

  4. 谢希仁4-14:分片在目的主机组装 vs 每过一个网络组装一次:后者可减少后续网络传输的数据量,但增加中间节点处理负担,且一旦某片丢失,需重新传输。通常采用目的主机组装。

  5. 谢希仁4-15:3200位TCP报文+160位IP首部=3360位。第二个局域网MTU数据部分1200位,即IP数据报最大长度1200+160=1360位。分片:每片数据部分最大1200位,但IP首部160位,实际每片总长1360位。第一个片数据1200,偏移0;第二个片数据1200,偏移1200/8=150;第三个片数据800,偏移2400/8=300。总数据量3200位,但第三个片数据800位,总传输比特数=1360+1360+960=3680位。

  6. 谢希仁4-16:略

  7. 谢希仁4-17:经过5个路由器,总共需要6次ARP(每个网段一次,从源到目的每段都需要解析MAC地址)。

  8. 谢希仁4-20:4000字节数据报,首部20,数据3980。MTU1500,每个分片数据最大1480(因为首部20,总长1500)。分片:1480,1480,1020。片偏移:0,185,370。MF:1,1,0。

  9. 谢希仁4-22:四个地址块:212.56.132.0/24, 212.56.133.0/24, 212.56.134.0/24, 212.56.135.0/24,前22位相同(212.56.132.0/22),聚合为212.56.132.0/22。

  10. 谢希仁4-23:208.128/11 包含 208.128.0.0 ~ 208.159.255.255;208.130.28/22 包含 208.130.28.0 ~ 208.130.31.255,前者包含后者。

  11. 谢希仁4-26:需按主机数分配子网,满足每个子网的主机数要求(略)。

  12. 谢希仁4-29:152.7.77.159 和 152.31.47.252,匹配的前缀需同时覆盖两者。选项(4)152.0/11 覆盖 152.0.0.0~152.31.255.255,包含两个地址。其他选项不匹配。

  13. 谢希仁4-31:140.120.84.24/20,最小地址140.120.80.0,最大140.120.95.255,掩码255.255.240.0,地址数4096,相当于16个C类。

  14. 谢希仁4-33:136.23.12.64/26,划分为4个子网,每个子网前缀28位,地址数16,可用14个。子网地址:136.23.12.64/28, 136.23.12.80/28, 136.23.12.96/28, 136.23.12.112/28。每个子网最小地址:网络地址+1,最大地址:广播地址-1。

  15. 谢希仁4-45:167.199.170.82/27,掩码255.255.255.224,前缀长度27,后缀5,网络前缀167.199.170.64。


笔记结束