Skip to content

网络层

IPv4协议介绍

概述

IPv4(Internet Protocol version 4)是互联网协议的第四版,也是广泛使用的网络层协议。它定义了数据包的格式和地址方案,负责将数据从源主机传输到目的主机。IPv4协议自1983年发布以来,一直是互联网的核心协议。

IPv4地址

  1. 格式:IPv4地址是32位的二进制数,通常表示为点分十进制格式,例如192.168.0.1

  2. 地址分类:IPv4地址分为A、B、C、D和E五类:

    • A类:0.0.0.0 - 127.255.255.255,适用于大型网络。
    • B类:128.0.0.0 - 191.255.255.255,适用于中型网络。
    • C类:192.0.0.0 - 223.255.255.255,适用于小型网络。
    • D类:224.0.0.0 - 239.255.255.255,用于多播。
    • E类:240.0.0.0 - 255.255.255.255,保留用于实验目的。
  3. 私有地址:以下地址块用于私有网络,不在公共互联网中使用:

    • 10.0.0.0 - 10.255.255.255
    • 172.16.0.0 - 172.31.255.255
    • 192.168.0.0 - 192.168.255.255
  4. 子网掩码:用于区分网络部分和主机部分,例如子网掩码255.255.255.0对应的网络前缀为/24

IPv4报文格式

IPv4报文由头部和数据部分组成。头部长度为20到60字节,包含以下字段:

  1. 版本 (Version):4位,表示IP协议的版本号,为4。
  2. 头部长度 (IHL, Internet Header Length):4位,表示IP头部的长度,以32位字(4字节)为单位。
  3. 服务类型 (Type of Service, TOS):8位,用于指定数据包的优先级和QoS参数。
  4. 总长度 (Total Length):16位,表示整个IP报文的长度,以字节为单位。
  5. 标识 (Identification):16位,用于唯一标识发送的报文,可以在分片重组时使用。
  6. 标志 (Flags):3位,控制和标识分片。包括:
    • 保留位 (Reserved bit)
    • 不分片 (Don’t Fragment, DF)
    • 更多分片 (More Fragments, MF)
  7. 片偏移 (Fragment Offset):13位,指示分片数据在原始数据中的相对位置,以8字节为单位。
  8. 生存时间 (Time to Live, TTL):8位,指定数据包的生存时间,每经过一个路由器,TTL减1,TTL为0时,数据包被丢弃。
  9. 协议 (Protocol):8位,指示上层协议类型(如TCP为6,UDP为17)。
  10. 头部校验和 (Header Checksum):16位,计算头部的校验和,用于校验头部数据的完整性。
  11. 源地址 (Source Address):32位,发送数据包的源IP地址。
  12. 目的地址 (Destination Address):32位,接收数据包的目的IP地址。
  13. 选项 (Options):可变长度,用于携带控制信息,如时间戳、安全等。

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 | Padding |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

在IPv4协议头部中,“协议 (Protocol)”字段用于指示数据包中封装的上层协议类型。该字段是8位长,以下是一些常见协议的值及其对应的协议名称:

  1. 1 - ICMP (Internet Control Message Protocol)
  2. 2 - IGMP (Internet Group Management Protocol)
  3. 6 - TCP (Transmission Control Protocol)
  4. 17 - UDP (User Datagram Protocol)
  5. 41 - IPv6 encapsulation
  6. 47 - GRE (Generic Routing Encapsulation)
  7. 50 - ESP (Encapsulating Security Payload) in IPsec
  8. 51 - AH (Authentication Header) in IPsec
  9. 58 - ICMPv6 (Internet Control Message Protocol for IPv6)
  10. 89 - OSPF (Open Shortest Path First)
  11. 132 - SCTP (Stream Control Transmission Protocol)

这是一个更详细的列表,包括一些其他常见协议:

协议名称描述
1ICMP (Internet Control Message Protocol)用于发送控制消息和错误报告,如ping命令。
2IGMP (Internet Group Management Protocol)用于管理多播组成员。
6TCP (Transmission Control Protocol)提供面向连接的、可靠的数据传输。
17UDP (User Datagram Protocol)提供无连接的、不可靠的数据传输。
41IPv6 encapsulation用于IPv6的封装。
47GRE (Generic Routing Encapsulation)用于封装各种网络层协议的数据包。
50ESP (Encapsulating Security Payload)IPsec的一部分,用于提供加密和身份验证。
51AH (Authentication Header)IPsec的一部分,用于提供数据包的完整性和身份验证。
58ICMPv6 (Internet Control Message Protocol for IPv6)用于IPv6的控制消息和错误报告。
89OSPF (Open Shortest Path First)用于路由信息的交换。
132SCTP (Stream Control Transmission Protocol)提供消息传递协议,适用于电话通信。

工作原理

  1. 数据封装:上层协议(如TCP或UDP)生成的数据被封装在IP报文中。
  2. 路由和转发:路由器根据目的IP地址和路由表,选择最佳路径将数据包从源节点传输到目的节点。
  3. 分片和重组:如果数据包大小超过网络的最大传输单元(MTU),则进行分片;接收端负责重组分片。
  4. 错误检测和处理:头部校验和用于错误检测,TTL字段防止数据包在网络中无限循环。

地址分配方式

IPv4地址的分配方式主要分为以下几种,每种方式根据不同的需求和应用场景,确保网络地址的合理使用和管理:

1. 静态分配 (Static Allocation)

在静态分配方式中,IPv4地址手动分配给设备,并且地址不会改变。这种方法通常用于需要固定地址的设备,如服务器、打印机和网络设备。

优点

  • 地址稳定,适合需要固定地址的设备。
  • 便于管理网络设备的访问权限。

缺点

  • 手动配置麻烦,易出错。
  • 不灵活,难以应对设备的增加或变动。
2. 动态主机配置协议 (DHCP, Dynamic Host Configuration Protocol)

DHCP是一种自动分配IP地址的协议,设备连接到网络时,会向DHCP服务器请求一个IP地址,服务器从预定义的地址池中分配一个可用地址给设备。

优点

  • 自动化,减少手动配置错误。
  • 灵活,应对设备的增加和变动。
  • 可以动态回收和重新分配地址,提高地址利用率。

缺点

  • DHCP服务器需要维护。
  • 每次设备重启可能会获得不同的IP地址,不适合需要固定IP地址的设备。
3. 自动私有IP地址分配 (APIPA, Automatic Private IP Addressing)

APIPA是一种当DHCP服务器不可用时自动分配IP地址的机制,设备会自动分配一个169.254.x.x范围内的地址,使得设备在本地网络中可以互相通信。

优点

  • 无需DHCP服务器,提供基础网络连接。
  • 自动化,无需配置。

缺点

  • 仅适用于本地网络,不能与外部网络通信。
  • 地址范围有限,不适合大规模网络。
4. 基于地址分配协议 (BOOTP, Bootstrap Protocol)

BOOTP是DHCP的前身,主要用于无盘工作站从网络引导。BOOTP服务器存储客户端的IP地址和引导文件信息,设备启动时请求这些信息。

优点

  • 支持网络引导,适用于无盘工作站。

缺点

  • 功能较简单,逐渐被DHCP取代。

DHCP配置ipv4地址

DHCPv4(Dynamic Host Configuration Protocol for IPv4)是一种网络管理协议,用于动态分配IP地址和其他网络配置参数。通过udp协议传输数据, 服务端监听端口67, 客服端监听端口68, 通过广播地址255.255.255.255通信, 以下是DHCPv4分配IP地址的过程,包含各个步骤和相关数据包的交互。

1. DHCP Discover

客户端通过广播发送DHCP Discover消息,寻找可用的DHCP服务器。Discover消息中不包含任何IP地址,目的是让网络中的所有DHCP服务器都能接收到请求。

Client -> Broadcast: DHCP Discover

2. DHCP Offer

所有接收到Discover消息的DHCP服务器都会发送DHCP Offer消息作为响应。Offer消息中包含服务器可以为客户端分配的IP地址、租约时间以及其他配置信息。

DHCP Server -> Broadcast: DHCP Offer

3. DHCP Request

客户端选择一个DHCP服务器的Offer,并通过广播发送DHCP Request消息,明确表示选择的服务器及其提供的IP地址。Request消息中还包含客户端的请求参数。

Client -> Broadcast: DHCP Request

4. DHCP Acknowledgment (ACK)

所选的DHCP服务器收到Request消息后,发送DHCP Acknowledgment(ACK)消息,确认IP地址的分配。ACK消息中包含确认的IP地址、租约时间及其他配置信息。

DHCP Server -> Broadcast: DHCP ACK

DHCPv4消息格式

