1 IPV6的基本组成
(1)、IPV6有128位(128bit),基本组成方式为:网络ID+接口ID,IPV6地址=前缀+接口标识(接口ID具有唯一性,由设备自动生成,MAC唯一,因此接口ID唯一,前缀的表示方法:通过砸IPV6地址后面加一个斜线/,再跟一个十进制的数字来标识一个IPV6地址的起始位有多少位是前缀位,一般前缀为64位,如:3ffe:1994:100:a::/64)
(2)、IPV6若是用16进制表示的话,地址被分为8段,每16位为一段,中间用':'隔开,如: X:X:X:X:X:X:X:X(X 表示一个4位16进制数)
(3)、IPV6中前导0可以删除,但是每段至少要有一个数字,如:2001:DB8:0:0:8:800:200C:417A
(4)、多个连续为0的段可以用::表示,如:2001:0DB8::8:800:200C:417A
(5)、若是全部为0可以直接用::表示,如:0:0:0:0:0:0:0:0=>::
(6)、在一个IPV6地址中,只允许使用一次“::”,不能把有效的0压缩
(7)、没有广播地址
2 IPV6地址分类
- 全球单播地址 global unicast address, 公网ip 相当于 nd proxy (对应 ipv4的 floating ip)
- 虚机ipv6 unique local地址(唯一本地地址 私网ip)是dhcp 请求openflow 下发的。
- 虚机ipv6 linklocal地址
3 流表、报文
3.1 RS RA 相关流表
RS(Router Solicitation)路由请求报文 RA(Router Advertisement)路由通告报文 相关流表
传统用法:
路由器发现功能用来发现与本地链路相连的设备,并获取与地址自动配置相关的前缀和其他配置参数。
也就是RS RA 是用来进行地址自动配置的。在IPv6中,
- IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。
路由器发现功能是IPv6地址自动配置功能的基础,主要通过RS RA两种报文实现。 - DHCPv6属于带状态地址配置。
从上图可以看出有2种,一种网关设备定时给虚机发组播RA报文;另一种虚机主动发RS,网关回RA。
3.1.1 RA 相关流表
RA(Router Advertisement) 路由通告报文 组播报文 icmp_type=134
功能:租户网关loop口定时发送,同VPC下所有虚机都可以收到
3.1.2 RS 相关流表
RS(Router Solicitation) 路由请求报文 组播报文 icmp_type=133
功能:虚机发出的RS请求报文默认全部送到租户网关,报文中源地址是虚机的linklocal链路本地地址 为啥??RS RA 就是为linklocal 地址生成路由用的,路由其实也可以理解成学neighbor (arp)
fe80::f816:3eff:fe38:d51,output=1表示走vxlan tunnel Table 30
3.1.3 RA 相关流表
RA(Router Advertisement) 路由通告报文 单播报文 icmp_type=134
功能:租户网关loop口的RA应答报文,目的ip为虚机fe80::f816:3eff:fe38:d51 linklocal地址。
priority=300高于上边第一条租户网关给虚机发的组播报文
3.2 RS(Router Solicitation) RA(Router Advertisement) 报文
3.2.1 RA 组播报文
路由器通告RA(Router Advertisement)报文: 组播
每台设备(交换机角色)为了让二层网络上的主机(虚机)和设备知道自己的存在,定时都会组播发送RA报文,
RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的Type字段值为134。
https://blog.csdn.net/qq_45519920/article/details/104798016
Flags字段:
M标志位:管理地址配置标识(Managed Address Configuration),标识是否使用DHCPv6获取IPv6单播地址
M=0,表示无状态地址分配,客户端通过无状态协议(如ND)获得IPv6地址
M=1,表示有状态地址分配,客户端通过有状态协议(如DHCPv6)获得IPv6地址
O标志位:其他配置标识(Other Configuration),标识是否使用DHCPv6获取其他参数,比如DNS等
O=0,表示客户端通过无状态协议(如ND)获取除地址外的其他配置信息
O=1,表示客户端通过有状态协议(如DHCPv6)获取除地址外其他配置信息,如DNS,SIP服务器信息
注意:协议规定,如果M=1,则O=1,否则没有意义
M与O不同组合的含义:
M |
O |
含义 |
描述 |
1 |
1 |
地址和DNS等都从DHCPv6服务器取得 |
Stateful DHCPv6 |
0 |
1 |
地址使用RA通告的prefix+ EUI-64计算出来的接口地址,DNS和其他服务器信息从DHCPv6取得 |
Stateless DHCPv6 |
0 |
0 |
完全的Stateless配置,仅地址使用RA通告的prefix+ EUI-64计算出来的接口地址 |
Stateless AutoConfiguration |
ICMPv6选项前缀信息中的Flag:
L位:表示该RA消息前缀是否分配给本地链路
A位:表示该前缀能否用于无状态自动配置,值为1表示该前缀可以用于无状态自动配置,值为0表示不能用于无状态自动配置。
3.2.2 RS 组播报文
路由器请求RS(Router Solicitation)报文: 组播
很多情况下虚机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文。
RS报文的Tpye字段值为133
3.2.3 RA 单播报文
路由器通告RA(Router Advertisement)报文: 单播
回应RS的RA报文
3.3 NS NA 相关流表
NS(Neighbor Solicitation)邻居请求报文 NA(Neighbor Advertisement)邻居通告报文 相关流表
NS NA 在地址解析中的作用类似于IPv4中的ARP请求 应答
IPv6地址解析示意图
3.3.1 NS 相关流表
NS(Neighbor Solicitation) 邻居请求报文 组播报文 icmp_type=135
功能:目的ip为组播ip,不唯一,所以流表根据报文中的nd_target(唯一,即需要请求的对端ip,可能是唯一本地地址??)指导转发
1.入向:其它虚机请求本虚机的邻居(Neighbor,mac)(分同主机内其它vm ns请求本vm Neighbor 和 别的主机上的vm ns请求本vm Neighbor)
Ipv6地址默认全局唯一的话两条流表可以用一条流表代替,匹配协议类型和nd_target
同主机内其它vm发NS请求本vm邻居(Neighbor) 匹配 reg6 action output到虚机
别的主机上的vm发NS请求本vm邻居(Neighbor) 匹配 tun_id in_port action output到虚机
2.出向:本虚机请求其它虚机的邻居:
本虚机请求同主机
本虚机请求不同主机远端虚机邻居(Neighbor)(同网段)或者请求网关的邻居(Neighbor) (跨网段)
报文送到vxlan tunnel 所以output=1
3.3.2 NA 相关流表
NA(Neighbor Advertisement) 邻居通告报文 单播报文 icmp_type=136
功能:
1.入向:同主机内其它vm或者其它主机上vm将自己的邻居(Neighbor,mac)通告给本虚机
Ipv6地址默认全局唯一的话两条流表可以用一条流表代替,匹配协议类型和ipv6_dst
2.出向:本虚机的邻居(Neighbor,mac)通告给
同主机其它vm(同网段)
或者不同主机上的虚机(同网段)或网关(跨网段)
可以看到 跨网段3层流量卸载还是可以减轻网关压力的
如果进行NDP三层卸载,下发的NS和NA流表不再是同子网,而是同VPC
3.4 NS(Neighbor Solicitation) NA(Neighbor Advertisement) 报文
邻居请求和邻居通告 报文 在地址解析中的作用类似于IPv4中的ARP请求报文
3.4.1 NS邻居请求 组播报文
a ping6 b过程
根据掩码判断是否同网段 不同网段需要查路由
根据路由下一跳 查下一跳的mac缓存, ip -6 neigh 获取到mac进行封装。
那么这个mac是怎么获取到的?看以下场景进行讲解。
场景:240e:980:1800:8007::391/112 请求240e:980:1800:8007::1/112的邻居
相当于请求240e:980:1800:8007::1的mac地址,前提是知道被请求节点组播ipv6地址以及组播mac,具体获取方式如下。
过程梳理:
为了学习到目标地址240e:980:1800:8007::1对应的MAC地址,首先发送NS报文:
Type字段值为135,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP请求报文。
1)被请求节点组播(Solicited-node Multicast) IPv6地址FF02::1:FF00:1如何生成?
IPv6中没有广播地址,也不使用ARP。但是仍然需要从IP地址解析到MAC地址的功能。
在IPv6中,这个功能通过邻居请求NS(Neighbor Solicitation)报文完成。
当一个节点需要解析某个IPv6地址对应的MAC地址时,会发送NS报文,该报文的目的IP
就是需要解析的IPv6地址对应的被请求节点组播地址;只有具有该组播地址的节点会检查处理。
被请求节点组播地址由前缀FF02::1:FF00:0/104和目标单播地址的最后24位组成。
由于目标单播地址是240e:980:1800:8007::1,
所以生成的被请求节点组播地址是:FF02::1:FF00:1。
2)被请求节点组播(Solicited-node Multicast) MAC地址33:33:ff:00:00:01如何生成?
组播MAC地址48bit的前24bit默认固定是33:33:ff,
后半部分是被请求节点组播地址的后24bit,
所以生成的组播MAC地址是33:33:ff:00:00:01。
3.4.2 NA邻居通告 单播报文
VM1发送的NS请求报文给到虚拟网关路由器,虚拟网关路由器收到NS报文后
查看路由表匹配到路由240e:980:1800:8007::/64,代理目标地址回复一个NA报文:
Type字段值为136,Code字段值为0,在地址解析中的作用类似于IPv4中的ARP应答报文。
3.5 ICMPv6的 echo request 、echo reply 报文
ICMPv6的 echo request报文 Type 128
3.6 虚机发送NS报文对linklocal地址做重复地址检测(Duplicate Address Detect,DAD) 相当于v4 免费arp