文章目录
IPv6协议
ICMPv6
IPv6的基础协议之一
在IPv4中,Internet 控制报文协议 ICMP 向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息,如:目的不可达、数据包超长、超时、回应请求和回应应答等。
在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还是其它一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等。
ICMPv6的协议类型号(即IPv6报文中的Next Header字段的值)为58
- Type:表明消息的类型,0至127表示差错报文类型,128至255表示消息报文类型。
- Code:表示此消息类型细分的类型。
- Checksum:表示ICMPv6报文的校验和。
- type:
0-127表示差错报文类型
128-255表示消息报文类型
128 : Request
129 : Reply
133 : RS //寻找路由器的报文
134 : RA //路由器发送的报文
135 : NS //类似于ARP-Request报文
136 : NA //类似于ARP-Reply报文
137 : ICMPV6重定向
NDP邻居发现
邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要的基础协议
邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),定义了使用ICMPv6报文实现地址解析,跟踪邻居状态,重复地址检测,路由器发现以及重定向等功能。
邻居通告报文:
- 邻居请求报文NS:类型字段值为135
- 邻居通告报文NA:类型字段值为136
- 在路由器发现中使用了两种ICMPv6报文:路由器通告和路由器请求报文:
- 路由器通告RA:类型字段值为134
- 路由器请求RS:类型字段值为133
- 重定向使用了一种新的ICMPv6报文:重定向报文。重定向报文类型字段值为137
地址解析
类似于IPv4中的ARP协议
- 基于ICMPv6实现
- 包括NS报文和NA报文
bash#PC1 发送NS消息(135)请求 Source IP:自己的IPv6地址 目的IP:PC2的请求节点组播地址#(物理接口的地址可以推出来请求节点组播地址) Source MAC:自己的MAC 目的MAC:33开头的组播MAC地址 target address:PC1的IP地址 Option:自己的MAC地址 #PC2 回应NA消息(136)应答,回复的时候发送的是单播报文 Source IP:自己的IPv6地址 目的IP:PC1的IPv6地址 Source MAC:自己的MAC 目的MAC:PC1的MAC target address:PC2的IP地址 Option:自己的MAC地址
IPv6定义了五种邻居状态
Empty状态为空白状态
- 未完成(Incomplete)
- 可达(Reachable)
- 陈旧(Stale)
- 延迟(Delay)
- 探查(Probe)
bash#下面以A、B两个邻居节点之间相互通信过程中A节点的邻居状态变化为例(假设A、B之前从未通信),说明邻居状态迁移的过程。 1.A先发送NS报文,并生成缓存条目,此时邻居状态变为Incomplete。 2.若B回复NA报文,则邻居状态由Incomplete变为Reachable,如固定时间后未收到NA报文则邻居状态由Incomplete变为Empty,即删除表项。此状态可以通信 3.邻居链路空余固定时间后,邻居状态由Reachable变为Stale,即未知是否可达。 4.如果在Reachable状态,A收到B的非请求NA报文,且报文中携带的B的链路层地址(NAC地址)和表项中不同,则邻居状态马上变为Stale。 5.在Stale状态若A要向B发送数据,则邻居状态由Stale变为Delay,并发送NS请求。如果有NA应答,变成Reachable。 6.再经过一段固定时间后,邻居状态由Delay变为Probe,期间若有NA应答,则邻居状态由Delay变为Reachable。 7.在Probe状态,A每隔一定时间间隔发送单播NS,发送固定次数后,有应答则邻居状态变为Reachable,无应答则邻居状态变为Empty,即删除表项。 dis ipv6 neighbors //查看IPv6邻居状态 debugging ipv6 nd //开启Debug测试 terminal debugging //终端显示Debug信息 terminal monitor //监控显示Debug信息
DAD重复地址检测
IPv4使用免费ARP进行重复地址的检测、IPv6使用DAD进行地址冲突的检测
基于ICMPv6实现
包括 NS 报文和 NA 报文
在进行DAD检测是,一个IPv6单播地址在分配给一个接口之后且通过重复地址检测之前称为试验地址(Tentative Address)。此时该接口不能使用这个试验地址进行单播通信,但是仍然会加入两个组播组:ALL-NODES组播组和实验地址所对应的Solicited-Node组播组。
IPv6重复地址检测技术和IPv4中的免费ARP类似:节点向一个自己即将使用的试验地址所在Solicited-Node组播组发送一个以该试验地址为请求的目标地址的NS报文,如果收到某个其他站点回应的NA报文,就证明该地址已被网络上使用,节点将不能使用该实验地址通讯,如果没有收到某个其他站点发送的NA报文,那么这个试验地址转换为正式地址就可以使用了
bash#DAD检测过程 1、PC1的IPv6地址为2001::1为新配置的地址,即试验地址,PC1向2001::1所在的 Solicited-Node 组播组发送一个以 2001::1 为请求的目标地址的NS报文进行冲突检测,由于2001::1报文的源地址为未指定地址,PC2收到该NS报文后,有两种处理方法 (1)、如果PC2发现2001::1是自身的一个试验地址,则PC2放弃使用该地址作为接口地址,并且不会发送NA报文 (2)、如果PC2发现2001::1是自己已经在使用的地址,PC2会向该地址所在的All-Node组播组发送一个NA报文,消息中包含 2001::1。之后PC1收到消息之后就会停止使用该地址
路由发现
- 基于ICMPv6实现
- 发现与本地链路相连的路由器
- 获取与地址自动配置相关的前缀和其他配置参数
- 包括RA和RS报文
在IPv6中,IPv6地址可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信息,然后主机自己生成地址的接口标识部分。路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:
路由器通告RA(Router Advertisement)报文:每台路由器为了让二层网络上的主机和路由器知道自己的存在,定时都会组播发送RA报文,RA报文中会带有网络前缀信息,及其他一些标志位信息。RA报文的Type字段值为134。
路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,那么此时主机可以立刻发送RS报文,网络上的路由器将回应RA报文。RS报文的Type字段值为133。
RA消息的源IP:自己 的Link-local地址 目的地址是FF02::1
bash#当存在以下情况时,忽略RA发送的前缀 1、ICMPv6里的Option字段的Flag中的Auto未置位 2、前缀与已有地址前缀重复(包括Link-local地址) 3、RA报文选项中 Preferred lifetime 时间大于 Valid lifetime 4、前缀长度与接口ID长度之和不等于128位 #除以上情况外,主机获得前缀同时也获取一些相关的时间参数 1、Preferred time 发起通讯的有效时间 2、valid lifetime 原有通讯的有效时间 #主机会周期新的发送RA报文,并根据此报文来更新自己的时间参数
ICMPv6中的Flag字段
M位置1:表示有状态--DHCPv6
M位置0:表示无状态--RA消息自动获取
O位置1:表示通过无状态获取到 IP 地址,但是通过有状态的方式获取到其他信息、比如DNS
ICMPv6----RA消息中的Flag字段:
Cur Hop Limit:64----该字段用于帮助主机完成跳数限制。当PC使用该RA通告的前缀构建IPv6地址后,该PC发送的IPv6报文的跳数限制被设置为该值(64)
Managed address configuration----M位默认为0,0时收到该RA的主机使用RA中包含的IPv6前缀用于无状态地址自动配置
----使用如下命令,可将该值设置为1----ipv6 nd autoconfig managed-address-flag
----当该值为1时,收到该RA的主机将采用有状态自动配置,也就是DHCPv6的方式来获取IPv6地址Other Configuration,默认为0,表示主机不应该使用有状态自动配置机制来配置除了IPv6地址外的其他参数
----使用命令:ipv6 nd autoconfig other-flag----将该值置1,则主机需使用DHCPv6来配置除了IPv6地址外的其他信息,如DNS,域名等,但是IPv6地址还是无状态自动获取的Router Lifetime:1800----单位是秒,主机将路由器视为缺省路由器的时间。该计时器到计数为0时,该路由器将不会出现在主机的缺省网关列表中
对于M位和O位,配置强制置1命令之后需要重新使能一下接口来进行实现
Author:DC