每个DHCPv4消息包含固定格式的头部和选项字段。以下是DHCPv4消息的基本格式:

DHCPv4报文格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| op | htype | hlen | hops |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| xid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| secs | flags |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ciaddr |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| yiaddr |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| siaddr |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| giaddr |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| chaddr |
| |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| sname |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| file |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| options |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • op: 1字节,消息类型(1 = 请求,2 = 回复)。
  • htype: 1字节,硬件类型(如以太网为1)。
  • hlen: 1字节,硬件地址长度(如MAC地址为6)。
  • hops: 1字节,跳数(通常为0)。
  • xid: 4字节,事务ID,用于匹配请求和响应。
  • secs: 2字节,客户端启动后经过的时间。
  • flags: 2字节,标志字段。
  • ciaddr: 4字节,客户端的当前IP地址(如果已知)。
  • yiaddr: 4字节,服务器为客户端分配的IP地址。
  • siaddr: 4字节,下一跳服务器的IP地址。
  • giaddr: 4字节,中继代理的IP地址。
  • chaddr: 16字节,客户端的硬件地址。
  • sname: 64字节,可选的服务器主机名。
  • file: 128字节,可选的引导文件名。
  • options: 可变长度,包含DHCP选项。

详细交互过程

以下是DHCPv4分配过程的详细交互示意图:

Client DHCP Server
|-- DHCP Discover ------------------>|
| |
|<-- DHCP Offer ----------------------|
| |
|-- DHCP Request -------------------->|
| |
|<-- DHCP ACK ------------------------|

选项字段

DHCPv4的选项字段用于传递额外的配置信息。常见选项包括:

  • Option 1: 子网掩码。
  • Option 3: 默认网关。
  • Option 6: DNS服务器。
  • Option 51: IP地址租约时间。
  • Option 53: DHCP消息类型(如Discover、Offer、Request、ACK)。
  • Option 54: DHCP服务器标识符。
  • Option 55: 参数请求列表。

在Linux上配置DHCP客户端

  1. 安装DHCP客户端软件:

    Terminal window
    sudo apt-get install isc-dhcp-client
  2. 启动DHCP客户端:

    Terminal window
    sudo dhclient eth0
  3. 查看分配的IP地址:

    Terminal window
    ip addr show dev eth0

BOOTP配置ipv4地址

概述

BOOTP(Bootstrap Protocol)是一种用于网络设备自动获取IP地址和引导信息的协议,特别是在无盘工作站和网络设备初始化时使用。BOOTP是DHCP的前身,后来被DHCP(Dynamic Host Configuration Protocol)取代,尽管如此,BOOTP在某些嵌入式系统和设备中仍然有使用, 使用udp传输数据, 服务端监听端口67, 客服端监听端口68

主要功能

  1. IP地址分配:为网络设备动态分配IP地址。
  2. 引导文件名提供:为无盘工作站提供引导文件的名称和服务器地址。
  3. 其他配置信息:提供子网掩码、默认网关等网络配置信息。

BOOTP报文格式

BOOTP报文的格式与DHCP相似,由一个固定长度的头部和可选的扩展选项部分组成。以下是BOOTP报文的详细结构:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| op | htype | hlen | hops |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| xid |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| secs | flags |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ciaddr |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| yiaddr |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| siaddr |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| giaddr |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| |
| chaddr (16 bytes) |
| |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| sname (64 bytes) |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| file (128 bytes) |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| options (variable) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段详细描述

  • op (操作码): 1字节

    • 指定消息类型:
      • 1 = BOOTREQUEST(客户端请求)
      • 2 = BOOTREPLY(服务器响应)
  • htype (硬件类型): 1字节

    • 指定网络硬件类型,例如以太网为1。
  • hlen (硬件地址长度): 1字节

    • 指定硬件地址的长度,例如MAC地址长度为6字节。
  • hops (跳数): 1字节

    • 指定跨越的中继代理数,通常为0。
  • xid (事务ID): 4字节

    • 随机生成的事务ID,用于匹配请求和响应。
  • secs (秒数): 2字节

    • 指定客户端从启动开始经过的时间(以秒为单位)。
  • flags (标志): 2字节

    • 标志字段:
      • 最左边的一位(高位)为广播标志位,0表示单播,1表示广播。
  • ciaddr (客户端IP地址): 4字节

    • 客户端的当前IP地址,仅在客户端已知其IP地址时使用。
  • yiaddr (客户端’你的’IP地址): 4字节

    • 服务器为客户端分配的IP地址。
  • siaddr (下一个服务器IP地址): 4字节

    • 引导文件服务器的IP地址。
  • giaddr (中继代理IP地址): 4字节

    • 中继代理的IP地址。
  • chaddr (客户端硬件地址): 16字节

    • 客户端的硬件地址。
  • sname (服务器名称): 64字节

    • 可选的服务器主机名,NUL结尾字符串。
  • file (引导文件名): 128字节

    • 可选的引导文件名称,NUL结尾字符串。
  • options (选项): 可变长度

    • 用于传递额外的配置信息和参数。

BOOTP的工作流程

BOOTP的工作流程包括以下步骤:

  1. 客户端请求 (BOOTREQUEST)

    • 客户端发送一个BOOTP请求消息(BOOTREQUEST),请求IP地址和引导文件信息。
    Client -> Broadcast: BOOTREQUEST
  2. 服务器响应 (BOOTREPLY)

    • BOOTP服务器接收到请求后,发送一个BOOTP响应消息(BOOTREPLY),提供IP地址、引导文件名和其他配置信息。
    BOOTP Server -> Broadcast: BOOTREPLY

BOOTP和DHCP的区别

虽然BOOTP和DHCP有许多相似之处,但它们在功能和灵活性方面有所不同:

  1. 自动配置

    • BOOTP:需要手动配置服务器上的所有客户端信息,较为静态。
    • DHCP:支持动态分配和自动配置,更加灵活。
  2. 地址租期

    • BOOTP:IP地址分配是永久的,没有租期概念。
    • DHCP:IP地址有租期,可以动态回收和重新分配,提高地址利用率。
  3. 选项支持

    • BOOTP:选项支持有限,功能较为简单。
    • DHCP:支持丰富的选项,提供更多的配置信息(如DNS服务器、默认网关等)。

示例配置

在Linux上配置BOOTP服务器

  1. 安装BOOTP服务器软件(如isc-dhcp-server,它支持BOOTP)。

    Terminal window
    sudo apt-get install isc-dhcp-server
  2. 编辑/etc/dhcp/dhcpd.conf文件,添加BOOTP配置:

    subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.100 192.168.1.150;
    option routers 192.168.1.1;
    option broadcast-address 192.168.1.255;
    default-lease-time 600;
    max-lease-time 7200;
    boot-unknown-clients true;
    filename "pxelinux.0";
    next-server 192.168.1.2;
    }
  3. 启动BOOTP服务器:

    Terminal window
    sudo service isc-dhcp-server start

IPv4的局限性

  1. 地址枯竭:IPv4地址空间有限,无法满足日益增长的网络设备需求。
  2. 安全性:IPv4本身缺乏内置的安全机制,需依赖其他协议(如IPsec)进行保护。
  3. 效率:分片和重组过程复杂,影响网络性能。

过渡到IPv6

为了应对IPv4的局限性,IPv6协议应运而生。IPv6具有128位地址空间,提供了更大的地址容量和改进的功能,如内置安全性和更高效的路由。但IPv4和IPv6的共存和过渡仍是一个长期的过程。

IPv6协议介绍

概述

IPv6(Internet Protocol version 6)是互联网协议的第六版,设计为IPv4的继任者,以应对IPv4地址耗尽的问题。IPv6引入了更大的地址空间和多项改进,提升了网络性能、安全性和管理灵活性。

IPv6不同地址的作用

IPv6地址空间大幅扩展,提供了多种类型的地址,每种类型有其特定的用途。以下是IPv6不同地址类型及其作用的详细说明:

1. 单播地址(Unicast Address)

单播地址用于标识单个接口,一个数据包发送到单播地址后会被传递到唯一的目标接口。

常见的单播地址类型:

  • 全球单播地址(Global Unicast Address)

    • 前缀:2000::/3
    • 描述:用于全球范围内的唯一标识,类似于IPv4的公共地址。
    • 作用:用于在全球互联网中的通信。
  • 链路本地地址(Link-Local Address)

    • 前缀:fe80::/10
    • 描述:用于链路本地通信,仅在同一链路内有效。
    • 作用:主要用于邻居发现、无状态地址自动配置(SLAAC)等局部网络通信。
  • 站点本地地址(Site-Local Address,已弃用)

    • 前缀:fec0::/10
    • 描述:原本用于站点内通信,但已被弃用,现建议使用唯一本地地址替代。
  • 唯一本地地址(Unique Local Address, ULA)

    • 前缀:fc00::/7
    • 描述:用于本地网络或站点内部通信,类似于IPv4的私有地址。
    • 作用:用于内部网络通信,避免与全球单播地址冲突。
