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位地址空间,提供了更大的地址容量和改进的功能,如内置安全性和更高效的路由。但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,提供更多的动态配置选项,成为最广泛使用的地址分配和配置协议。