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
R1手动配置了IPv6地址2002::1/64,自动生成了link-local地址FE80::2E0:FCFF:FE56:620.
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
R2的Ipv6位无状态自动生成,链路本地地址为EUI64自动生成
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(重复地址检测)
如上图:
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消息,请求路由器信息。
如上图
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消息:
如上图:
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
如上图:
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,有效生存期和优选生存期。