2. 多播地址(Multicast Address)

多播地址用于标识一组接口,一个数据包发送到多播地址后会被传递到所有属于该多播组的接口。

  • 前缀:ff00::/8
  • 描述:用于组播通信,数据包会被发送到多播组中的所有成员。
  • 作用:用于IPv6邻居发现、路由协议等需要组播通信的场景。

多播地址范围:

  • ff02::1: 所有节点多播地址(链路本地范围)
  • ff02::2: 所有路由器多播地址(链路本地范围)
3. 任播地址(Anycast Address)

任播地址分配给一组接口,一个数据包发送到任播地址后会被传递到距离最近的一个接口。

  • 描述:在多个接口上共享的地址,数据包将被传递到离源最近的一个接口。
  • 作用:用于服务冗余和负载均衡,例如DNS服务器、内容分发网络(CDN)等。

IPv6地址的结构

IPv6地址由128位组成,通常表示为八组十六进制数,每组由冒号分隔,例如:

2001:0db8:85a3:0000:0000:8a2e:0370:7334

各类IPv6地址的用途示例

全球单播地址
  • 用途:全球唯一的地址,用于互联网通信。
  • 示例2001:0db8:85a3::8a2e:0370:7334
  • 应用场景:主机、服务器、路由器等需要与互联网通信的设备。
链路本地地址
  • 用途:链路本地通信,不可跨路由器。
  • 示例fe80::1
  • 应用场景:邻居发现、自动配置、局域网内通信等。
唯一本地地址
  • 用途:站点内部或本地网络通信,类似于IPv4的私有地址。
  • 示例fd00::/8
  • 应用场景:企业内部网络、家庭网络等不与互联网直接通信的场景。
多播地址
  • 用途:组播通信,数据包发送到多播组中的所有成员。
  • 示例ff02::1(所有节点)、ff02::2(所有路由器)
  • 应用场景:邻居发现协议、路由协议、视频会议等需要组播的应用。
任播地址
  • 用途:一组接口共享的地址,数据包被传递到最近的一个接口。
  • 示例:没有具体前缀,分配时与单播地址相同。
  • 应用场景:服务冗余、负载均衡,如多个DNS服务器或CDN节点。

IPv6报文格式

IPv6报文由固定头部和可选的扩展头部组成,头部固定长度为40字节。以下是IPv6头部的字段及其说明:

  1. 版本 (Version):4位,表示IP协议的版本号,为6。
  2. 流量类别 (Traffic Class):8位,用于区分不同的流量类型和服务质量(QoS)。
  3. 流标签 (Flow Label):20位,用于标识数据流,便于路由器快速处理。
  4. 有效载荷长度 (Payload Length):16位,表示除基本头部外的有效载荷长度,以字节为单位。
  5. 下一个头部 (Next Header):8位,指示扩展头部的类型或上层协议类型(如TCP、UDP)。
  6. 跳数限制 (Hop Limit):8位,类似于IPv4的TTL字段,指定数据包的生存时间。
  7. 源地址 (Source Address):128位,发送数据包的源IPv6地址。
  8. 目的地址 (Destination Address):128位,接收数据包的目的IPv6地址。

IPv6报文格式图示:

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| Traffic Class | Flow Label |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Payload Length | Next Header | Hop Limit |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Source Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Destination Address +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

IPv6 Next Header值及其对应协议或扩展头部类型

以下是IPv6 Next Header字段常见值及其对应的协议或扩展头部类型的表格展示:

Next Header 值协议/扩展头部类型描述
0Hop-by-Hop Options Header用于在每一跳的路由器进行处理的选项
1ICMPv4IPv4中的ICMP协议,IPv6中不常用
2IGMPIPv4中的IGMP协议,IPv6中不常用
6TCP (Transmission Control Protocol)传输层的TCP协议
17UDP (User Datagram Protocol)传输层的UDP协议
41IPv6 encapsulation封装IPv6数据包
43Routing Header源路由的选项,指定数据包通过的中间节点列表
44Fragment Header数据包分片信息
46Resource Reservation Protocol (RSVP)资源预留协议
47GRE (Generic Routing Encapsulation)通用路由封装协议
50ESP (Encapsulating Security Payload)IPsec中的加密和身份验证
51AH (Authentication Header)IPsec中的数据包完整性和认证
58ICMPv6IPv6的ICMP协议,支持错误报告和诊断
59No Next Header没有后续头部,即数据包结束
60Destination Options Header为最终目的地或中间节点指定选项

IPv6扩展头部链示例

以下是一个包含多个扩展头部的IPv6头部链的示例表格:

IPv6头部类型描述Next Header 值
IPv6 Basic Header基本IPv6头部,包含源地址和目的地址0
Hop-by-Hop Options Header在每一跳处理的选项43
Routing Header源路由选项,指定数据包通过的中间节点列表44
Fragment Header数据包分片信息6
TCP Header传输层的TCP协议头部,包含传输控制信息-
Payload实际传输的数据-

示例IPv6头部链

+-------------------+---------------------+-------------------+--------------------+-----------------+
| IPv6 Basic Header | Hop-by-Hop Options | Routing Header | Fragment Header | TCP Header |
+-------------------+---------------------+-------------------+--------------------+-----------------+
| Next Header = 0 | Next Header = 43 | Next Header = 44 | Next Header = 6 | Payload |
+-------------------+---------------------+-------------------+--------------------+-----------------+

在这个示例中:

  • IPv6基本头部的Next Header字段值为0,表示后续是Hop-by-Hop Options Header。
  • Hop-by-Hop Options Header的Next Header字段值为43,表示后续是Routing Header。
  • Routing Header的Next Header字段值为44,表示后续是Fragment Header。
  • Fragment Header的Next Header字段值为6,表示后续是TCP头部。

IPv6的改进

  1. 更大的地址空间:IPv6提供了128位地址空间,可以容纳约3.4×10^38个地址,远远超过IPv4的地址容量。
  2. 简化的头部格式:IPv6头部格式较IPv4简化,固定长度40字节,减少了处理开销。
  3. 无须NAT (Network Address Translation):IPv6的巨大地址空间消除了对NAT的需求,简化了网络配置和管理。
  4. 内置IPsec:IPv6原生支持IPsec,增强了网络安全性。
  5. 改进的多播支持:IPv6改进了多播通信,提供更高效的多播路由。
  6. 自动配置:支持无状态地址自动配置(SLAAC),简化了设备的IP地址分配。
  7. 扩展头部和可选项:IPv6使用扩展头部机制,灵活支持新功能和改进。

NDP(Neighbor Discovery Protocol)

概述

IPv6的Neighbor Discovery Protocol(邻居发现协议,简称NDP)是IPv6协议套件中的一个关键协议,用于在IPv6网络中执行多个重要的网络功能。NDP在IPv6中的作用类似于IPv4中的ARP(地址解析协议)、ICMP路由器发现和ICMP重定向功能的综合。

NDP使用ICMPv6消息来执行其功能,主要包括邻居发现、地址自动配置、重定向、邻居不可达检测、重复地址检测等。

NDP的主要功能

  1. 地址解析:将IPv6地址解析为链路层地址。
  2. 邻居不可达检测(NUD):检测邻居是否可达。
  3. 重复地址检测(DAD):确保IPv6地址在网络中的唯一性。
  4. 自动地址配置:无状态自动配置(SLAAC),用于自动配置IPv6地址。
  5. 路由器发现:主机发现IPv6路由器。
  6. 重定向:路由器通知主机更好的下一跳路由。

NDP使用的ICMPv6消息类型

NDP使用的ICMPv6消息类型如下:

  1. Router Solicitation(路由器请求)

    • 类型:133
    • 用途:主机发送RS消息,询问是否有可用的路由器。
  2. Router Advertisement(路由器通告)

    • 类型:134
    • 用途:路由器响应RS消息,或定期发送RA消息,通告自身信息和网络前缀。
  3. Neighbor Solicitation(邻居请求)

    • 类型:135
    • 用途:设备发送NS消息,请求邻居的链路层地址或检测邻居是否可达。
  4. Neighbor Advertisement(邻居通告)

    • 类型:136
    • 用途:设备响应NS消息,通告自身的链路层地址。
  5. Redirect(重定向)

    • 类型:137
    • 用途:路由器发送重定向消息,通知主机更优的路由路径。

