IPv6无状态自动获取和DAD实验_第1张图片

R1作为网关,配置IPv6地址,R2作为客户端无状态获取IP

1      配置

R1配置如下:

#

ipv6

#

interface GigabitEthernet0/0/0

ipv6 enable

 ipv6 address 2002::1/64

 undo ipv6 nd ra halt

# undo ipv6 nd ra halt命令用来使能系统发布RA报文功能,重要配置

R2配置如下:

#

ipv6

#

interface GigabitEthernet0/0/0

ipv6 enable

ipv6 address auto global

#自动获取全局地址

2      验证

2.1    R1的链路本地地址、全球单播地址、组播地址

R1的接口MAC地址为00E0-FC56-0620

IPv6无状态自动获取和DAD实验_第2张图片

R1手动配置了IPv6地址2002::1/64,自动生成了link-local地址FE80::2E0:FCFF:FE56:620.

IPv6无状态自动获取和DAD实验_第3张图片

Link-local自动生成

1.        Mac地址生成EUI64,将FFFE插入到厂商ID(24bit)和扩展ID之间(24bit),EUI64为:00E0-FCFF-FE56-0620;

2.        第7位反转为1,变为02E0-FCFF-FE56-0620;即00E0的前2个00(00000000)变为02(00000010);

3.        加上Link-local固定前缀特定前缀FE80::/10,即为FE80::02E0:FCFF:FE56:0620,精简为FE80::2E0:FCFF:FE56:620.

全球单播地址为手动配置

2002::1/64

组播地址为自动生成

全球单播地址的被请求节点组播地址FF02::1::FF00:1,由固定前缀FF02::1FF00:0/104和单播地址的最后24位::1组成;

链路本地地址的被请求节点组播地址FF02::1:FF56:620,由固定前缀FF02::100:0/104和单播地址的最好24位56:0620组成。

FF02::1所有节点的组播地址,FF02::2所有路由器组播地址

2.2    R2的链路本地地址、全球单播地址、组播地址

R2的MAC:00E0-FC6C-416B

IPv6无状态自动获取和DAD实验_第4张图片

R2的Ipv6位无状态自动生成,链路本地地址为EUI64自动生成

IPv6无状态自动获取和DAD实验_第5张图片

Link-local自动生成:

同R1的生成规则,R2的link-local地址为FE80::2E0:FCFF:FE6C:416B.

全球单播地址为无状态自动配置

Display上显示为SLAAC,生成方式为路由器R1的前缀+EUI64

2002::2E0:FCFF:FE6C:416B.

组播地址为自动生成

全球单播地址和链路本地地址的被请求节点组播地址FF02::1:FF6C:416B,由固定前缀FF02::1FF00:0/104和单播地址的最后24位6C:416B组成;

FF02::1所有节点的组播地址,FF02::2所有路由器组播地址

3      抓包分析

3.1    R2生成link-local地址进行DAD(重复地址检测)

IPv6无状态自动获取和DAD实验_第6张图片

如上图:

R2主机生成link-local地址后进行DAD时就会发送RS(router solicitation )消息,

1.        二层封装:源MAC为R2的接口MAC:00E0-FC6C-416B,目的MAC为目的IPv6地址的组播MAC:3333-FF6C-416B,(组播MAC为33:33+目的IP的后32位)

2.        三层封装:IPv6的Next Header=58(ICMPv6),源IP为未指定IP(::),目的IP为被请求组播地址FF02::1:FF6C:416B(由固定的前缀FF02::1:FF00:0/104和单播地址的最后24位组成)

3.        ICMPv6消息,Type=135(NS),Target Address为R2的link-local ip:FE80::2E0:FCFF:FE6C:416B.

4.        一段时间后R2没有收到NA报文,使用该IPv6地址作为本地链路地址。

3.2    R2无状态自动获取global地址

R2发送RS消息,请求路由器信息

IPv6无状态自动获取和DAD实验_第7张图片

如上图

1.        源MAC是自己的接口MAC,目的MAC是目的IPv6的组播MAC(3333-0000-0001)

2.        源IP是自己link-local IP,目的IP是所有节点的组播IP(FF02::1)

3.        ICMPv6的Type=133(RS),ICMPv6的Option的携带源链路层地址为接口的MAC地址。

R1回复RA消息

IPv6无状态自动获取和DAD实验_第8张图片

如上图:

1.        源MAC是自己的接口MAC,目的MAC是IPv6目的的组播MAC

2.        源IP是link-local IP,目的IP是所有节点的组播IP(FF02::1)

3.        ICMPv6的Type=134(NA),Cur Hop Limit=64(类似TTL),M位=0,表示使用无状态配置,O位=0,表示DHCPv6服务器没有可用信息,即所有信息都通过无状态获取。

4.        Router Lifetime=1800,单位S,表示主机把该路由器当作默认网关的有效时间,Reachable Time=0,表示通告邻居可达时间没有指定,Retrans Timer=0表示重传计时器未指定。

5.        ICMPv6的Option (TLV格式)的源链路地址为本地的接口MAC

6.        ICMPv6的Option(TLV格式)前缀信息:64位,前缀2002::,Flag:自动配置置位,Valid Lifetime=2592000,30天有效生存期,Preferred lifetime=604800,7天的优选生存期

R2拿到global IP后继续进行DAD

IPv6无状态自动获取和DAD实验_第9张图片

如上图:

R2主机生成global地址后进行DAD时就会发送RS(router solicitation )消息,

1.        二层封装:源MAC为R2的接口MAC,目的MAC为目的IPv6地址的组播MAC

2.        三层封装:IPv6的Next Header=58(ICMPv6),源IP为未指定IP(::),目的IP为被请求组播地址FF02::1:FF6C:416B(由固定的前缀FF02::1:FF00:0/104和单播地址的最后24位组成)

3.        ICMPv6消息,Type=135(NS),Target Address为R2的global ip:2002::2E0:FCFF:FE6C:416B.

4.        一段时间后R2没有收到NA报文,使用该IPv6地址作为global地址。

4      总结

1.        本地链路地址生成方式:固定前缀(FE80::/10)+EUI64,EUI64=MAC前24位+FFFE+MAC后24位,然后第7位反转;

2.        DAD(重复地址检测)消息通过ICMPv6 Type=135的NS(Neighbor Solicitation)邻居请求消息实现,类似IPv4的免费ARP;源MAC为本地接口MAC,目的MAC为目的IP的组播MAC,源IP为未指定IP(::),目的IP为本地即将使用的IP的被请求节点组播IP,target address为即将使用的IP

3.        无状态自动获取客户端发送RS(router solicitation,路由请求)消息,源MAC是自己的接口MAC,目的MAC是IPv6目的IP的组播MAC,源IP是link-local IP或者未指定(::),目的IP是所有节点的组播IP(FF02::1)或者所有路由器(FF02::2),Option包括接口的源链路层地址(MAC地址)

4.        路由器回复RA(router advertisement,路由通告)消息,源MAC自己接口MAC,目的MAC为目的IP的组播MAC,源IP为发出消息接口的Link Local地址,目的为FF02::1(所有节点),flag里M不置位,值为0,代表通过无状态自动获取,O根据具体情况置位(不置位,即值为0代表其他信息也通过无状态获取,置位1代表其他参数使用DHCPv6服务器获取),携带两个Option(TLV格式),一个是源链路层地址Option(指明链路层地址),另一个前缀信息Option,包括前缀和前缀长度,flag,有效生存期和优选生存期。