IPv6 基础协议报文
何为基础协议?像v4中的icmp、arp、hdcp之类的
在v6中只需要NDP协议,他是通过ICMPv6报文完成的,她能够实现邻居发现、无状态地址检测、重复地址检测、PMTU等功能
RS(133) | RA(134) | NS(135) | NA(136) | 重定向(137) | |
---|---|---|---|---|---|
地址解析 | ✔️ | ✔️ | |||
前缀公告 | ✔️ | ✔️ | |||
前缀重编址 | ✔️ | ✔️ | |||
DAD | ✔️ | ✔️ | |||
路由重定向 | ✔️ |
如上四种报文很重要:
RS(Router Solicitation):路由器请求报文
RA(Router Advertisement):路由器通告报文
NS(Neighbor Solicitation):邻居请求报文
NA(Neighbor Advertisement):邻居通告报文
🐴1. 地址解析
IPv6的地址解析不再使用ARP,也不再使用广播方式。
地址解析在三层完成,针对不同的链路层协议可以采用相同的地址解析协议
通过ICMPv6(类型135的NS及类型136的NA报文)来实现地址解析。
NS报文发送使用组播的方式,报文的目的IPv6地址为被请求的IPv6地址对应的“被请求节点组播地址”,报文的目的MAC为组播MAC。
采用组播的方式发送NS消息相比于广播的方式更加的高效,也减少了对其他节点的影响和对二层网络的性能压力。
可以使用三层的安全机制(例如IPSec)避免地址解析攻击。
通信过程:
R1请求R2的mac地址
首先R1向R2发送NS报文↓
邻居请求(Neighbor Solicitation)(组播):
Type=135,code=o
Target Address 需要解析的IPv6地址
然后R2回复NA报文↓
邻居请求(Neighbor Advertisement)(单播):
Type=136,code=o
R标志(Router flag)表示发送者是否为路由器,如果1则表示是;
S标志(Solicited fag)表示发送邻居通告是否是响应某个邻居请求如果1则表示是(0例如路由器或PC重启后主动发送NA邻居通告,就不是回应其他人的NS,类似免费ARP):
O标志(Overide flag)表示邻居通告中的消息是否覆盖已有的条目信息,如果1则表示是;
Target Address 所携带的链路层地址对应的IPv6地址
最重要的MAC地址再Options中
组播报文这样封装的好处是
目的mac是一个组播mac,目的ip也是一个组播IP,因为我们知道要请求的目标ip地址是多少,所以能够根据他的ip地址计算出组播mac和组播ip,目标设备由于配置了这个要访问的地址,所以是自动加入这个组播地址的,当其他计算机收到此报文后,由于并不在这个组播组中,所以当看到组播mac地址,而自己并不在组播组中,因此网卡直接丢弃不再往下看,节省设备计算资源。(如何生成组播mac与组播IP查看【2 IPv6的地址类型】)
附上两个实际的报文 ↓ 可对应上文查看
当拿到mac地址后IPv6不再像IPv4使用ARP表存储IP与MAC映射,而是维护一张IPv6邻居表
dis ipv6 neighbors //查看邻居缓存表
其中能够查看对方地址、状态、链接时间等。NDP还具有邻居状态跟踪功能,具体下一篇会介绍
相比v4 有和优势 ?
V4 是用arp 广播实现地址解析和重复地址检测
① v6 是用组播形式 ,减轻设备性能压力
② v6 在三层完成地址解析,适用更多的链路层(介质独立性)
③ v6 在三层完成解析,可以使用自身ipsec安全认证机制提高安全性,避免类似v4中的arp欺骗
🐷2. 邻居状态跟踪
实际通讯中邻居表会存在中状态分别是:
INCOMPLETE 未完成,邻居请求已经发送到目标节点的请求组播地址,但没有收到邻居的通告;
REACHABLE 可达,收到确认,不续再发包确认;
STALE 陈旧,从收到上一次可达性确认后过了超过30s:
DELAY 延迟,在stale状态后发送过一个报文,并且5s内没有可达性确认
PROBE 探查,每隔1s重传邻居请求来主动请求可达性确认,直到收到确认。
绿色箭头标识正常流程
注意1:像ARP报文一样,业务报文并不能刷新邻居表项。邻居表项只能靠NDP(icmpv6报文)刷新。
注意2:即使一直通信,状态仍然会变迁到stale–delay,只是这个过程是短暂的。因为发送NS请求后,一旦对方回复了NA则状态又被刷新到Reachable。
注意3:如果一直通信,且双方链路正常,则会一直在Reachable—>Stale—>Delay 状态循环变迁。只是停留在Stale和Delay状态时间很短。
注意4:邻居状态是Reachable、Stale、Delay、Probe时,表项依然有效,依然可以按邻居表封包发包。Incomplete不可用
🐱3. 无状态自动配置
IPv6获取地址的方式分为手动和自动
自动又分为有状态和无状态自动配置,有状态就像DHCPv6,无状态自动配置就是今天要说到的一种方法(缩写SLAAC)
如何理解有状态、无状态?
像DHCPv6,他有个服务器给下端设备分配地址,同时服务器还要维持地址表,比如给谁分配了哪个地址,租期多长是否续约,可以理解为要维持一个状态
而无状态,他是根据下发的前缀自动生成的,不需要别人维护
为了完成无状态配置,我们将会用到RA和RS报文:
RA(Router Advertisement,路由器通告)报文:每台设备为了让二层网络上的主机和设备知道自己的存在,可以定时以组播方式发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的Type字段值为134。可以一次携带多个前缀
RS(Router Solicitation,路由器请求)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络上的设备将回应RA报文RS报文的Type字段值为133。
链路上的路由器会定期发送RA报文,收到RA报文的主机将加入默认路由表中,根据路由器RA中携带的前缀信息通过软件算法或EUI-64生成IPv6地址
在前缀中又两个时间字段,优选时间(Preferred Lifetime)和可用时间(Valid lifetime)
一般可用时间大于优选时间
当地址处于优选时间内(优先阶段),地址可以任意使用
当地址超过了优选时间但没超过有效时间(废弃阶段),这个地址虽然能用但不能再主动访问,只能被当作目的地址
如果超过可用时间还没有续租,则进入不可用阶段,回收地址
由于路由器会每隔250s(可选250s-650s)一个周期下发前缀,如果设备一直在线则会持续收到路由器的RA报文来刷新优选时间,只有长时间不通信或长时间关机才有可能进入废弃阶段及不可用
报文中常用的几个flags位
Managed address configuration:M位默认为0,为0时,收到该RA的主机使用RA中包含的IPv6前缀用于无状态地址自动配置。当为1时表示采用有状态配置,也就是DHCP
Other Configuration:Other-Config-Flag,默认为0,表示主机不使用DHCPv6 配置DNS、域名等其他参数。
Router Lifetime:单位是秒,主机将路由器视为缺省路由器的时间。主机使用路由器link-local地址作为网关,并生成缺省路由,缺省路由有效时间1800s。周期性的RA报文会刷新该时间。
因为无状态配置只能配置地址不能指定DNS域名等其他参数,此时可以使用M=0,O=1的方法,也就是前缀获取地址,dhcp获取其他配置
ipv6 nd autoconfig managed-address-flag //设置Managed address configuration的值ipv6 nd autoconfig other-fag //设置Other Configuration的值
🐮4. 重复地址检测DAD
所有单播地址都要做DAD检测 (包括link-local)
会使用到NS与NA报文完成交互过程
在IPv6中检测重复地址的思路和v4差不多,只不过v6是通过特殊的NS报文请求自己的地址,v4是通过arp报文请求自己地址
和正常NS比这里的NS报文原地是::也就是未指定地址,把要检测的地址放在报文中
如果两个地址冲突,则会收到NA回包
再查看接口地址
会发现地址后面有一个Duplicate,表示地址冲突,处于不能用的状态
🦝5. 重定向
重定向有专用的重定向报文,类型是137
Target Address是更好的路径下一跳地址。
Destination Address是需要重定向转发的报文的目的地址,也就是最终想访问的目标的IP
🐹6. PMTU发现
IPv6在转发过程中是不进行分片的,而是在源节点进行分片,在目的节点进行组装
所以我们需要探测出整个链路中最小MTU称为PMTU,在源端按照最小MTU进行切片
那又是如何探测最小的PMTU呢?
R1先以自己 的MTU为大小发包,当R3收到报文时发现报文过大回复ICMP error报文告诉R1报文太大请发1300的包,R1重新发送1300大小的包,此包顺利到达终点,R3回复R1PMTU为1300
PMTU最小为1280bytes(IPv6要求链路层所支持的MTU最小为1280)