NDP消息格式

Router Solicitation(路由器请求)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+
  • Type:133
  • Code:0
  • Checksum:ICMPv6校验和
  • Reserved:保留字段,设置为0
  • Options:可选字段,例如源链路层地址
Router Advertisement(路由器通告)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cur Hop Limit |M|O|H|Prf|Resvd| Router Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reachable Time |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Retrans Timer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+
  • Type:134
  • Code:0
  • Checksum:ICMPv6校验和
  • Cur Hop Limit:当前跳数限制
  • M:管理地址配置标志
  • O:其他配置标志
  • H:高速移动性标志
  • Prf:默认路由器优先级
  • Router Lifetime:路由器生存时间
  • Reachable Time:邻居可达时间
  • Retrans Timer:重传时间
  • Options:可选字段,例如源链路层地址、前缀信息等
Neighbor Solicitation(邻居请求)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Target Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+
  • Type:135
  • Code:0
  • Checksum:ICMPv6校验和
  • Reserved:保留字段,设置为0
  • Target Address:目标地址
  • Options:可选字段,例如源链路层地址
Neighbor Advertisement(邻居通告)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|R|S|O| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Target Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+
  • Type:136
  • Code:0
  • Checksum:ICMPv6校验和
  • R:路由器标志
  • S:重定向可达标志
  • O:覆盖标志
  • Reserved:保留字段
  • Target Address:目标地址
  • Options:可选字段,例如源链路层地址
Redirect(重定向)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Target Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Destination Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+
  • Type:137
  • Code:0
  • Checksum:ICMPv6校验和
  • Reserved:保留字段
  • Target Address:目标地址
  • Destination Address:目标地址
  • Options:可选字段,例如源链路层地址

NDP操作示例

  1. 地址解析

    主机A需要与主机B通信,首先需要解析主机B的IPv6地址到MAC地址。

    • 主机A发送NS请求

      Type: 135 (Neighbor Solicitation)
      Target Address: 主机B的IPv6地址
    • 主机B发送NA应答

      Type: 136 (Neighbor Advertisement)
      Target Address: 主机B的IPv6地址
  2. 自动地址配置

    主机首次连接到网络时,需要自动配置自己的IPv6地址。

    • 主机发送RS请求

      Type: 133 (Router Solicitation)
    • 路由器发送RA通告

      Type: 134 (Router Advertisement)
  3. 重定向

    路由器通知主机更优的路由路径。

    • 路由器发送Redirect消息
      Type: 137 (Redirect)

PD(Prefix Delegation)

IPv6的前缀代理(Prefix Delegation)是动态主机配置协议(DHCPv6)的一部分,主要用于将网络前缀从一个路由器(通常是ISP的路由器)动态分配给另一个路由器(通常是家庭或企业的边界路由器)。这种机制允许下游路由器(客户网络中的路由器)为其内部网络自动配置IPv6地址。

前缀代理的主要功能

  1. 前缀分配:ISP路由器将一个或多个IPv6前缀分配给客户的边界路由器。
  2. 地址自动配置:客户的边界路由器使用分配的前缀为其内部网络中的设备自动配置IPv6地址。
  3. 地址发布:边界路由器通过路由通告(Router Advertisement,RA)在其内部网络中发布分配的前缀,使内部设备能够自动配置IPv6地址。

前缀代理的工作流程

  1. 请求前缀(Prefix Request)

    客户边界路由器发送一个DHCPv6请求消息(Request),请求上游ISP路由器分配一个或多个IPv6前缀。

  2. 分配前缀(Prefix Delegation)

    ISP路由器接收到请求后,分配一个或多个IPv6前缀,并通过DHCPv6应答消息(Reply)将这些前缀发送回客户边界路由器。

  3. 发布前缀(Prefix Advertisement)

    客户边界路由器接收到前缀后,通过RA消息在其内部网络中发布这些前缀,使内部设备能够使用这些前缀进行地址自动配置。

DHCPv6前缀代理消息类型

  1. Solicit(请求)

    • 客户边界路由器发送Solicit消息,寻找可用的DHCPv6服务器。
  2. Advertise(通告)

    • ISP路由器发送Advertise消息,响应Solicit消息,表明自己可用并提供前缀。
  3. Request(请求)

    • 客户边界路由器发送Request消息,请求分配具体的前缀。
  4. Reply(应答)

    • ISP路由器发送Reply消息,分配前缀并将其发送给客户边界路由器。

DHCPv6前缀代理报文格式

Solicit、Advertise、Request和Reply消息格式

这些消息的基本格式如下:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| msg-type | transaction-id |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. options .
. .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • msg-type:8位,表示DHCPv6消息类型。
    • Solicit:1
    • Advertise:2
    • Request:3
    • Reply:7
  • transaction-id:24位,事务ID,用于匹配请求和响应。
  • options:可变长度,用于携带各种选项和配置参数。
IA_PD(Identity Association for Prefix Delegation)选项格式

用于携带前缀代理信息的IA_PD选项格式如下:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IAID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| T1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| T2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. IA_PD-options .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • option-code:16位,选项代码,表示IA_PD选项(25)。
  • option-len:16位,选项长度,以字节为单位。
  • IAID:32位,标识IA_PD的标识符。
  • T1:32位,表示客户端应尝试续租的时间。
  • T2:32位,表示客户端应尝试重新绑定的时间。
  • IA_PD-options:可变长度,包含前缀信息选项。
Prefix Information Option(前缀信息选项)格式

前缀信息选项用于在Reply消息中携带分配的前缀:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| prefix-length | reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| valid-lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| preferred-lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| reserved2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. prefix (variable) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • option-code:16位,选项代码,表示前缀信息选项(26)。
  • option-len:16位,选项长度,以字节为单位。
  • prefix-length:8位,表示前缀长度。
  • reserved1:8位,保留字段。
  • valid-lifetime:32位,前缀的有效生存时间。
  • preferred-lifetime:32位,前缀的首选生存时间。
  • reserved2:32位,保留字段。
  • prefix:可变长度,分配的前缀。

前缀代理操作示例

假设客户的边界路由器请求ISP路由器分配一个前缀:

  1. 客户边界路由器发送Solicit消息

    Client Router -> ISP Router: Solicit
  2. ISP路由器发送Advertise消息

    ISP Router -> Client Router: Advertise
  3. 客户边界路由器发送Request消息

    Client Router -> ISP Router: Request
  4. ISP路由器发送Reply消息,分配前缀

    ISP Router -> Client Router: Reply
  5. 客户边界路由器在内部网络发布前缀

    客户边界路由器通过RA消息在其内部网络中发布分配的前缀:

    Client Router -> Internal Network: Router Advertisement (with prefix)

DHCPv4的6RD(6rd)介绍

概述

6RD(IPv6 Rapid Deployment)是一个机制,用于在现有的IPv4基础设施上快速部署IPv6。它允许服务提供商通过现有的IPv4网络传输IPv6数据包,从而无需对现有网络进行重大更改即可提供IPv6连接。DHCPv4可以用于分配6RD配置参数,使客户端能够自动配置6RD隧道。

6RD的主要功能

  1. 快速部署IPv6:利用现有的IPv4基础设施快速部署IPv6,减少网络升级的复杂性和成本。
  2. 隧道机制:在IPv4网络中创建IPv6隧道,允许IPv6数据包在IPv4网络上传输。
  3. 自动配置:通过DHCPv4分配6RD配置参数,使客户端能够自动配置6RD隧道。

6RD配置参数

6RD配置参数通常通过DHCPv4分配给客户端。主要参数包括:

  1. 6RD前缀(6RD Prefix):IPv6前缀,用于生成客户端的IPv6地址。
  2. 6RD前缀长度(6RD Prefix Length):指定6RD前缀的长度。
  3. 6RD边界路由器地址(6RD Border Relay IPv4 Address):IPv4地址,用于6RD隧道的远端地址。

DHCPv4中的6RD选项

DHCPv4协议通过选项212(6RD)来传递6RD配置参数。以下是选项212的格式:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Option Code | Option Length | 6RD Prefix Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 6RD Prefix (Variable Length) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 6RD BR IPv4 Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 6RD BR IPv4 Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Option Code:8位,表示DHCP选项212。
  • Option Length:8位,表示选项数据的长度。
  • 6RD Prefix Length:8位,表示6RD前缀的长度。
  • 6RD Prefix:可变长度,表示6RD前缀。
  • 6RD BR IPv4 Address:32位,表示6RD边界路由器的IPv4地址。

