ipv6访问
$ dig www.taobao.com aaaa
; << >> DiG 9.10 .6 << >> www.taobao.com aaaa
; ; global options: +cmd
; ; Got answer:
; ; ->> HEADER<<- opcode: QUERY, status: NOERROR, id: 31252
; ; flags: qr rd ra; QUERY: 1 , ANSWER: 3 , AUTHORITY: 0 , ADDITIONAL: 1
; ; OPT PSEUDOSECTION:
; EDNS: version: 0 , flags:; udp: 512
; ; QUESTION SECTION:
; www.taobao.com. IN AAAA
; ; ANSWER SECTION:
www.taobao.com. 585 IN CNAME www.taobao.com.danuoyi.tbcache.com.
www.taobao.com.danuoyi.tbcache.com. 45 IN AAAA 2408 :872b:700:1:3::3fa
www.taobao.com.danuoyi.tbcache.com. 45 IN AAAA 2408 :872b:700:1:3::3f9
; ; Query time: 95 msec
; ; SERVER: 192.168 .3.1
; ; WHEN: Sat Mar 26 04:33:49 CST 2022
; ; MSG SIZE rcvd: 144
curl -6 -v -I -XGET https://www.taobao.com
第一部分:IPv6简介
1.IPv6简介
学习IPv6的必要性
IPv4地址耗尽 有些服务只让IPv6访问 提升性能:20%~40%。IPv6使用固定长度头结点,不允许分片等 加固当前在用网络:因为现在的大多数主机都默认开启了IPv6,作为网络管理人员必须熟悉IPv6 缓解IPv4地址耗尽的临时性方案:
CIDR(无类别域间路由) 服务提供商(SP)专用网络100.64.0.0/10 NAT(搭配私有IPv4地址)
10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 NAT面临的问题
校验和重新计算:在传递TCP报文段时,修改IPv4包头必须重新计算校验和 操纵ICMP:由于很多ICMP消息净载会嵌入致使其生成的IP数据包的IPv4包头。由于原始IP数据包的IPv4地址会经过NAT转换,因此必须要让NAT设备同时转换ICMP消息中的IPv4地址
破坏了端到端的畅通性:p2p 影响性能
2.IPv6入门
$ ip address show en0
en0: flags = 886 3 < UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
ether 38 :f9:d3:ce:2d:da
inet6 fe80::14eb:bed9:370f:b38c/64 secured scopeid 0x7
inet 192.168 .1.5/24 brd 192.168 .1.255 en0
inet6 2408 :8207:30e5:a9f0:c50:a971:7a50:bb8f/64 autoconf secured
inet6 2408 :8207:30e5:a9f0:6c68:6760:e3b7:4ca8/64 autoconf temporary
IPv6地址类型
公网单播地址GUA:是指唯一的、可路由的公网IPv6地址,等同于IPv4公网地址。以16进制2或3打头 本地链路单播地址:是指作用域为本地链路的IPv6单播地址。链路(link)指一个逻辑网段或一个子网。一个IPv6设备无需设有公网单播地址,但必须设有IPv6本地链路地址。一般以fe80开头 未指定单播地址:全为0的IPv6地址,表示IPv6地址缺失或不详,它只能作为IPv6数据包的源地址,
IPv6路由器绝不会转发目的地址为未指定地址的ipv6数据包。 恳求节点多播地址:用于某些IPv6协议消息的目的地址,其用途等同于IPv4广播地址。
恳求节点多播地址只能作为(IPv6数据包的)目的地址。
目的地址为恳求节点多播地址的IPv6数据包,绝不会被路由到本地链路或本地子网之外。恳求节点多播地址总是以ff02:0:0:0:0:1:ff打头 就MAC地址解析而言,IPv6采用的恳求节点多播机制在效率上远高于IPv4采用的以太网广播机制 半字节nibble:nybble、nyble 前缀(Prefix):一个IPv6地址的网络部分。 前缀长度(Prefix length):IPv6的最高有效(最左边的)位的位数,用来指明IPv6地址的网络部分(前缀部分)。等同于IPv4的子网掩码 接口ID(Interface ID):等同于IPv4地址的主机部分 节点或设备(Node or Device):拥有IPv6地址的任何设备 ICMPv6邻居发现协议(NDP):作用近似于IPv4 ICMP。但是添加了NDP扩展
路由重定向消息 添加了4种新的协议消息:用来行使地址解析功能(类似于IPv4 ARP)
邻居恳求(Neighbor Solicitation,NS):相当于ARP请求 邻居通告(Neighbor Advertisement,NA):相当于ARP应答 路由器恳求(Router Solicitation,RS):IPv6主机发出RS,目的是让IPv6路由器回复路由器通告消息 路由器通告(Router Advertisement,RA):路由器发出RA消息,通知同一子网内的设备如何动态获取IPv6地址信息 位于同一链路(同一子网内)的多台IPv6设备会借助于NDP来行使相互发现和消息传递功能。 两台设备为了获悉对方的MAC地址,会发出邻居恳求和邻居通告消息。类似于IPv4 ARP 同一链路上(同一子网内)的设备和路由器之间为了交换某种信息,会互发路由器恳求和路由器通告消息 动态地址分配:即使未在网络内部署动态主机配置协议版本6(DHCPv6)服务器,也能让IPv6设备自行获取地址配置信息。
路由器通告消息:
网络前缀,前缀长度,以及链路(子网)有关的其他信息 默认网关的IPv6地址(RA消息的源IPv6地址) 3个标记的置为情况。IPv6根据它们来决定如何获取本机IPv6地址配置信息。A标记位(自治地址配置标记位)、O标记位(其他配置标记位)、M标记位(管理地址配置标记位) 可选信息,如域名以及DNS服务器的IPv6地址列表 IPv6主机根据RA消息内容,通过以下三种方法之一来动态获取本机IPv6地址信息
:
1.(A)无状态地址自动配置SLAAC:主机会根据RA消息的内容,来获取本机所有IPv6地址配置信息(RA消息的包含的前缀信息)。主机会把RA消息的源IPv6地址设置为本机默认网关的IPv6地址。 2.(O)SLAAC加无状态DHCPv6服务器:类似于SLAAC,但是主机还会在RA消息中继续"联络"无状态DHCPv6服务器的"建议",将会从DHCPv6服务器获取RA消息中未包含的其他地址配置信息。例如DNS服务器的IP地址列表信息。无状态的DHCPv6服务器并不提供或维护任何IPv6公网单播地址信息。无状态服务器只为网络提供通用的网络配置信息
3.(M)有状态的DHCPv6服务器:路由器发出RA消息,通知IPv6主机,建议其"联络"DHCPv6服务器,从该服务器获取本机所有IPv6地址配置信息。但是IPv6主机还得通过RA消息中动态获取本机的默认网关地址
方法1和2都是由SLAAC自行创建本机IPv6公网单播地址。从路由器通告获取IPv6前缀信息,再按一下两种方式自行创建64位接口ID。
随机生成64位接口ID(windows默认方法) EUI-64(可扩展的唯一标识符)机制:先将接口(网卡)的48位MAC地址一分为二;再在中间添加FFFE,使其变为64位;最后反置这64位二进制数的第7位,便得到最终的64位接口ID
3.对比IPv4和IPv6
IPv4 IP包头长度(IHL):单位为4字节,[5-15]。IPv6没有此字段,固定为40字节 IPv4 TOS和IPv6流量类别作用相同,支持对流量优先级做设置。(6位区分服务和2位的IP ECN) IPv6流标签字段:用来标记单一源节点发往一个或多个目的节点的一批IPv6数据包或一股IPv6数据流。源节点通过设置流标签,为一批IPv6数据包"做记号",让IPv6路由器以特殊方式处理这批数据包 IPv4总长度、IPv6净载长度和巨包:IPv4总长度包含包头和净载;IPv6净载长度是除40字节包头外的净载(扩展包头视为净载的一部分);IPv6巨包:在扩展包头中,长度为2^32-1 IPv4和IPv6 MTU:
最大传输单元MTU:链路能传输的单个数据包最大长度 IPv4标准规定,每个节点在不分片的情况下必须转发最短为68字节的IPv4数据包。每一个IPv4数据包的最终接收节点都必须能够接收最短576字节的IPv4数据包,这个IPv4数据包既可以是未经分片的原始数据包,也可以是原始IPv4数据包的一个分片。
IPv6标椎规定,每条链路的最低MTU为1280字节,建议值为1500字节,而IPv4标准的建议值为68字节。 IPv4分片:当链路的MTU低于数据包长度时,发生分片,接收端会对分片进行重新组装。
标识符字段(16位):每个数据包的标识都具有唯一性,当一个数据包被分片时,此标识符相等 标记字段(3位):第一位保留;第二位为不分片(DO not Fragment,DF),1表示不应该被分片;第三位叫做更多分片(More Fragments,MF),未分片或最后一个分片为0,分片且不是最后一个分片为1 分片偏移字段(13位):该字段值(单位8字节)用来指明分片IP数据包中净载的首字节,相对于原始IP数据包(未分片IP数据包)中净载的首字节偏移字节数。 IPv6分片:只能由IPv6源节点来执行,中间节点(路由器)不执行IPv6数据包的分片
当IPv6路由器收到的数据包的长度大于外发接口(所连链路)的MTU值时,便会做丢包处理,同时还会向生成数据包的节点发出ICMPv6数据包过长消息(包含该接口所连链路的MTU值,以便生成数据包的节点调整数据包长度,重新发送) 路径MTU(PMTU):在源和目的节点之间所有链路都能通行的单个数据包的长度 IPv4协议字段和IPv6的下一个头部字段:指明净载所归属的高层协议,IPv6还可指明扩展包头 IPv4、TCP、UDP校验和:检测数据包传输过程中是否被损坏
IPv6没有校验和,因为以太网的二层数据链路技术自有一套校验和计算及错误控制机制,此外,TCP和UDP等高层协议头部都设立了校验和字段,所以在第三层设立校验和字段纯属多余 IPv4 UDP校验和可以不计算,但是IPv6 UDP校验和必须计算 TCP和UDP数据报计算校验和都会涵盖伪头部(由网络层头部的某些字段和传输层头部字段组成)。构成网络层的伪头部(IPv6)
源IPv6地址 目的IPv6地址 净载长度字段(TCP、UDP头部加数据的长度) 下一个头部字段(包括任何扩展包头) Wireshark IPv6
Frame 1866 : 196 bytes on wire ( 1568 bits) , 196 bytes captured ( 1568 bits) on interface en0, id 0
Ethernet II, Src: Apple_a8:10:45 ( f4:5c:89:a8:10:45) , Dst: Apple_ce:2d:da ( 38 :f9:d3:ce:2d:da)
Destination: Apple_ce:2d:da ( 38 :f9:d3:ce:2d:da)
Source: Apple_a8:10:45 ( f4:5c:89:a8:10:45)
Type: IPv6 ( 0x86dd)
Internet Protocol Version 6 , Src: 2408 :8207:30e5:a9f0:40ce:c75e:9e5c:e31e, Dst: 2408 :8207:30e5:a9f0:c50:a971:7a50:bb8f
0110 .. .. = Version: 6
.. .. 0000 0010 .. .. .. .. .. .. .. .. .. .. = Traffic Class: 0x02 ( DSCP: CS0, ECN: ECT( 0 ))
.. .. 0000 00.. .. .. .. .. .. .. .. .. .. .. = Differentiated Services Codepoint: Default ( 0 )
.. .. .. .. .. 10 .. .. .. .. .. .. .. .. .. .. = Explicit Congestion Notification: ECN-Capable Transport codepoint '10' ( 2 )
.. .. .. .. .. .. 0111 0000 0110 0000 0000 = Flow Label: 0x70600
Payload Length: 142
Next Header: TCP ( 6 )
Hop Limit: 64
Source Address: 2408 :8207:30e5:a9f0:40ce:c75e:9e5c:e31e
Destination Address: 2408 :8207:30e5:a9f0:c50:a971:7a50:bb8f
Transmission Control Protocol, Src Port: 64173 , Dst Port: 10000 , Seq: 1 , Ack: 1 , Len: 110
[ Community ID: 1 :9M9jXvynvmK6toucL8OWF+KxzgY= ]
IPv6扩展包头:P53
设立扩展包头的目的是提高IPv6的灵活性和可扩展性,而又无需对全套IP协议做重新设计。另外,设立IPv6扩展包头还可以使IPv6主包头的长度固定,以便IPv6能被更高效的处理 逐跳选项扩展包头:代替IPv4选项字段 目的选项扩展包头:代替IPv4选项字段 路由扩展包头 分片扩展包头 认证头部AH扩展包头 封装安全净载ESP扩展包头 目的选项扩展包头
第二部分:动态IPv6类型
4.IPv6地址的表示方法和地址类型
IPv6地址表示
省略前导0 省略全0的十六位组:用双冒号(::)来替换一组连续的两个或多个全0十六进制组。
RFC 5952指出,应该使用双冒号替换:最长的一组连续的全0十六进制组;若存在多组等长的全0十六进制组,则用双冒号替换第一组。 但是大多数操作系统都接受任意位置使用单个双冒号 IPv6单播地址:唯一标识IPv6设备的接口
公网单播地址GUA:2000::/3,即2或3起头 本地链路地址:fe80::/10,唯一性只有在某条链路上得到保证,目的地址为本地链路地址的IPv6数据包不能被路由到链路外。支持IPv6的设备必须拥有本地链路地址 loopback地址:::1/128 未指定单播地址:::/128,不能分配给接口。可以作为源地址,表示发包设备地址缺失 本地唯一地址:fc00::/7,不应在公网Internet上路由,只能在受限的区域(如某个站点网络)内使用或在非公开的网域之间路由 嵌入IPv4地址的IPv6地址:为了方便从IPv4过度到IPv6。::ffff:192.168.0.1 多播地址:多播是一种数据包发送机制,发送主机可借助该机制将多个多播数据包同时发往多台目的主机
公认多播地址:ff00::/12,由IANA分配 临时多播地址:ff10::/12,由应用程序"暂时"分配或"动态"分配 恳求节点多播地址:ff02:0:0:0:0:1:ff00::/104 任播地址:可分配给多个接口(通常在不同设备)的IPv6地址。换句话说,多台设备可设有相同的IPv6任播地址。路由器会根据本机路由表,将目的地址为IPv6任播地址的数据包路由至"最近的"设有该地址的设备(接口)。
5.IPv6公网单播地址
子网前缀(简称前缀)是指IPv6公网单播地址的公网前缀加子网ID字段
6.IPv6本地链路单播地址
支持IPv6功能的设备必须具有IPv6本地链路地址。支持IPv6功能的设备可以没有公网单播地址。 IPv6不能被路由到本地链路(本地子网)之外。 路由器不会转发源地址或目的地址为本地链路地址的IPv6数据包 只要求IPv6地址在本地链路具备唯一性。 每个接口(每块网卡)只能拥有一个IPv6本地链路地址。 IPv6本地链路地址范围为fe80::/10到febf::/10,但是实际应用中最好使用fe80打头的IPv6本地链路地址。 为了确保IPv6本地链路地址在本地子网内的唯一性,需要执行地址冲突检测(DAD),向本地链路的每台IPv6设备通告本机即将启用IPv6单播地址,以了解该地址是否有其他设备在使用。 IPv6设备会从ICMPv6路由器通告信息中动态获悉本机默认网关的IPv6地址。默认网关的IPv6地址为本地路由器的IPv6本地链路地址。 Linux或MacOS上ping本地链路地址
# en6为本地网卡接口
ping6 -I en6 -c 1 fe80::c53:e655:7bf0:7134
或
ping6 fe80::c53:e655:7bf0:7134%en6
7.IPv6多播地址
IPv6多播地址格式如下:
ff00::/8:前8位全部置为1 标记字段:”ff“之后的四位为标记字段,该字段的第四个标记位为瞬时(T)标记位,用来指明一下两种IPv6多播地址。
永久多播地址(T为0):由IANA分配,包括众所周知的IPv6多播地址和IPv6恳求节点多播地址 非永久多播地址(T为1):这种IPv6地址是”暂时“分配或”动态“分配的IPv6多播地址,由多播应用程序来”暂时“或”动态“分配。 范围字段:(四位)用来指明目的地址为本IPv6多播地址的IPv6数据包的转发范围 群ID字段:最后112位 众所周知的IPv6多播地址的前缀为ff00::/12,都是为指定的多播群预定义或预留的多播地址。
为IPv6设备的接口分配的每一个IPv6单播地址都会有一个”配套“的IPv6恳求节点多播地址。 这种IPv6多播地址的构成方式是在恳求节点多播前缀ff02:0:0:0:0:1:ff00::/104之后添加相关IPv6单播地址的后24位。有了恳求节点多播地址,IPv6设备就可以利用多播机制来行使IPv4设备用广播机制才能行使的功能,而多播机制的效率要明显高于广播机制。当IPv6多播数据包被封装为以太网帧时,会按一定的规则将其目的IPv6多播地址转换为以太网帧的目的MAC地址,IPv6设备的NIC可根据这一目的MAC地址,来决定是否接受其中包含了IPv6多播数据包的以太网(多播)帧。以太网多播数据包:都有相同的3字节后缀(下面的包为77:7d:98,单播地址后24位和多播前缀ff02:0:0:0:0:1:ff00::/104组成恳求多播地址,恳求多播地址后32位和33:33组成多播帧MAC地址)
多播帧MAC地址:33:33:ff:77:7d:98 恳求多播地址:ff02::1:ff77:7d98 单播地址:2408:8207:30e5:a9f0:1472:f65f:2e77:7d98
Frame 2640: 86 bytes on wire (688 bits), 86 bytes captured (688 bits) on interface en6, id 0
Ethernet II, Src: Fiberhom_56:3b:3c (68:fe:da:56:3b:3c), Dst: IPv6mcast_ff:77:7d:98 (33:33:ff:77:7d:98)
Internet Protocol Version 6, Src: fe80::1, Dst: ff02::1:ff77:7d98
0110 .... = Version: 6
.... 0000 0000 .... .... .... .... .... = Traffic Class: 0x00 (DSCP: CS0, ECN: Not-ECT)
.... 0000 0000 0000 0000 0000 = Flow Label: 0x00000
Payload Length: 32
Next Header: ICMPv6 (58)
Hop Limit: 255
Source Address: fe80::1
Destination Address: ff02::1:ff77:7d98
Internet Control Message Protocol v6
Type: Neighbor Solicitation (135)
Code: 0
Checksum: 0x46b5 [correct]
[Checksum Status: Good]
Reserved: 00000000
Target Address: 2408:8207:30e5:a9f0:1472:f65f:2e77:7d98
ICMPv6 Option (Source link-layer address : 68:fe:da:56:3b:3c)
Type: Source link-layer address (1)
Length: 1 (8 bytes)
Link-layer address: Fiberhom_56:3b:3c (68:fe:da:56:3b:3c)
[Community ID: 1:KHx/0U7KlBtfl+y1xgw+ZCNLFVo=]
# netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 all-systems.mcast.net
enp0s3 1 all-systems.mcast.net
lo 1 ff02::1
lo 1 ff01::1
enp0s3 2 ff02::1:ffc1:f0b7
enp0s3 1 ff02::1
enp0s3 1 ff01::1
多播帧听发现(MLD):路由器据此来发现特定子网内的IPv6多播客户端(多播侦听设备)。
多播帧听者发现协议版本2(MLDv2)根据Internet组管理协议版本2(IGMPv2)开发而成,IPv6多播路由器要依靠其协议消息来发现特定子网内的多播接收主机 MLD消息(ICMPv6消息)
多播侦听者查询消息:由多播路由器定期发出,目的是确定直连网络内有哪些活跃的多播群。常规查询目的地址为ff02::1 多播侦听者报告消息:由多播接收者主机发出,目的是加入指定的多播群。目的地址ff02::16 多播侦听者完成消息:由多播接收者主机发出,目的是突出某个多播群。目的地址ff02::2 MLD窥探:可控制IPv6多播数据包的转发。只会将其从连接了相关多播群的活跃成员的端口外发,但不会控制目的地址为恳求节点多播地址的IPv6多播数据包的转发 。
在默认情况下,交换机收到IPv6多播数据包时,将会从除了接收端口以外的所有端口外发(泛洪)。 开启了MLD窥探以后,交换机不但能窥探到多播接收主机发出的多播侦听者报告消息,而且会根据消息中的内容以及接收消息的端口,在本机第二层转发表中创建相关表项。 由于存储IPv6恳求节点多播地址会使交换机的转发表的容量暴增,因此交换机会泛洪目的地址为恳求节点多播地址的IPv6数据包。
第三部分 动态IPv6寻址
8.IPv6动态地址分配原理
有状态DHCPv6:IPv6主机可直接从DHCPv6服务器接收除默认网关的IPv6地址以外的所有IPv6地址信息。 在部署无状态DHCPv6服务的情况下,IPv6主机先从IPv6路由器发出的RA消息获取本机IPv6地址和默认网关的IPv6地址,再从DHCPv6服务器获取其他地址信息。 DHCPv6角色:
DHCPv6客户端:会向一台或多台DHCPv6服务器发起动态地址分配请求 DHCPv6服务器:响应客户端。它和客户端可以在不同的子网 DHCPv6中继代理:一般为IPv6路由器,它会接收DHCPv6客户端发出的地址分配请求,将其转发至另一网络内的一台或多台DHCPv6服务器。它对DHCPv6客户端是透明的。 DHCPv6术语:
DUID:每个参与DHCPv6的设备,不论是客户端还是服务器,都拥有一个唯一标识自身的DUID IA:身份关联,是指分配给DHCPv6客户端的IPv6地址集合。客户端至少要为使用DHCPv6服务的每个接口分配一个IA。每个IA都包含一个由DHCPv6客户端分配的IAID(身份关联标识符) IAID:每个IA都会与一个由DHCPv6客户端选择的IAID相关联,这一IAID值在该DHCPv6客户端上具有唯一性。IAID用来标识DHCPv6客户端的特定接口 UDP端口:服务器或中继代理会发出目的端口号为546的DHCPv6消息与客户端通信。客户端以547为目的端口与服务器通信
Frame 6072: 100 bytes on wire (800 bits), 100 bytes captured (800 bits) on interface en6, id 0
Ethernet II, Src: ASIXElec_48:a7:09 (f8:e4:3b:48:a7:09), Dst: IPv6mcast_01:00:02 (33:33:00:01:00:02)
Internet Protocol Version 6, Src: fe80::c53:e655:7bf0:7134, Dst: ff02::1:2
User Datagram Protocol, Src Port: 546, Dst Port: 547
DHCPv6
Message type: Information-request (11)
Transaction ID: 0x653d31
Client Identifier
Option: Client Identifier (1)
Length: 14
DUID: 000100012593858f38f9d3ce2dda
DUID Type: link-layer address plus time (1)
Hardware type: Ethernet (1)
DUID Time: Dec 23, 2019 22:02:55.000000000 CST
Link-layer address: 38:f9:d3:ce:2d:da
Option Request
Elapsed time
[Community ID: 1:tg81TXvKL5mt/gBXWIE+dv7ba2U=]
DHCPv6消息
恳求SOLICIT:探索DHCPv6服务器 通告ADVERTISE:收到客户端恳求消息,服务器会回复通告消息,表示本机可提供DHCPv6服务 请求REQUEST:客户端发往服务器,以请求IPv6地址和地址配置参数 应答REPLY:服务器对客户端请求消息的回复
9.无状态地址自动配置(SLAAC)
ICMPv6 RA消息
多播目的地:ff02::1(所有IPv6设备多播地址) Router lifetime (s): 1800。收到RA消息的IPv6主机会在字段值所指定的时长内,将发出RA消息的路由作为默认网关。当此值为0时,IPv6主机决不能把此路由器当做默认网关。
Valid Lifetime: 259200。指定IPv6主机将RA通告的IPv6前缀(被IPv6主机)用作”on-link确定“(On-Link Determination)的有效时长 Preferred Lifetime: 172800。IPv6主机将通过SLAAC自行创建的IPv6地址视为首选IPv6地址(preferred address)。与首选地址相关联的”Preferred Lifetime“到期之后,IPv6设备在建立新的连接时将不再使用该IPv6地址作为源地址,但是会继续使用该IPv6地址作为已建立连接的源地址。 收到携带L标记位置1的前缀信息选项的路由器通告消息时,IPv6主机会将前缀信息选项中的前缀字段所包含的IPv6前缀添加进本机前缀列表(一张由on-link前缀构成的列表)。任何其他IPv6主机,只要该IPv6前缀覆盖了其所拥有的IPv6地址,都将被视为可在本地IPv6子网内直连。 IPv6设备还可以把出现在ICMPv6重定向消息(由本地IPv6路由器发出)的目标地址字段里的IPv6地址视为on-link。IPv6设备会把任何目的地址为非on-link IPv6地址的IPv6数据包发送给默认路由器。若本地子网内没有默认路由器,则生成IPv6数据包的设备应得到ICMPv6目的不可达消息的提示。
Frame 34: 134 bytes on wire (1072 bits), 134 bytes captured (1072 bits) on interface en0, id 0
Ethernet II, Src: Fiberhom_56:3b:3c (68:fe:da:56:3b:3c), Dst: IPv6mcast_01 (33:33:00:00:00:01)
Internet Protocol Version 6, Src: fe80::1, Dst: ff02::1
Internet Control Message Protocol v6
Type: Router Advertisement (134)
Code: 0
Checksum: 0x8b57 [correct]
[Checksum Status: Good]
Cur hop limit: 64
Flags: 0x58, Other configuration, Prf (Default Router Preference): Low
Router lifetime (s): 1800
Reachable time (ms): 0
Retrans timer (ms): 0
ICMPv6 Option (Prefix information : 2408:8207:30e5:a9f0::/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: 259200
Preferred Lifetime: 172800
Reserved
Prefix: 2408:8207:30e5:a9f0::
ICMPv6 Option (Route Information : High 2408:8207:30e5:a9f0::/64)
ICMPv6 Option (Source link-layer address : 68:fe:da:56:3b:3c)
[Community ID: 1:Ilg4oMT5cEP8nHg384C0O3MLdD0=]
IPv6公开公网单播地址:EUI-64 IPv6临时公网单播地址 temporary IPv6 Address:接口ID必须随机生成
随机生成接口ID可防止根据IPv6地址的接口ID,来推导出IPv6设备的以太网NIC的MAC地址(MAC地址具有全球唯一性),从而达到保护用户隐私的目的 查看IPv6地址的有效期、优先使用期以及状态信息
linux:ip -6 addr show dev enp0s3 maxos:ifconfig -L en0 windows:netsh interface ipv6 show address
# ip -6 addr show dev enp0s3
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
inet6 2408:8207:30e5:a9f0:bfa8:ea21:ed47:b515/64 scope global temporary dynamic
valid_lft 259161sec preferred_lft 86355sec
inet6 2408:8207:30e5:a9f0:a00:27ff:fec1:f0b7/64 scope global dynamic mngtmpaddr noprefixroute
valid_lft 259161sec preferred_lft 172761sec
inet6 fe80::a00:27ff:fec1:f0b7/64 scope link noprefixroute
valid_lft forever preferred_lft forever
macos和windows默认打开隐私扩展功能,linux(centos)没有打开,可以采用以下方式打开
vim /etc/sysctl.conf
# 0 - don’t use privacy extensions.
# 1 - generate privacy addresses
# 2 - prefer privacy addresses and use them over the normal addresses.
net.ipv6.conf.all.use_tempaddr=1
net.ipv6.conf.default.use_tempaddr=1
# 也可指定网卡打开
# net.ipv6.conf.enp0s3.use_tempaddr=1
本机IPv6地址状态
待用地址(Tentative address):唯一性有待验证的IPv6地址 有效地址:在Valid Lifetime内的地址,可分为如下两种,
首选地址:分配至接口并通过唯一性检测的IPv6地址。可用来收、发IPv6数据包 不建议使用的地址:在有效期内,但已过了优先使用期,不建议使用 无效地址:有效期过了的地址 默认地址选择:当有多个源地址IP时,按以下顺序应用规则
地址相同优先:源地址之一和目的地址相同,则选其为源地址 范围优先。若源地址之一和目的地址的范围相同(本地链路或公网),则选其为源地址
避免使用不建议使用的地址。在首选地址(建议使用的地址)和不建议使用的地址之间优选首选地址 优选归属地址(IPv6移动性)。在归属地址和转交地址之间优先使用归属地址。
归属地址是分配给移动设备的IPv6地址,作为永久地址来使用。也就是说,归属地址是移动设备在自己的归属网络内使用的”常规“永久IPv6地址。发往移动设备的IPv6数据包的目的地址总是其归属地址 转交地址是移动设备接入远离归属网络的链接时,获得的辅助或临时IPv6地址。当移动节点接入归属网络的链路时,其所拥有的地址既是归属地址也是转交地址。 优选外发IPv6数据包接口的IPv6地址。哪个接口发包选谁 优选匹配的标签。每台IPv6设备都有一张默认策略表,默认策略表为IPv6地址赋予了比IPv4地址更高的优先级 优选临时地址。出于保护隐私的考虑,在临时地址和公开地址之间,应优先选择使用临时地址 遵循共同前缀最长匹配原则。
10.无状态DHCPv6
45 4.510644 fe80::140a:9c22:a7c5:e971 ff02::2 ICMPv6 70 Router Solicitation from 38:f9:d3:ce:2d:da
46 4.618153 fe80::1 ff02::1 ICMPv6 78 Router Advertisement from 68:fe:da:56:3b:3c
47 5.333825 fe80::140a:9c22:a7c5:e971 ff02::1:2 DHCPv6 116 Solicit XID: 0x9792da CID: 000100012593858f38f9d3ce2dda
48 5.340383 fe80::1 fe80::140a:9c22:a7c5:e971 DHCPv6 162 Advertise XID: 0x9792da CID: 000100012593858f38f9d3ce2dda IAA: 2408:8207:30e5:a9f0::5
49 6.286321 fe80::140a:9c22:a7c5:e971 ff02::1:2 DHCPv6 158 Request XID: 0x8d70e4 CID: 000100012593858f38f9d3ce2dda IAA: 2408:8207:30e5:a9f0::5
50 6.305676 fe80::1 fe80::140a:9c22:a7c5:e971 DHCPv6 162 Reply XID: 0x8d70e4 CID: 000100012593858f38f9d3ce2dda IAA: 2408:8207:30e5:a9f0::5
SLACC+无状态DHCPv6
Other configuration: Set Autonomous address-configuration flag(A): Set
Frame 582: 134 bytes on wire (1072 bits), 134 bytes captured (1072 bits) on interface en0, id 0
Ethernet II, Src: Fiberhom_56:3b:3c (68:fe:da:56:3b:3c), Dst: IPv6mcast_01 (33:33:00:00:00:01)
Internet Protocol Version 6, Src: fe80::1, Dst: ff02::1
Internet Control Message Protocol v6
Type: Router Advertisement (134)
Code: 0
Checksum: 0x8b57 [correct]
[Checksum Status: Good]
Cur hop limit: 64
Flags: 0x58, Other configuration, Prf (Default Router Preference): Low
0... .... = Managed address configuration: Not set
.1.. .... = Other configuration: Set
..0. .... = Home Agent: Not set
...1 1... = Prf (Default Router Preference): Low (3)
.... .0.. = Proxy: Not set
.... ..0. = Reserved: 0
Router lifetime (s): 1800
Reachable time (ms): 0
Retrans timer (ms): 0
ICMPv6 Option (Prefix information : 2408:8207:30e5:a9f0::/64)
Type: Prefix information (3)
Length: 4 (32 bytes)
Prefix Length: 64
Flag: 0xc0, On-link flag(L), Autonomous address-configuration flag(A)
1... .... = On-link flag(L): Set
.1.. .... = Autonomous address-configuration flag(A): Set
..0. .... = Router address flag(R): Not set
...0 0000 = Reserved: 0
Valid Lifetime: 259200
Preferred Lifetime: 172800
Reserved
Prefix: 2408:8207:30e5:a9f0::
ICMPv6 Option (Route Information : High 2408:8207:30e5:a9f0::/64)
ICMPv6 Option (Source link-layer address : 68:fe:da:56:3b:3c)
[Community ID: 1:Ilg4oMT5cEP8nHg384C0O3MLdD0=]
11.有状态DHCPv6
Router Advertisement from 68:fe:da:56:3b:3c
Managed address configuration: Set Other configuration: Set
Frame 46: 78 bytes on wire (624 bits), 78 bytes captured (624 bits) on interface en0, id 0
Ethernet II, Src: Fiberhom_56:3b:3c (68:fe:da:56:3b:3c), Dst: IPv6mcast_01 (33:33:00:00:00:01)
Internet Protocol Version 6, Src: fe80::1, Dst: ff02::1
Internet Control Message Protocol v6
Type: Router Advertisement (134)
Code: 0
Checksum: 0xb4b4 [correct]
[Checksum Status: Good]
Cur hop limit: 64
Flags: 0xd8, Managed address configuration, Other configuration, Prf (Default Router Preference): Low
1... .... = Managed address configuration: Set
.1.. .... = Other configuration: Set
..0. .... = Home Agent: Not set
...1 1... = Prf (Default Router Preference): Low (3)
.... .0.. = Proxy: Not set
.... ..0. = Reserved: 0
Router lifetime (s): 1800
Reachable time (ms): 0
Retrans timer (ms): 0
ICMPv6 Option (Source link-layer address : 68:fe:da:56:3b:3c)
Type: Source link-layer address (1)
Length: 1 (8 bytes)
Link-layer address: Fiberhom_56:3b:3c (68:fe:da:56:3b:3c)
[Community ID: 1:Ilg4oMT5cEP8nHg384C0O3MLdD0=]
向ISP申请IPv6前缀:ISP利用DHCPv6前缀下发功能为客户网络分配IPv6前缀和其他地址配置信息
第四部分 ICMPv6和ICMPv6邻居发现
12.ICMPv6
ICMPv6消息分类
错误类消息:最高位为0,范围0~127 信息类消息:最高位为1,范围128~255 为了杜绝无止境的ICMPv6错误类消息交换,IPv6设备决不能生成ICMPv6错误类消息去响应之前收到的任何一条ICMPv6错误类消息。 linux和macos
13.ICMPv6邻居发现(ND)
ICMPv6消息类型
路由器和主机之间,行使动态地址分配功能
路由器恳求(Router Solicitation,RS) 路由器通告(Router Advertisement,RA) Ipv6设备之间,行使地址解析功能
邻居恳求(Neighbor Solicitation,NS) 邻居通告(Neighbor Advertisement,NA) 路由器和主机之间,用来发现更优的第一跳路由器
IPv6 ND几乎具备了IPv4环境下的地址解析、路由器发现和路由重定向功能。还包含了新的功能,如IPv6前缀发现、地址冲突检测(DAD)以及邻居不可达检测(NUD) 发现路由器及IPv6前缀
:IPv6设备要依靠路由器恳求消息和路由器通告消息来动态获取IPv6前缀、默认网关以及其他配置信息地址解析
:依靠邻居恳求和邻居通告消息,来确定拥有某个已知IPv6地址的其他设备的第二层地址地址冲突检测(DAD)
:IPv6设备在启用任何一个IPv6单播地址之前,都得依靠邻居恳求和邻居通告消息,来确定该地址在本地链路上是否已被其他设备使用邻居不可达检测(NUD)
:依靠邻居恳求和邻居通告消息,来判断是否可以将IPv6数据包直接转发至本地链路上的邻居设备重定向
:当IPv6路由器发现收到的IPv6数据包还要从接收接口外发时,将会向生成IPv6数据包的主机发送ICMPv6重定向消息,把拥有最优路由的路由器的IPv6地址或IPv6数据包的目的地址填入ICMPv6重定向消息的目标地址字段。收到ICMPv6重定向消息之后,生成IPv6数据包的主机会将消息中目标地址字段所包含的那个IPv6地址视为on-link,同时将发往相同目的地址的后续IPv6数据包直接转发给拥有那个IPv6地址的路由器或主机。
出现IPv6数据包还要从接收接口外发的原因有如下两种:
路由器查询过路由表之后,发现本地子网内的另一台路由器有通往目的网络的最优路由,不得不将收到的IPv6数据包从接收接口外发 路由器发现数据包的目的接收主机与生成IPv6数据包的主机属于同一子网。 NIC缓存表
邻居缓存表:一张IPv6地址与以太网MAC地址之间对应关系列表。ip -6 neigh show 目的缓存表:缓存刚刚与本机发生过通信的目的主机的IPv6地址和默认路由器关系,包括不隶属于本地链路的地址。当与非本地链路通信时,会从此列表里选择默认路由器转发IPv6数据包
第五部分 IPv6路由器选择
14.IPv6路由表和静态路由
15.IPv6 EIGRP
15 OSPFv3协议