【IPv6】IPV6 SLAAC地址分配过程及抓包分析

IPv6 SLAAC(无状态自动配置)

       主机可以通过RA(Router-Advertisement)消息ICMP type134中携带的前缀得到地址的前缀部分,同时通过该接口自动生成接口ID部分,从而得到一个完整的128位的IPV6地址,该消息默认情况下每200S发送一次。当然主机(或路由器)也可以主动发送RS(Router Solicit)消息ICMP Type=133来主动请求该前缀。

IPv6 SLAAC地址分配过程抓包分析

PC RS报文获取地址前缀,Type类型133

        为配置接口,主机需要前缀信息(类似于IPV4地址的网络部分),因此它会发送一条路由器请求(RouterSolicitation,RS)消息。该消息以组播方式发送给所有路由器。这实际上是一种ICMP消息,并用编号进行标识。PC发送RS(Router Solicitation)给到本地节点,所有路由器组播地址FF02::2,源地址和目的地址如下红色字体。

 Internet Protocol Version 6, Src: fe80::6d87:f0b:1be3:9972, Dst: ff02::2
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
        .... 0000 00.. .... .... .... .... .... = Differentiated Services Codepoint: Default (0)
        .... .... ..00 .... .... .... .... .... = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 16
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: fe80::6d87:f0b:1be3:9972
    Destination Address: ff02::2

Frame 335: 70 bytes on wire (560 bits), 70 bytes captured (560 bits)
Ethernet II, Src: 26:fc:27:b4:a6:a1 (26:fc:27:b4:a6:a1), Dst: IPv6mcast_02 (33:33:00:00:00:02)
Internet Protocol Version 6, Src: fe80::6d87:f0b:1be3:9972, Dst: ff02::2
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
        .... 0000 00.. .... .... .... .... .... = Differentiated Services Codepoint: Default (0)
        .... .... ..00 .... .... .... .... .... = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 16
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: fe80::6d87:f0b:1be3:9972
    Destination Address: ff02::2
Internet Control Message Protocol v6
    Type: Router Solicitation (133)
    Code: 0
    Checksum: 0x54f4 [correct]
    [Checksum Status: Good]
    Reserved: 00000000
    ICMPv6 Option (Source link-layer address : 26:fc:27:b4:a6:a1)
        Type: Source link-layer address (1)
        Length: 1 (8 bytes)
        Link-layer address: 26:fc:27:b4:a6:a1 (26:fc:27:b4:a6:a1)

路由设备回复RA,Type类型134

       路由器使用一条路由器通告(Router-Advertisement,RA)消息进行应答,其中包含请求的前级信息。RA消息也是组播分组,被发送到表示所有节点的组播地址,其ICMP类型为134。RA消息是定期发送的,但主机发送RS消息后,可立即得到响应,因此无需等待下一条定期发送的RA消息,就能获得所需的信息。

Frame 336: 158 bytes on wire (1264 bits), 158 bytes captured (1264 bits)
Ethernet II, Src: 96:ab:fd:96:d0:7d (96:ab:fd:96:d0:7d), Dst: 26:fc:27:b4:a6:a1 (26:fc:27:b4:a6:a1)
Internet Protocol Version 6, Src: fe80::a9f1:df9b:a5f6:b82d, Dst: fe80::6d87:f0b:1be3:9972
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
        .... 0000 00.. .... .... .... .... .... = Differentiated Services Codepoint: Default (0)
        .... .... ..00 .... .... .... .... .... = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 104
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: fe80::a9f1:df9b:a5f6:b82d
    Destination Address: fe80::6d87:f0b:1be3:9972