6RD的工作流程

  1. DHCPv4服务器配置

    DHCPv4服务器配置6RD选项(选项212),包含6RD前缀、前缀长度和边界路由器的IPv4地址。

  2. 客户端请求

    客户端通过DHCPv4请求配置参数。

  3. DHCPv4服务器响应

    DHCPv4服务器响应请求,提供6RD配置参数。

  4. 客户端配置6RD隧道

    客户端接收到6RD配置参数后,自动配置6RD隧道,生成IPv6地址,并能够通过IPv4网络进行IPv6通信。

示例配置

DHCPv4服务器配置6RD选项

假设6RD前缀为2001:db8::/32,前缀长度为32,边界路由器的IPv4地址为192.0.2.1。

在DHCPv4服务器的配置文件中添加6RD选项:

option 6rd code 212 = { integer 8, ip-address, ip-address };
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.100 192.168.1.150;
option routers 192.168.1.1;
option 6rd 32, 2001:db8::, 192.0.2.1;
}
客户端配置6RD隧道

客户端通过DHCPv4获取6RD配置参数后,自动配置6RD隧道。假设客户端的IPv4地址为192.168.1.100,生成的6RD隧道的IPv6地址为2001:db8:c0a8:164::1。

配置6RD隧道:

Terminal window
# 假设使用Linux系统
ip tunnel add 6rd mode sit remote 192.0.2.1 local 192.168.1.100 ttl 64
ip link set 6rd up
ip addr add 2001:db8:c0a8:164::1/64 dev 6rd
ip route add ::/0 dev 6rd

IPv6自动配置

  1. 无状态地址自动配置 (SLAAC, Stateless Address Autoconfiguration):设备根据网络前缀自动生成IPv6地址,无需手动配置或DHCP服务器。
  2. 有状态地址配置 (DHCPv6):类似于IPv4的DHCP,通过DHCPv6服务器分配IPv6地址和其他网络配置。

SLAAC配置IPv6地址

概述

无状态地址自动配置(SLAAC, Stateless Address Autoconfiguration)是IPv6的一种自动配置机制,它允许设备在无需手动配置或DHCP服务器的情况下自动生成IPv6地址。SLAAC利用路由器广告(Router Advertisement, RA)消息来提供网络前缀信息,并基于此生成全局唯一的IPv6地址。

SLAAC配置步骤

  1. 链接本地地址生成
  2. 路由器发现
  3. 全局地址生成
  4. 重复地址检测

步骤详解

  1. 链接本地地址生成

    当IPv6设备首次连接到网络时,它会生成一个链路本地地址。链路本地地址的前缀为fe80::/10,其后部分通常基于设备的MAC地址生成。

    链接本地地址的格式如下:

    fe80::/10 + 接口标识符

    接口标识符通常是64位长,可以通过将设备的48位MAC地址转换为64位扩展唯一标识符(EUI-64)来生成。

  2. 路由器发现

    设备生成链路本地地址后,会发送一个路由器请求(Router Solicitation, RS)消息到本地链路,询问是否有可用的路由器。路由器会通过发送路由器广告(Router Advertisement, RA)消息来响应。

    RA消息中包含网络前缀、前缀长度、路由器生存时间和其他配置参数。设备使用这些信息来配置自己的全局单播地址。

  3. 全局地址生成

    设备根据RA消息中的前缀信息,结合自身的接口标识符生成全局单播地址。地址格式如下:

    网络前缀 + 接口标识符

    例如,如果路由器广告的前缀是2001:db8:abcd::/64,设备的接口标识符是eui-64,那么生成的全局地址可能是:

    2001:db8:abcd::eui-64
  4. 重复地址检测(DAD, Duplicate Address Detection)

    设备生成全局地址后,会进行重复地址检测,以确保地址在本地链路上是唯一的。设备会发送邻居请求(Neighbor Solicitation, NS)消息,查询网络中是否存在同样的地址。

    • 如果没有响应,表示地址唯一,可以使用。
    • 如果收到响应,表示地址已被占用,需要重新生成一个新的接口标识符,再进行检测。

示例配置

以下示例展示了如何在Linux系统上启用SLAAC并自动配置IPv6地址。

  1. 检查网络接口

    首先,检查可用的网络接口:

    Terminal window
    ip link show
  2. 启用IPv6

    确保IPv6在网络接口上启用:

    Terminal window
    sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
    sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0
    sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=0
  3. 配置网络接口

    使用ip命令手动触发路由器请求消息:

    Terminal window
    sudo ip -6 addr flush dev eth0
    sudo ip -6 addr add fe80::1/64 dev eth0
    sudo ip -6 route add default dev eth0
    sudo ip -6 neigh add ff02::1 dev eth0

    启用自动配置:

    Terminal window
    sudo sysctl -w net.ipv6.conf.eth0.autoconf=1
    sudo sysctl -w net.ipv6.conf.eth0.accept_ra=1

    检查配置:

    Terminal window
    ip -6 addr show dev eth0

SLAAC中的报文格式

在SLAAC(Stateless Address Autoconfiguration)过程中,主要使用ICMPv6报文,包括路由器请求(Router Solicitation, RS)和路由器广告(Router Advertisement, RA)。以下是这些报文的格式详解:

1. 路由器请求(RS)报文格式

路由器请求报文用于请求邻居设备(尤其是路由器)发送路由器广告消息。其格式如下:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
  • Type: 133 (表示Router Solicitation)
  • Code: 0
  • Checksum: 16位的ICMP校验和
  • Reserved: 32位保留字段,设置为0
  • Options: 可选字段,例如源链路层地址(Source Link-Layer Address),用于提供发送设备的链路层地址。
2. 路由器广告(RA)报文格式

路由器广告报文由路由器发送,用于提供前缀信息和其他配置参数。其格式如下:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cur Hop Limit |M|O|H|Prf|Resvd| Router Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reachable Time |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Retrans Timer |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 134 (表示Router Advertisement)
  • Code: 0
  • Checksum: 16位的ICMP校验和
  • Cur Hop Limit: 当前跳数限制,用于设置IPv6报文的跳数限制
  • M: 管理地址配置标志(Managed Address Configuration Flag)
  • O: 其他配置标志(Other Configuration Flag)
  • H: 高速移动性标志(Home Agent Flag)
  • Prf: 默认路由器优先级(Default Router Preference)
  • Resvd: 保留字段
  • Router Lifetime: 16位,表示路由器作为默认路由器的生存时间,以秒为单位
  • Reachable Time: 32位,表示邻居可达时间,以毫秒为单位
  • Retrans Timer: 32位,表示重传时间,以毫秒为单位
  • Options: 可选字段,包括:
    • Source Link-Layer Address: 源链路层地址
    • MTU: 最大传输单元
    • Prefix Information: 前缀信息,用于生成IPv6地址
    • Route Information: 路由信息
    • Recursive DNS Server: 递归DNS服务器地址
    • DNS Search List: DNS搜索列表
M标志(Managed address configuration flag)
  • M标志用于指示是否应该使用DHCPv6获取IPv6地址。
  • M = 1:设备应使用DHCPv6来获取其IPv6地址。这意味着网络中的DHCPv6服务器将分配IPv6地址给设备。
  • M = 0:设备不需要使用DHCPv6来获取IPv6地址,可以使用SLAAC(无状态地址自动配置)来生成IPv6地址。
O标志(Other configuration flag)
  • O标志用于指示是否应该使用DHCPv6获取其他配置信息(例如,DNS服务器地址、NTP服务器地址等)。
  • O = 1:设备应使用DHCPv6来获取其他配置信息,即使它已经通过SLAAC获得了IPv6地址。
  • O = 0:设备不需要使用DHCPv6来获取其他配置信息。
示例组合
  1. M = 0, O = 0

    • 设备通过SLAAC生成IPv6地址,不使用DHCPv6。
    • 设备不会尝试通过DHCPv6获取其他配置信息。
  2. M = 0, O = 1

    • 设备通过SLAAC生成IPv6地址。
    • 设备使用DHCPv6获取其他配置信息(如DNS服务器地址)。
  3. M = 1, O = 0

    • 设备使用DHCPv6获取IPv6地址。
    • 设备不会尝试通过DHCPv6获取其他配置信息。
  4. M = 1, O = 1

    • 设备使用DHCPv6获取IPv6地址。
    • 设备使用DHCPv6获取其他配置信息。

Prefix Information Option(前缀信息选项)

