Skip to content

网络层

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

  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 报文由头部和数据部分组成。头部长度为 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)

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

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

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

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

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

优点

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

缺点

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

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

优点

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

缺点

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

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

优点

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

缺点

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

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

优点

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

缺点

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

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

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

Client -> Broadcast: DHCP Discover

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

DHCP Server -> Broadcast: DHCP Offer

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

Client -> Broadcast: DHCP Request

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

DHCP Server -> Broadcast: DHCP ACK

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

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

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 的工作流程包括以下步骤:

  1. 客户端请求 (BOOTREQUEST)

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

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

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

  1. 自动配置

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

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

    • BOOTP:选项支持有限,功能较为简单。
    • DHCP:支持丰富的选项,提供更多的配置信息(如 DNS 服务器、默认网关等)。
  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
  1. 地址枯竭:IPv4 地址空间有限,无法满足日益增长的网络设备需求。
  2. 安全性:IPv4 本身缺乏内置的安全机制,需依赖其他协议(如 IPsec)进行保护。
  3. 效率:分片和重组过程复杂,影响网络性能。

为了应对 IPv4 的局限性,IPv6 协议应运而生。IPv6 具有 128 位地址空间,提供了更大的地址容量和改进的扩展头机制;安全保护仍依赖 IPsec、TLS 等单独协议和具体部署。但 IPv4 和 IPv6 的共存和过渡仍是一个长期的过程。

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

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

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

常见的单播地址类型:

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

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

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

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

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

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

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

多播地址范围:

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

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

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

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

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

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 值及其对应协议或扩展头部类型

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

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

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

以下是一个包含多个扩展头部的 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 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 头部。
  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 使用扩展头部机制,灵活支持新功能和改进。

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

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

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

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
    • 用途:路由器发送重定向消息,通知主机更优的路由路径。
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:可选字段,例如源链路层地址
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:可选字段,例如源链路层地址、前缀信息等
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:可选字段,例如源链路层地址
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:可选字段,例如源链路层地址
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:可选字段,例如源链路层地址
  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)

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 消息在其内部网络中发布这些前缀,使内部设备能够使用这些前缀进行地址自动配置。

  1. Solicit(请求)

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

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

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

    • ISP 路由器发送 Reply 消息,分配前缀并将其发送给客户边界路由器。
Solicit、Advertise、Request 和 Reply 消息格式
Section titled “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)选项格式
Section titled “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(前缀信息选项)格式
Section titled “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)

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

  1. 快速部署 IPv6:利用现有的 IPv4 基础设施快速部署 IPv6,减少网络升级的复杂性和成本。
  2. 隧道机制:在 IPv4 网络中创建 IPv6 隧道,允许 IPv6 数据包在 IPv4 网络上传输。
  3. 自动配置:通过 DHCPv4 分配 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 协议通过选项 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 地址。
  1. DHCPv4 服务器配置

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

  2. 客户端请求

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

  3. DHCPv4 服务器响应

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

  4. 客户端配置 6RD 隧道

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

假设 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;
}

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

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

  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(Stateless Address Autoconfiguration)过程中,主要使用 ICMPv6 报文,包括路由器请求(Router Solicitation, RS)和路由器广告(Router Advertisement, 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Reserved |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Options ...
+-+-+-+-+-+-+-+-+-+-+-+-
  • Type : 133 (表示 Router Solicitation)
  • Code : 0
  • Checksum : 16 位的 ICMP 校验和
  • Reserved : 32 位保留字段,设置为 0
  • Options : 可选字段,例如源链路层地址(Source Link-Layer 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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 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)
Section titled “M 标志(Managed address configuration flag)”
  • M 标志用于指示是否应该使用 DHCPv6 获取 IPv6 地址。
  • M = 1:设备应使用 DHCPv6 来获取其 IPv6 地址。这意味着网络中的 DHCPv6 服务器将分配 IPv6 地址给设备。
  • M = 0:设备不需要使用 DHCPv6 来获取 IPv6 地址,可以使用 SLAAC(无状态地址自动配置)来生成 IPv6 地址。
  • 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(前缀信息选项)

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

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

DHCPv6 使用的组播地址

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

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

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

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

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 选项及其格式:

  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 消息,寻找可用的 DHCPv6 服务器。

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

服务器响应 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 消息,请求具体的配置参数和地址。

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

服务器响应 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

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): 域名搜索列表。

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

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

Client Server
|-- Solicit ----------------------------->|
| |

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

Client Server
|<-- Advertise ---------------------------|
| |

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

Client Server
|-- Request ----------------------------->|
| |

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

Client Server
|<-- Reply ------------------------------|
| |
  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
  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

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

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

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

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

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 消息类型不同而不同。
  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 位。
  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(Internet Group Management Protocol,互联网组管理协议)是一种用于管理 IP 多播组成员的网络层协议。它用于在 IP 网络中实现多播通信,允许多个主机加入或离开特定的多播组,进而使数据包只发送给多播组中的成员,从而提高网络效率。

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

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

  1. IGMPv1

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

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

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

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

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 位,多播组地址。
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 位。
  1. 加入多播组

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

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

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

    • 主机可以指定其感兴趣的多播源,进一步优化多播流量的传递。
  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(Address Resolution Protocol,地址解析协议)是用于解析网络层地址(如 IPv4 地址)和链路层地址(如 MAC 地址)之间映射关系的协议。ARP 在 IPv4 网络中尤为重要,它使得设备能够在同一局域网(LAN)内通过 IP 地址找到对应的物理 MAC 地址,从而实现数据帧的正确传输。

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

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 地址)。
  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 缓存中,以便下次通信时直接使用。

假设主机 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

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

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

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

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

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 地址)。
  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"

假设一个无盘工作站(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
  1. 限制

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

    • BOOTP:提供更丰富的配置选项,能够动态分配 IP 地址,并提供引导文件名等信息。
    • DHCP:基于 BOOTP,提供更多的动态配置选项,成为最广泛使用的地址分配和配置协议。
  1. RFC 8200: internet Protocol, Version 6 (IPv6) Specification(访问日期:2026-05-31)
  2. RFC 4301: Security Architecture for the internet Protocol(访问日期:2026-05-31)
  3. RFC 9260: Stream Control Transmission Protocol(访问日期:2026-05-31)