Internet Control Message Protocol v6
    Type: Router Advertisement (134)
    Code: 0
    Checksum: 0x23f9 [correct]
    [Checksum Status: Good]
    Cur hop limit: 255
    Flags: 0x40, Other configuration, Prf (Default Router Preference): Medium
    Router lifetime (s): 65535
    Reachable time (ms): 0
    Retrans timer (ms): 0
    ICMPv6 Option (Source link-layer address : 96:ab:fd:96:d0:7d)
        Type: Source link-layer address (1)
        Length: 1 (8 bytes)
        Link-layer address: 96:ab:fd:96:d0:7d (96:ab:fd:96:d0:7d)
    ICMPv6 Option (MTU : 1500)
        Type: MTU (5)
        Length: 1 (8 bytes)
        Reserved
        MTU: 1500
    ICMPv6 Option (Prefix information : 2408:8456:3204:dd45::/64)
        Type: Prefix information (3)
        Length: 4 (32 bytes)
        Prefix Length: 64
        Flag: 0xc0, On-link flag(L), Autonomous address-configuration flag(A)
        Valid Lifetime: Infinity (4294967295)
        Preferred Lifetime: Infinity (4294967295)
        Reserved
        Prefix: 2408:8456:3204:dd45::
    ICMPv6 Option (Recursive DNS Server fe80::94ab:fdff:fe93:cd7a fe80::94ab:fdff:fe93:cd7a)
        Type: Recursive DNS Server (25)
        Length: 5 (40 bytes)
        Reserved
        Lifetime: Infinity (4294967295)
        Recursive DNS Servers: fe80::94ab:fdff:fe93:cd7a
        Recursive DNS Servers: fe80::94ab:fdff:fe93:cd7a

路由分配地址发送NS,消息类型Type=135,PC回复NA,消息类型Type=136

NS ,Type=135,分配地址2408:8456:3204:dd45:a5c2:1725:60cf:de87

 Internet Protocol Version 6, Src: fe80::a9f1:df9b:a5f6:b82d, Dst: ff02::1:ffcf:de87
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
        .... 0000 00.. .... .... .... .... .... = Differentiated Services Codepoint: Default (0)
        .... .... ..00 .... .... .... .... .... = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 32
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: fe80::a9f1:df9b:a5f6:b82d
    Destination Address: ff02::1:ffcf:de87

Frame 341: 86 bytes on wire (688 bits), 86 bytes captured (688 bits)
Ethernet II, Src: 96:ab:fd:96:d0:7d (96:ab:fd:96:d0:7d), Dst: IPv6mcast_ff:cf:de:87 (33:33:ff:cf:de:87)
Internet Protocol Version 6, Src: fe80::a9f1:df9b:a5f6:b82d, Dst: ff02::1:ffcf:de87
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
        .... 0000 00.. .... .... .... .... .... = Differentiated Services Codepoint: Default (0)
        .... .... ..00 .... .... .... .... .... = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 32
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: fe80::a9f1:df9b:a5f6:b82d
    Destination Address: ff02::1:ffcf:de87
Internet Control Message Protocol v6
    Type: Neighbor Solicitation (135)
    Code: 0
    Checksum: 0x9b6d [correct]
    [Checksum Status: Good]
    Reserved: 00000000
    Target Address: 2408:8456:3204:dd45:a5c2:1725:60cf:de87
    ICMPv6 Option (Source link-layer address : 96:ab:fd:96:d0:7d)
        Type: Source link-layer address (1)
        Length: 1 (8 bytes)
        Link-layer address: 96:ab:fd:96:d0:7d (96:ab:fd:96:d0:7d)

NA,Type=136,PC回复使用地址2408:8456:3204:dd45:a5c2:1725:60cf:de87

Internet Protocol Version 6, Src: 2408:8456:3204:dd45:a5c2:1725:60cf:de87, Dst: fe80::a9f1:df9b:a5f6:b82d
    0110 .... = Version: 6
    .... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
        .... 0000 00.. .... .... .... .... .... = Differentiated Services Codepoint: Default (0)
        .... .... ..00 .... .... .... .... .... = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    .... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
    Payload Length: 32
    Next Header: ICMPv6 (58)
    Hop Limit: 255
    Source Address: 2408:8456:3204:dd45:a5c2:1725:60cf:de87
    Destination Address: fe80::a9f1:df9b:a5f6:b82d