前缀信息选项用于在RA报文中传递前缀信息,其格式如下:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type = 3 |Length = 4 | Prefix Length |L|A| Reserved1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Valid Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Preferred Lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
+ +
| |
+ Prefix +
| |
+ +
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type: 3 (表示Prefix Information)
  • Length: 4(表示选项的长度,以8字节为单位)
  • Prefix Length: 前缀长度,以位为单位
  • L: 有效时间标志(On-link Flag)
  • A: 自动配置标志(Autonomous Address-Configuration Flag)
  • Reserved1: 保留字段
  • Valid Lifetime: 前缀的有效生存时间,以秒为单位
  • Preferred Lifetime: 前缀的首选生存时间,以秒为单位
  • Reserved2: 保留字段
  • Prefix: IPv6前缀

DHCPv6配置IPv6地址

概述

DHCPv6(Dynamic Host Configuration Protocol for IPv6)是一种用于IPv6网络的动态主机配置协议。它提供了一种集中化的、自动化的方式来分配IPv6地址和其他网络配置参数。DHCPv6主要用于需要更精细控制和管理的网络环境。

DHCPv6工作原理

DHCPv6客户端和服务器之间通过udp协议通信,服务器、中继代理侦听的UDP端口号是547, 客户端侦听的UDP目的端口号是546

DHCPv6使用的组播地址

  • ff02::1:2 客户端与服务端或中继代理之间的通信
  • ff05::1:3 中继代理与服务端之间的通信

以下是DHCPv6配置IPv6地址的主要步骤和相关报文格式:

1. DHCPv6消息类型

DHCPv6协议定义了多种消息类型,常见的包括:

  • Solicit (1): 客户端请求服务器的消息。
  • Advertise (2): 服务器响应Solicit消息的广告消息。
  • Request (3): 客户端请求具体配置的消息。
  • Confirm (4): 客户端确认其地址是否仍然有效的消息。
  • Renew (5): 客户端请求续租其地址的消息。
  • Rebind (6): 客户端在无法联系到服务器时请求续租的消息。
  • Reply (7): 服务器响应请求、确认等消息。
  • Release (8): 客户端释放其租用的地址。
  • Decline (9): 客户端拒绝服务器提供的地址。
  • Reconfigure (10): 服务器通知客户端需要重新配置。
2. DHCPv6报文格式

DHCPv6报文由以下字段组成:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-data (variable) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • option-code:16位,表示选项类型。
  • option-len:16位,表示选项数据的长度(以字节为单位)。
  • option-data:可变长度,包含选项的实际数据。
常见DHCPv6选项

以下是一些常见的DHCPv6选项及其格式:

  1. Client Identifier Option (Option 1)

    客户端标识符,用于唯一标识DHCPv6客户端。

    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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | option-code = 1 | option-len |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | DUID (variable) .
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  2. Server Identifier Option (Option 2)

    服务器标识符,用于唯一标识DHCPv6服务器。

    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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | option-code = 2 | option-len |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | DUID (variable) .
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  3. IA_NA Option (Option 3)

    非临时地址(Non-temporary Address)标识符。

    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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | option-code = 3 | option-len |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | IAID (4 octets) |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | T1 |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | T2 |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | |
    . IA_NA-options .
    . .
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  4. IA Address Option (Option 5)

    IP地址分配信息。

    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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | option-code = 5 | option-len |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | |
    | IPv6 address |
    | |
    | |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | preferred-lifetime |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | valid-lifetime |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | |
    . IAaddr-options .
    . .
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  5. DNS Recursive Name Server Option (Option 23)

    递归DNS服务器地址。

    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
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | option-code = 23 | option-len |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | |
    | IPv6 address (128 bits) |
    | |
    | |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | |
    . ... .

示例消息

以下是一些常见的DHCPv6消息及其组成:

Solicit消息

客户端发送Solicit消息,寻找可用的DHCPv6服务器。

msg-type: 1 (Solicit)
transaction-id: 0x123456
options:
- Client Identifier Option
- Option Request Option
Advertise消息

服务器响应Solicit消息,发送Advertise消息,告知客户端可用的配置选项。

msg-type: 2 (Advertise)
transaction-id: 0x123456
options:
- Client Identifier Option
- Server Identifier Option
- IA_NA Option
- DNS Recursive Name Server Option
Request消息

客户端选择一个服务器,并发送Request消息,请求具体的配置参数和地址。

msg-type: 3 (Request)
transaction-id: 0x123456
options:
- Client Identifier Option
- Server Identifier Option
- IA_NA Option
Reply消息

服务器响应Request消息,发送Reply消息,分配IPv6地址和其他配置参数。

msg-type: 7 (Reply)
transaction-id: 0x123456
options:
- Client Identifier Option
- Server Identifier Option
- IA_NA Option
- IA Address Option
- DNS Recursive Name Server Option

3. 常见的DHCPv6选项

DHCPv6选项用于在客户端和服务器之间传递各种配置信息,常见选项包括:

  • Client Identifier (Option 1): 客户端标识符,用于唯一标识客户端。
  • Server Identifier (Option 2): 服务器标识符,用于唯一标识服务器。
  • IA_NA (Option 3): 非临时地址(Non-temporary Address)标识符。
  • IA_TA (Option 4): 临时地址(Temporary Address)标识符。
  • IA Address (Option 5): IP地址分配信息。
  • Option Request (Option 6): 客户端请求的选项。
  • Preference (Option 7): 服务器优先级信息。
  • Elapsed Time (Option 8): 请求发送后的时间。
  • Relay Message (Option 9): 中继信息。
  • DNS Recursive Name Server (Option 23): 递归DNS服务器地址。
  • Domain Search List (Option 24): 域名搜索列表。

4. DHCPv6配置过程

以下是典型的DHCPv6地址配置过程,包括消息交互示意:

1. Solicit消息

客户端发送Solicit消息,寻找可用的DHCPv6服务器。

Client Server
|-- Solicit ----------------------------->|
| |
2. Advertise消息

服务器响应Solicit消息,发送Advertise消息,告知客户端可用的配置选项。

Client Server
|<-- Advertise ---------------------------|
| |
3. Request消息

客户端选择一个服务器,并发送Request消息,请求具体的配置参数和地址。

Client Server
|-- Request ----------------------------->|
| |
4. Reply消息

服务器响应Request消息,发送Reply消息,分配IPv6地址和其他配置参数。

Client Server
|<-- Reply ------------------------------|
| |

示例配置

在Linux上配置DHCPv6客户端
  1. 安装DHCPv6客户端软件(如dhclient)。

    Terminal window
    sudo apt-get install isc-dhcp-client
  2. 配置DHCPv6客户端。

    编辑/etc/dhcp/dhclient.conf文件,添加以下内容:

    Terminal window
    interface "eth0" {
    send dhcp6-client-identifier = hardware;
    request;
    }
  3. 启动DHCPv6客户端。

    Terminal window
    sudo dhclient -6 -v eth0
在Linux上配置DHCPv6服务器
  1. 安装DHCPv6服务器软件(如isc-dhcp-server)。

    Terminal window
    sudo apt-get install isc-dhcp-server
  2. 配置DHCPv6服务器。

    编辑/etc/dhcp/dhcpd.conf文件,添加以下内容:

    Terminal window
    subnet6 2001:db8:1::/64 {
    range6 2001:db8:1::1000 2001:db8:1::2000;
    option dhcp6.name-servers 2001:db8::1;
    option dhcp6.domain-search "example.com";
    }
  3. 启动DHCPv6服务器。

    Terminal window
    sudo service isc-dhcp-server start
IPv6的部署与过渡

由于IPv4和IPv6不兼容,过渡到IPv6需要以下策略:

  1. 双栈:设备同时运行IPv4和IPv6协议栈,逐步迁移到IPv6。
  2. 隧道:在IPv4网络中封装IPv6数据包,确保IPv6节点之间的通信。
  3. 翻译:使用NAT64/DNS64等技术实现IPv4和IPv6网络之间的互通。

ICMP协议介绍

概述

ICMP(Internet Control Message Protocol)是用于在IP网络中传输控制消息和错误报告的协议。ICMP是IP协议的一部分,主要用于报告网络通信中的错误、提供诊断和控制功能。

ICMP的主要功能

  1. 错误报告:当数据包无法到达目的地或路由发生变化时,ICMP用于向源设备报告错误。
  2. 诊断:使用ICMP的工具(如ping和traceroute)用于网络诊断和测试连接性。
  3. 控制信息:传递控制消息,如重定向、时间戳请求等。

ICMP报文格式

ICMP报文由固定头部和可选的数据部分组成。不同类型的ICMP报文有不同的格式,但头部的前几个字段是相同的。

ICMP头部格式(通用部分)
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Rest of Header |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type:8位,表示ICMP消息类型。
  • Code:8位,表示ICMP消息的子类型或原因。
  • Checksum:16位,ICMP报文的校验和,用于检测错误。
  • Rest of Header:可变,根据具体的ICMP消息类型不同而不同。

