ICMPv6消息
- ICMPv6 是IPv6的基础协议之一。协议号58,该协议号在IPv6报头的“下一个包头”字段中
- ICMP报文有两种:差错消息及信息消息
消息类型
拓扑
R1
ipv un
int e0/0
ipv add 2012::1/64
no sh
ipv route ::/0 2012::2
===================
R2
ipv un
int e0/0
ipv add 2012::2/64
no sh
int s1/1
ipv add 2023::2/64
no sh
===================
R3
ipv un
int s1/1
ipv add 2023::3/64
no sh
ipv route ::/0 2023::2
检查连通性
R1#ping 2023::3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2023::3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 7/8/9 ms
无路由
R1#ping 2024::1
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2024::1, timeout is 2 seconds:
UUUUU
Success rate is 0 percent (0/5)
地址不可达
R1#ping 2023::4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2023::4, timeout is 2 seconds:
HHHHH
Success rate is 0 percent (0/5)
管理原因禁止访问
R2(config)#ipv6 access-list denyany
R2(config-ipv6-acl)#deny any any
R2(config-ipv6-acl)#int s1/1
R2(config-if)#ipv6 tr
R2(config-if)#ipv6 traffic-filter denyany out
R1#ping 2023::3
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2023::3, timeout is 2 seconds:
AAAAA
Success rate is 0 percent (0/5)
PMTUD
- PMTU就是路径上的最小接口MTU。
- IPv6的由源节点自己对数据包进行分片。
IPv4分片
拓扑
R1#ping 3.3.3.3 size 2500
Type escape sequence to abort.
Sending 5, 2500-byte ICMP Echos to 3.3.3.3, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/1/5 ms
在ipv4中,如果一个数据超过了接口的mtu,那么会被瓶颈的网络设备进行分片
IPv6探测MTU
拓扑
完成环境的搭建及设备的基本配置,保证全网互通。
R1去ping R4,能够ping通。
R1#ping 2034::4
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2034::4, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/4/17 ms
修改R2的e0/1接口的MTU
R2(config)#int e0/1
R2(config-if)#ipv6 mtu 1400
在R2上查看接口的MTU
R2#sh ipv6 int e0/1
MTU is 1400 bytes
在R1上ping一下
R1#ping 2034::4 re 1 size 1500
Type escape sequence to abort.
Sending 1, 1500-byte ICMP Echos to 2034::4, timeout is 2 seconds:
B
Success rate is 0 percent (0/1)
此刻R1已经学到了这条路线上最小的MTU
R1#show ipv6 mtu
MTU Since Source Address Destination Address
1400 00:00:08 2012::1 2034::4
NDP邻居发现协议
NDP可以帮助我们实现以下功能
- 地址解析(代替ARP协议,使用ICMP完成地址解析)
- 邻居的状态跟踪
- 无状态自动配置
- 重复地址检测(DAD)
- 前缀重编址
- 路由器重定向
ICMPv6 for NDP
ICMPv6 Type | 消息名称 |
---|---|
133 | 路由器请求(RS) |
134 | 路由器通告(RA) |
135 | 邻居请求(NS) |
136 | 邻居通告(NA) |
137 | 重定向消息 |
NDP机制使用的ICMPv6消息
机制 | RS133 | RA134 | NS135 | NA136 | 重定向消息137 |
---|---|---|---|---|---|
报文介绍 | 主机可以发送RS要求路由器立即产生RA | 包含MTU、前缀信息等 | 用来判断邻居的链路层地址,也用于DAD等 | ||
替代ARP | √ | √ | |||
前缀通告 | √ | √ | |||
前缀重新编址 | √ | √ | |||
DAD | √ | √ | |||
路由重定向 | √ |
地址解析
拓扑
R1#ping 2012::2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 2012::2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 1/4/17 ms
R1从e0/0接口发出了一个NS消息,报文如下
R2的e0/0接口正在监听ff02::1:ff00:2
这个组播地址
R2#show ipv int e0/0
Joined group address(es):
FF02::1
FF02::1:FF00:2
FF02::1:FF00:2000
R2收到之后进行回复,报文如下
R1收到了之后,将R2的mac地址信息记录到IPv6的邻居表中
R1#show ipv6 neighbors
IPv6 Address Age Link-layer Addr State Interface
2012::2 4 aabb.cc00.2000 STALE Et0/0
FE80::A8BB:CCFF:FE00:2000 4 aabb.cc00.2000 STALE Et0/0
注意到报文中的Flag字段
- R位置1表示这是台路由器
- S位置1表示这是响应某个邻居请求的通告,置0则为主动发送的
- O位置1表示NA消息中的条目是否覆盖已有,收到该消息的邻居会覆盖已有条目
邻居状态
- Incomplete 邻居请求已经发送到目标节点的请求组播地址,但没有收到邻居的通告
- Reachable 可达,收到确认,不续再发包确认
- Stale 从收到上一次可达性确认后过了超过30s
- Delay 在stale状态后发送过一个报文,并且5s内没有可达性确认
- Probe 每隔1s重传邻居请求来主动请求可达性确认,直到收到确认
- A发送NS,并生成缓存条目,状态为Incomplete
- 若B回复NA,则Incomplete ->Reachable。否则10S后Incomplete->Empty,即删除条目
- 经过ReachableTime(默认30S),B的条目状态Reachable->stale,或者在Reachable状态,收到B的非请求NA,且链路层地址不同,则马上->stale
- 在Stale状态若A要向B发送数据,并从Stale->Delay,等待应用层的提示信息,提示邻居可达
- 在Delay_First_Probe_Time(默认5S)内,若有NA应答或者应用层的提示信息,则Delay->Reachable,无应用层提示信息,Delay->Probe
- 在Probe状态,每隔RetransTimer(默认1S)发送单播NS,发送MAX_Unicast_Solicit个后再等RetransTimer,有应答则Reachable,无则进入Empty,即删除条目
测试命令debug ipv6 nd
DAD(Duplicate Address Detection)
节点向一个自己将使用的tentative地址所对应的Solicited-Node组播地址发送一个NS,如果收到某个其他站点回应的NA,就证明该地址已被网络上使用,节点将不能使用该tentative地址通讯。
如果1S后没有检测到冲突,A就会发送non-solicited advertisement(一个NA消息),宣告大家我将正式使用这个IPv6地址。