Internet Control Message Protocol v6
    Type: Neighbor Advertisement (136)
    Code: 0
    Checksum: 0xd24f [correct]
    [Checksum Status: Good]
    Flags: 0x60000000, Solicited, Override
        0... .... .... .... .... .... .... .... = Router: Not set
        .1.. .... .... .... .... .... .... .... = Solicited: Set
        ..1. .... .... .... .... .... .... .... = Override: Set
        ...0 0000 0000 0000 0000 0000 0000 0000 = Reserved: 0
    Target Address: 2408:8456:3204:dd45:a5c2:1725:60cf:de87
    ICMPv6 Option (Target link-layer address : 26:fc:27:b4:a6:a1)
        Type: Target link-layer address (2)
        Length: 1 (8 bytes)
        Link-layer address: 26:fc:27:b4:a6:a1 (26:fc:27:b4:a6:a1)

地址分配过程




 

### Stateless Address Autoconfiguration (SLAAC) 的概述 Stateless Address Autoconfiguration (SLAAC) 是一种用于 IPv6 网络中的主机自动生成全球唯一 IP 地址的方法[^1]。通过路由器发送的 Router Advertisement (RA) 报文,主机可以获取网络前缀信息并结合接口标识符(Interface Identifier),生成完整的 IPv6 地址。 #### RA 报文的作用 RA 报文中包含了重要的网络配置参数,例如 Prefix 前缀、跳数限制(Hop Limit)、DNS 服务器地址等信息。这些信息允许主机无需依赖 DHCPv6 协议即可完成基本的网络配置。 #### 地址生成机制 在 SLAAC 中,IPv6 地址由两部分构成: - **Prefix**: 来自于 RA 报文中的 Network Prefix 字段,通常为 /64 子网掩码长度。 - **Interface Identifier**: 可以基于扩展唯一标识符 EUI-64 或随机生成的方式创建。 如果使用 EUI-64 方法,则会利用 MAC 地址转换成唯一的 Interface Identifier;而另一种方法则是完全随机生成该字段,从而增强隐私保护能力。 #### 启用 SLAAC 功能的前提条件 为了使 SLAAC 正常工作,在路由器上必须启用 `ipv6 unicast-routing` 全局命令来支持路由通告功能[^3]。如果没有此设置,即使客户端接收到 RA 数据包也无法实现自动配置过程。 ### Deprecated 和 Preferred 地址状态 除了理解如何构建地址外,还需要注意两种可能影响实际使用的状态标记:“Deprecated” 表明某个特定时间段之后不应再继续使用某地址作为源地址发出新连接请求;“Preferred” 则表示当前推荐优先选用的状态良好可用地址[^2]。 ```python # Python 示例代码展示如何解析RA消息并提取prefix信息 import socket import struct def parse_router_advertisement(data): # 解析ICMPv6头部和Router Advertisement数据结构 icmp_type, code, checksum = struct.unpack('!BBH', data[:4]) if icmp_type != 134: # ICMPv6 Type for Router Advertisement is 134 raise ValueError("Not a valid Router Advertisement message") prefix_info_offset = find_prefix_information_field(data) prefix_length, flags, valid_lifetime, preferred_lifetime = \ struct.unpack_from('!BBBB', data[prefix_info_offset:]) return { 'prefix': extract_ipv6_prefix(data, prefix_info_offset), 'valid_lifetime': valid_lifetime, 'preferred_lifetime': preferred_lifetime } def extract_ipv6_prefix(data, offset): start = offset + 8 # Skip over other fields before actual prefix bytes. raw_bytes = data[start:start+16] return ':'.join([f'{raw_bytes[i]:02x}{raw_bytes[i+1]:02x}' for i in range(0, len(raw_bytes), 2)]) data = b'\n\x86\xfe@\x00\x0e\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' parsed_data = parse_router_advertisement(data) print(f"Parsed Prefix Info: {parsed_data}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wellnw

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值