常见ICMP消息类型及格式

  1. 回显请求和回显应答(Echo Request and Echo Reply)

    • 用途:用于ping命令,测试网络连通性。

    • Type:8(回显请求),0(回显应答)

    • Code:0

    • Rest of Header

      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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Type | Code | Checksum |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Identifier | Sequence Number |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Data ...
      +-+-+-+-+-+-+-+-+
      • Identifier:16位,标识符,用于匹配请求和应答。
      • Sequence Number:16位,序列号,用于匹配请求和应答。
      • Data:可变,包含测试数据。
  2. 目的不可达(Destination Unreachable)

    • 用途:通知源设备数据包无法到达目的地。

    • Type:3

    • Code

      • 0:网络不可达
      • 1:主机不可达
      • 2:协议不可达
      • 3:端口不可达
      • 4:需要进行分片但设置了不分片标志
      • 5:源路由失败
    • Rest of Header

      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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Type | Code | Checksum |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Unused |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Internet Header + 64 bits of Original Data Datagram |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      • Unused:32位,未使用,通常为0。
      • Internet Header + 64 bits of Original Data Datagram:包含导致错误的原始IP数据报的前64位。
  3. 源抑制(Source Quench,已弃用)

    • 用途:通知源设备降低发送速率(已弃用)。

    • Type:4

    • Code:0

    • Rest of Header

      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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Type | Code | Checksum |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Unused |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Internet Header + 64 bits of Original Data Datagram |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      • Unused:32位,未使用,通常为0。
      • Internet Header + 64 bits of Original Data Datagram:包含导致错误的原始IP数据报的前64位。
  4. 重定向(Redirect)

    • 用途:通知源设备应使用另一条路由。

    • Type:5

    • Code

      • 0:网络重定向
      • 1:主机重定向
      • 2:网络重定向(ToS)
      • 3:主机重定向(ToS)
    • Rest of Header

      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
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Type | Code | Checksum |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Gateway Internet Address |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      | Internet Header + 64 bits of Original Data Datagram |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      • Gateway Internet Address:32位,指示重定向到的网关地址。
      • Internet Header + 64 bits of Original Data Datagram:包含导致错误的原始IP数据报的前64位。

ICMP报文的使用示例

  1. Ping命令

    Ping命令使用ICMP回显请求和回显应答消息来测试网络连接性。典型的ping流程如下:

    • 客户端发送ICMP回显请求

      Client -> Server: ICMP Echo Request (Type 8, Code 0)
    • 服务器发送ICMP回显应答

      Server -> Client: ICMP Echo Reply (Type 0, Code 0)
  2. Traceroute命令

    Traceroute命令使用ICMP目的不可达消息来追踪数据包到达目的地的路径。典型的traceroute流程如下:

    • 客户端发送带有递增TTL值的UDP数据包

      Client -> Intermediate Router: UDP Packet with TTL=1
    • 中间路由器返回ICMP时间超过消息

      Intermediate Router -> Client: ICMP Time Exceeded (Type 11, Code 0)
    • 客户端发送带有递增TTL值的UDP数据包,直到到达目的地

      Client -> Destination: UDP Packet with TTL=n
    • 目的地返回ICMP目的不可达消息(端口不可达)

      Destination -> Client: ICMP Destination Unreachable (Type 3, Code 3)

IGMP协议介绍

概述

IGMP(Internet Group Management Protocol,互联网组管理协议)是一种用于管理IP多播组成员的网络层协议。它用于在IP网络中实现多播通信,允许多个主机加入或离开特定的多播组,进而使数据包只发送给多播组中的成员,从而提高网络效率。

IGMP的主要功能

  1. 管理多播组成员关系:允许主机加入或离开多播组,并通知路由器多播组成员的变化。
  2. 维护多播组信息:路由器使用IGMP来维护多播组成员列表,并根据此信息决定是否转发多播数据包。
  3. 支持多播应用:广泛应用于视频会议、实时流媒体、在线游戏等需要一对多或多对多通信的场景。

IGMP的版本

IGMP协议有多个版本,每个版本在功能和特性上有所不同:

  1. IGMPv1

    • 最早的IGMP版本。
    • 主机通过发送成员报告消息加入多播组。
    • 路由器定期发送查询消息,主机响应报告消息以维持组成员关系。
  2. IGMPv2

    • 增加了离开组消息(Leave Group),使主机能够主动通知路由器离开多播组。
    • 引入了特定组查询消息,优化了查询机制。
    • 改进了查询消息和报告消息的格式和处理流程。
  3. IGMPv3

    • 支持源特定多播(Source-Specific Multicast,SSM)。
    • 主机可以指定感兴趣的多播源和拒绝的多播源。
    • 引入了新的记录类型和更复杂的查询和报告机制。

IGMP消息格式

IGMP消息通过IP数据报的形式传输,IP协议号为2。以下是IGMP消息的通用格式:

IGMPv1和IGMPv2消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Max Resp Time | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Group Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type:8位,表示IGMP消息的类型。
    • 0x11:成员查询(Membership Query)
    • 0x12:成员报告(Membership Report,IGMPv1)
    • 0x16:成员报告(Membership Report,IGMPv2)
    • 0x17:离开组(Leave Group,IGMPv2)
  • Max Resp Time:8位,最大响应时间,仅在查询消息中使用。
  • Checksum:16位,校验和,用于检测消息错误。
  • Group Address:32位,多播组地址。
IGMPv3消息格式
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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Type | Max Resp Code | Checksum |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Group Address |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Resv |S| QRV | QQIC | Number of Sources (N) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [1] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [2] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Source Address [N] |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type:8位,表示IGMP消息的类型。
    • 0x11:一般查询(General Query)
    • 0x22:成员报告(Membership Report,IGMPv3)
  • Max Resp Code:8位,最大响应时间编码。
  • Checksum:16位,校验和,用于检测消息错误。
  • Group Address:32位,多播组地址。
  • Resv:4位,保留位。
  • S:1位,抑制码。
  • QRV:3位,查询者响应值。
  • QQIC:8位,查询间隔码。
  • Number of Sources (N):16位,源地址数量。
  • Source Address [1..N]:每个源地址为32位。

IGMP操作

  1. 加入多播组

    • 主机发送成员报告消息,通知本地路由器其加入多播组。
  2. 查询和报告

    • 路由器定期发送查询消息,询问是否有主机仍然是多播组成员。
    • 主机在收到查询消息后,响应成员报告消息,以维持其在多播组中的成员身份。
  3. 离开多播组

    • 主机发送离开组消息,通知本地路由器其离开多播组(仅IGMPv2和IGMPv3)。
  4. 源特定多播(IGMPv3)

    • 主机可以指定其感兴趣的多播源,进一步优化多播流量的传递。

IGMP消息示例

  1. IGMPv2加入多播组

    主机发送成员报告消息:

    Type: 0x16 (Membership Report)
    Group Address: 224.1.1.1
  2. IGMPv2离开多播组

    主机发送离开组消息:

    Type: 0x17 (Leave Group)
    Group Address: 224.1.1.1
  3. IGMPv3源特定多播

    主机发送成员报告消息,指定源地址:

    Type: 0x22 (Membership Report)
    Group Address: 232.1.1.1
    Number of Sources: 2
    Source Address [1]: 192.0.2.1
    Source Address [2]: 198.51.100.1

ARP协议介绍

概述

ARP(Address Resolution Protocol,地址解析协议)是用于解析网络层地址(如IPv4地址)和链路层地址(如MAC地址)之间映射关系的协议。ARP在IPv4网络中尤为重要,它使得设备能够在同一局域网(LAN)内通过IP地址找到对应的物理MAC地址,从而实现数据帧的正确传输。

ARP的主要功能

  1. 地址解析:将目标设备的IP地址解析为对应的MAC地址。
  2. 缓存管理:维护一个ARP缓存,用于存储最近解析的IP-MAC地址对,以减少频繁的ARP请求。
  3. 逆地址解析(RARP):通过RARP协议(Reverse ARP)实现MAC地址到IP地址的解析,但RARP现已基本被DHCP取代。

ARP报文格式

ARP报文包含请求报文和应答报文。以下是ARP报文的通用格式:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 硬件类型 (HTYPE) | 协议类型 (PTYPE) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 硬件地址长度 (HLEN) | 协议地址长度 (PLEN) | 操作 (OPER) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 发送方硬件地址 (SHA) (前两个字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 发送方硬件地址 (SHA) (后三个字节) |
| 发送方协议地址 (SPA) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目标硬件地址 (THA) (前两个字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目标硬件地址 (THA) (后三个字节) |
| 目标协议地址 (TPA) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段详细描述

  • 硬件类型 (HTYPE): 16位

    • 表示网络硬件类型,例如以太网为1。
  • 协议类型 (PTYPE): 16位

    • 表示要解析的协议地址类型,例如IPv4为0x0800, IPv6为0x86DD, ARP不直接用于IPv6,IPv6使用Neighbor Discovery Protocol(NDP)代替ARP。
  • 硬件地址长度 (HLEN): 8位

    • 表示硬件地址的长度(以字节为单位),例如以太网地址长度为6。
  • 协议地址长度 (PLEN): 8位

    • 表示协议地址的长度(以字节为单位),例如IPv4地址长度为4。
  • 操作 (OPER): 16位

    • 表示操作类型:
      • 1:ARP请求
      • 2:ARP应答
      • 3:RARP请求
      • 4:RARP应答
  • 发送方硬件地址 (SHA): 可变长度

    • 发送方的硬件地址(MAC地址)。
  • 发送方协议地址 (SPA): 可变长度

    • 发送方的协议地址(IP地址)。
  • 目标硬件地址 (THA): 可变长度

    • 目标的硬件地址(MAC地址),在ARP请求中为0。
  • 目标协议地址 (TPA): 可变长度

    • 目标的协议地址(IP地址)。

ARP操作

  1. ARP请求

    当一个设备需要发送数据到另一个设备时,首先会检查本地ARP缓存是否有目标IP地址对应的MAC地址。如果没有,它会广播一个ARP请求消息,询问网络中的其他设备目标IP地址的MAC地址。

    Sender (A) -> Broadcast: ARP Request "Who has IP 192.168.1.2? Tell 192.168.1.1"
  2. ARP应答

    接收到ARP请求的设备如果匹配请求中的目标IP地址,它会发送一个ARP应答消息,包含自己的MAC地址,回应请求设备。

    Receiver (B) -> Sender (A): ARP Reply "192.168.1.2 is at MAC 00:0a:95:9d:68:16"
  3. 更新ARP缓存

    收到ARP应答后,请求设备会将目标设备的IP-MAC地址对存储在本地的ARP缓存中,以便下次通信时直接使用。

ARP通信示例

假设主机A(IP地址:192.168.1.1,MAC地址:00:0a:95:9d:68:16)需要与主机B(IP地址:192.168.1.2,MAC地址:00:0b:46:fe:91:22)通信,但A没有B的MAC地址。

  1. 主机A发送ARP请求

    Ethernet Header:
    - Destination MAC: FF:FF:FF:FF:FF:FF (广播)
    - Source MAC: 00:0a:95:9d:68:16
    - Ethertype: 0x0806 (ARP)
    ARP Header:
    - HTYPE: 1 (Ethernet)
    - PTYPE: 0x0800 (IPv4)
    - HLEN: 6
    - PLEN: 4
    - OPER: 1 (ARP Request)
    - SHA: 00:0a:95:9d:68:16
    - SPA: 192.168.1.1
    - THA: 00:00:00:00:00:00
    - TPA: 192.168.1.2
  2. 主机B发送ARP应答

    Ethernet Header:
    - Destination MAC: 00:0a:95:9d:68:16 (主机A的MAC地址)
    - Source MAC: 00:0b:46:fe:91:22
    - Ethertype: 0x0806 (ARP)
    ARP Header:
    - HTYPE: 1 (Ethernet)
    - PTYPE: 0x0800 (IPv4)
    - HLEN: 6
    - PLEN: 4
    - OPER: 2 (ARP Reply)
    - SHA: 00:0b:46:fe:91:22
    - SPA: 192.168.1.2
    - THA: 00:0a:95:9d:68:16
    - TPA: 192.168.1.1

ARP缓存示例

主机A在收到主机B的ARP应答后,会将其存储在ARP缓存中,以便快速访问。

IP Address MAC Address
192.168.1.2 00:0b:46:fe:91:22

RARP协议介绍

概述

RARP(Reverse Address Resolution Protocol,逆地址解析协议)是一种网络协议,用于在局域网(LAN)中将物理地址(MAC地址)映射为IP地址。RARP是ARP(Address Resolution Protocol)的逆操作,主要用于无盘工作站或网络设备,这些设备在启动时没有IP地址,只知道自己的MAC地址。

RARP的主要功能

  1. 逆地址解析:将设备的MAC地址解析为对应的IP地址。
  2. 支持无盘工作站:在无盘工作站启动时,通过RARP获取IP地址,便于后续网络通信和引导操作系统。

RARP报文格式

RARP报文格式与ARP报文类似,包含以下字段:

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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 硬件类型 (HTYPE) | 协议类型 (PTYPE) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 硬件地址长度 (HLEN) | 协议地址长度 (PLEN) | 操作 (OPER) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 发送方硬件地址 (SHA) (前两个字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 发送方硬件地址 (SHA) (后三个字节) |
| 发送方协议地址 (SPA) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目标硬件地址 (THA) (前两个字节) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 目标硬件地址 (THA) (后三个字节) |
| 目标协议地址 (TPA) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段详细描述

  • 硬件类型 (HTYPE): 16位

    • 表示网络硬件类型,例如以太网为1。
  • 协议类型 (PTYPE): 16位

    • 表示要解析的协议地址类型,例如IPv4为0x0800。
  • 硬件地址长度 (HLEN): 8位

    • 表示硬件地址的长度(以字节为单位),例如MAC地址长度为6。
  • 协议地址长度 (PLEN): 8位

    • 表示协议地址的长度(以字节为单位),例如IPv4地址长度为4。
  • 操作 (OPER): 16位

    • 表示操作类型:
      • 3:RARP请求
      • 4:RARP应答
  • 发送方硬件地址 (SHA): 可变长度

    • 发送方的硬件地址(MAC地址)。
  • 发送方协议地址 (SPA): 可变长度

    • 发送方的协议地址(IP地址)。
  • 目标硬件地址 (THA): 可变长度

    • 目标的硬件地址(MAC地址),在RARP请求中为0。
  • 目标协议地址 (TPA): 可变长度

    • 目标的协议地址(IP地址)。

RARP操作

  1. RARP请求

    当一个设备(如无盘工作站)启动时,它会发送一个RARP请求消息,广播其MAC地址,请求网络中的RARP服务器返回对应的IP地址。

    Sender (A) -> Broadcast: RARP Request "Who has MAC 00:0a:95:9d:68:16? Tell 00:0a:95:9d:68:16"
  2. RARP应答

    网络中的RARP服务器收到请求后,会查询本地的映射表,并返回包含对应IP地址的RARP应答消息。

    RARP Server -> Sender (A): RARP Reply "MAC 00:0a:95:9d:68:16 is at IP 192.168.1.2"

RARP通信示例

假设一个无盘工作站(MAC地址:00:0a:95:9d:68:16)启动时没有IP地址,需要通过RARP获取IP地址。

  1. 无盘工作站发送RARP请求

    Ethernet Header:
    - Destination MAC: FF:FF:FF:FF:FF:FF (广播)
    - Source MAC: 00:0a:95:9d:68:16
    - Ethertype: 0x8035 (RARP)
    RARP Header:
    - HTYPE: 1 (Ethernet)
    - PTYPE: 0x0800 (IPv4)
    - HLEN: 6
    - PLEN: 4
    - OPER: 3 (RARP Request)
    - SHA: 00:0a:95:9d:68:16
    - SPA: 0.0.0.0
    - THA: 00:0a:95:9d:68:16
    - TPA: 0.0.0.0
  2. RARP服务器发送RARP应答

    Ethernet Header:
    - Destination MAC: 00:0a:95:9d:68:16
    - Source MAC: 00:0b:46:fe:91:22
    - Ethertype: 0x8035 (RARP)
    RARP Header:
    - HTYPE: 1 (Ethernet)
    - PTYPE: 0x0800 (IPv4)
    - HLEN: 6
    - PLEN: 4
    - OPER: 4 (RARP Reply)
    - SHA: 00:0b:46:fe:91:22
    - SPA: 192.168.1.1
    - THA: 00:0a:95:9d:68:16
    - TPA: 192.168.1.2

RARP的限制和替代

  1. 限制

    • 静态配置:RARP服务器需要预先配置静态的MAC到IP地址映射表。
    • 局限性:RARP仅提供IP地址,不提供其他配置信息(如网关、子网掩码、DNS服务器等)。
  2. 替代协议

    • BOOTP:提供更丰富的配置选项,能够动态分配IP地址,并提供引导文件名等信息。
    • DHCP:基于BOOTP,提供更多的动态配置选项,成为最广泛使用的地址分配和配置协议。