Presentation is loading. Please wait.

Presentation is loading. Please wait.

第4章 ICMPv6及相关协议.

Similar presentations


Presentation on theme: "第4章 ICMPv6及相关协议."— Presentation transcript:

1 第4章 ICMPv6及相关协议

2 学习内容及要求 本章学习内容及要求 要求了解ICMPv6协议的功用 理解ICMPv6与ICMPv4的比较内容 掌握ICMPv6协议格式内容
理解邻居发现协议的主要内容 掌握邻居发现协议的功能分析方法 熟知ICMP重定向报文内容和功用 掌握IPv6地址解析技术的方法 了解多播监听者发现协议MLD

3 4.1 ICMPv6协议概述 4.1.1 ICMPv6协议的功用 现在ICMPv6的技术文档是RFC 2463 需要说明的是
ICMPv6是IPv6的Internet控制报文协议ICMP(Internet Control Message Protocol),它属于IPv6协议的一个组成部分,和IPv6协议一起工作,IPv6网络中的每一个节点均要实现ICMPv6。 在IPv6分组不能被正确处理的时候,ICMPv6向源节点报告IPv6分组在传输过程中的出错信息和通告信息,使网络中的节点可以知道网络中所传输的IPv6分组的情况,以及当前网络状态的重要信息。 现在ICMPv6的技术文档是RFC 2463 需要说明的是 在IPv6网络中,用ICMPv6实现IPv4网络中的ICMP、ARP、IGMP协议的功能。 在发送ICMPv6报文时,是将ICMPv6报文作为IPv6分组的数据载荷。

4 IPv6与IPv4的网络层

5 4.1.2 ICMPv6与ICMPv4的比较 ICMPv6增加的功能包括: Internet 组管理协议IGMP功能被加入到ICMPv6中。
地址解析协议ARP和反向地址解析协议RARP 功能被加入到ICMPv6中。 引入了邻居发现(ND)协议,它使用ICMPv6报文是为了确定同一个链路上的邻居的链路层地址、发现路由器、随时跟踪哪些邻居是可连接的,以及检测更改的链路层地址。 ICMPv6还支持Mobile IPv6。

6 ICMPv6与ICMPv4报文类型的比较 报文名称 ICMPv4的类型 ICMPv6的类型 回声应答 129 目的地不可达 3 1
129 目的地不可达 3 1 协议包过大 类型3代码4 2 源抑制 4 重定向 5 137 回声请求 8 128 超时 11 参数错误 12 时间戳 13 时间戳回复 14 路由器请求 10 133 路由器公告 9 134 邻居请求 135 邻居公告 136 家乡代理地址发现请求 144 家乡代理地址发现应答 145 移动前缀请求 146 移动前缀公告 147

7 已定义的ICMPv6报文类型 差错报文(0-127) 信息报文(128-255) 类型 消息含义 1 目的不可达 128 回声请求 2
数据包报文过大 129 回声应答 3 超时 130 组成员查询 4 参数错误 131 组成员报告 132 组成员退出 133 路由器请求 134 路由器通告 135 邻节点请求 136 邻节点通告 137 重定向

8 携带ICMPv6报文的IPv6分组的格式 ICMPv6报文封装在IPv6中 具有扩展首部的IPv6,封装ICMPv6报文 IPv6 基本首部
下一个首部=58 ICMPv6 报文主体 ICMPv6 首部 图4.3 携带ICMPv6报文的IPv6分组的格式 具有扩展首部的IPv6,封装ICMPv6报文 IPv6 基本首部 扩展首部 …… 扩展首部N ICMPv6 报文首部 报文体

9 封装在IPv6分组中的ICMPv6报文 载荷长度 跳数限制 源地址 目的地址 下一首部 IP首部 流标识

10 4.2 ICMPv6协议格式 4.2.1 ICMPv6报文的类型 ICMPv6报文有两种类型:
⑴ICMPv6错误报文,错误报文的Type(类型)字段中的最高位为0。因此ICMP错误报文类型的编码值范围是0到127。 ⑵ICMPv6信息报文,信息报文的Type (类型)字段中的最高位为1。 因此ICMP信息报文类型的编码值范围是l28到255。 比特 代码 类型 报文主体 校验和 图4.2 ICMPv6报文的一般格式 8 16 31

11 ICMPv6 两种类型的报文 ICMPv6 错误报文包括: ICMPv6 信息报文包括:
报文类型1,目的地不可达(Destination Unreachable); 报文类型2,数据包过大(Packet Too Big); 报文类型3,超时(Time Exceeded); 报文类型4,参数问题(Parameter Problem)。 ICMPv6 信息报文包括: 报文类型128,回声请求(Echo Request); 报文类型129,回声应答(Echo Reply)。 需要注意的是:ICMPv6与ICMPv4相比,报文号、类型都发生了根本的改变。ICMPv6与ICMPv4是两个不同的协议,两个版本的ICMP并不兼容。

12 (在不超过最小IPv6 MTU的情况下,尽可能多地包括引起出错的分组的信息)
4.2.2 ICMPv6错误报文 ICMPv6错误报文有四种类型: 目的地不可达;数据包过大;超时;参数问题。 每种ICMPv6错误报文根据错误报告的种类或者它所携带的信息的不同,报文的首部会有不同。 类型(1B) 引发本报文的原IPv6分组片段 (在不超过最小IPv6 MTU的情况下,尽可能多地包括引起出错的分组的信息) 校验和(1B) 代码(1B) 参数

13 lCMPv6 错误报文类型和代码 报文号 报文类型字段 代码字段 1 目的地不可到达 0=没有到目的地路由 l= 与目的地的通信被管理性禁止
2= 超出源地址的范围 ( 草案 ) 3= 地址不可达 4= 端口不可达 2 数据包过大 发送方将代码字段设为 0, 接收方忽略代码字段 3 超时 0= 传输中的跳数超出限制 l= 分段重组超时 4 参数问题 0= 遇到错误的 Header ( 首部 ) 字段 l= 遇到不可识别的 Next Header ( 下一首部 ) 类型 2= 遇到不可识别的IPv6选项 Pointer(指针)字段用来指出检测到错误的调用数据包内的8位偏移量。如果出错的字段超出了一个ICMPv6错误报文可以容纳的最大尺寸的话,指针会指向ICMPv6数据包结尾之外。

14 目的地不可达

15 数据包过大

16 使用ICMPv6路径MTU发现(PMTUD)探测路径MTU的过程。
路由器 路由器 目的 MTU=1500 MTU=1400 MTU=1300 ①报文(MTU=1500) ②ICMPv6(类型=2),使用MTU=1400 ③报文(MTU=1400) ④ICMPv6(类型=2),使用MTU=1300 ⑤报文(MTU=1300) ⑥收到报文 用IPv6 PMTUD发现的MTU值被源节点缓存

17 超时

18 超过跳数限制

19 回送ICMPv6差错报文

20 参数问题

21 4.2.3 ICMPv6信息报文 RFC2463文档中定义了两类ICMPv6信息报文: 其他的ICMPv6信息报文用于
回声请求(Echo Request)和回声应答(Echo Reply)。 其他的ICMPv6信息报文用于 组成员关系、路径MTU发现(Path MTU Discovery)和邻居发现(Neighbor Discovery)。 最常见的TCP/IP 工具之一,例如数据包Internet探索者PING (Packet INternet Groper) 使用的就是回声请求和回声应答报文。

22 回声请求和回声应答

23

24 4.2.4 ICMPv6处理规则 当接收到ICMPv6差错报告报文时,如果无法识别具体的类型,必须将它交给上层协议模块进行处理。
所有的ICMPv6差错报告报文,都应该在IPv6所要求的最小MTU允许范围内,尽可能多地包括引发该ICMPv6差错报文的IPv6分组片段,以便给IPv6分组的源节点提供尽可能多的诊断信息。

25 4.2.4 ICMPv6处理规则(续) 不能产生ICMPv6差错报告报文的发送情况:
一个发往多播地址的IPv6分组。但有两个例外: 当使用IPv6多播地址进行路径MTU探测时,可以发送“报文过长”差错报告报文; 允许使用参数错误报文报告:存在不可识别的TLV可选项。 链路层的多播报文。对这类报文也具有与上面第二类情况相同的例外。 链路层的广播报文。对这类报文也具有与上面第二类情况相同的例外。 IPv6分组的源地址无法唯一确定一个单独节点时,这种情况也不能够引起ICMPv6差错报告报文的发送。例如,IPv6不明确地址等。

26 4.3邻居发现协议 NDP IPv4的缺点之一:主机换网必须换地址,配置麻烦。 IPv4的解决办法:
启动协议( BOOTP ) 动态主机配置协议( DHCP ) 允许节点从BOOTP服务器或DHCP服务器获取配置信息。但是这些协议支持所谓的“状态自动配置”,即服务器必须保持每个节点的状态信息,并管理这些保存的信息。

27 4.3邻居发现协议 NDP IPv6的最重要目标之一是支持“即插即用”——不需要任何人工干预,就能将一个节点插入IPv6网络,并在网络中启动。 IPv6使用两种不同机制来支持即插即用。 1、有状态地址自动配置:BOOTP和 DHCP ; 2、无状态地址自动配置。在这种方式下,需要配置地址的节点,使用邻居发现机制获得一个IPv6地址。

28 4.3邻居发现协议 NDP 4.3.1邻居发现协议概述 IPv6节点利用邻居发现协议可以实现的机制有:
NDP是IPv6的一个重要组成部分,它不是一个全新的协议,邻居发现协议实现了在IPv4中应用的地址解析协议(ARP)和ICMP路由器发现和重定向,还加入了一些新的功能。 IPv6节点利用邻居发现协议可以实现的机制有: ⑴确定同一链路上节点的链路层地址。 ⑵查找可以转发它们的数据包的邻近路由器。 ⑶随时跟踪哪些邻居可达,哪些不可达,并且检测有改变的链路层地址。 邻居发现协议由5条ICMPv6报文组成。

29 为NDP定义的ICMPv6报文 ICMPv6类型 报文类型 133 路由器请求(RS) 134 路由器通告(RA) 135 邻居请求(NS)
136 邻居通告(NA) 137 重定向

30 4.3.2 邻居发现协议的功能 ARP的替代协议 路由器重定向 前缀通告 重复地址检测 前缀重新编址 邻居发现协议NDP
无状态地址 自动配置

31 4.3.3 路由器请求和路由器通告 路由器以一定的时间间隔发出路由器通告(Router Advertisement)报文。
主机也可以通过发出路由器请求(Router Solicitation)报文来请求路由器通告 提示路由器不必按照固定的时间间隔,尽快发出一个路由器通告。 比特 代码(设为0) 133 保留字(未使用,由发送方设置为0) 校验和 图4.15 路由器请求报文的格式 8 16 31 选项(长度不定,若可知的话,是发送方的链路层地址)

32 路由器请求报文

33

34 路由器通告报文

35

36 4.3.4 邻居请求和邻居通告 这两个报文完成两个功能: 如果目的地址是一个多播地址,那么源地址正在解析一个链路层地址。
在IPv4中由ARP处理的链路层地址解析,以及邻居不可达性检测机制。 如果目的地址是一个多播地址,那么源地址正在解析一个链路层地址。 如果源地址正在检测一个邻居的可达性,那么目的地址就是一个单播地址。 比特 代码(设为0) 135 校验和 图4.17 邻居请求报文的格式 8 16 31 选项 保留字(只用于不可达检测消息报文) 目的地址

37 邻居请求报文

38 邻居通告报文

39 4.3.5 ICMP重定向报文 对希望发送报文的主机来说,第一跳的选取是非常重要的。
为了正确选择第一跳,主机可以发送路由器请求报文,并接收路由器通告报文,然后根据获取的路由器信息来选取第一跳。 这种方式,主机用来发现下一跳的过程简单,主机虽然能够找到路由器,但不能保证这个路由器就是到达特定目的主机的最佳第一跳路由器。

40 IPv6分组选中的路由器RA 并非是最佳第一跳路由器
路由器RB 主机B 路由器RA 网络

41 路由器RA向主机A发送重定向报文 主机A 路由器RB 主机B 路由器RA 以后发往主机B的分组应该发送给路由器RB 网络

42 4.3.5 ICMP重定向报文 路由器发出ICMP重定向(ICMP Redirect)报文是用来
告诉节点在去往给定目的地的路径上更优的下一跳节点地址。 比特 代码(设为0) 137 校验和 图4.19 重定向报文的格式 8 16 31 选项 保留字(由发送者初始化为0) 目标地址(16字节) 目的地址(16字节)

43 重定向

44 4.4 IPv6地址解析技术 替代ARP使用邻居请求、邻居通告报文和被请求节点多播地址(ff02::1:ffxx:xxxx)的组合。

45 使用邻居请求、邻居通告报文和被请求节点多播地址,发现本地链路节点的链路层地址
节点A 本地链路 ICMPv6(类型=135)邻居请求报文 源地址: FEC0::1:0:0:1:A 目的地址:FF02::1:FF01:B(被请求节点多播地址) 数据: 00:50:3e:e4:4c:00(节点A的链路层地址) 源链路层地址: 00:50:3e:e4:4c:00 目的链路层地址:33:33:ff:01:00:0b (IPv6多播映射地址) 节点B 00:50:3e:e4:4c:00 FEC0::1:0:0:1:A FEC0::1:0:0:1:B 00:50:3e:e4:4b:01 MAC链路层地址 寻找节点B ICMPv6(类型=136)邻居通告报文 源地址: FEC0::1:0:0:1:B 目的地址: FEC0::1:0:0:1:A 数据: 00:50:3e:e4:4b:01(节点B的链路层地址) 源链路层地址: 00:50:3e:e4:4b:01 目的链路层地址: 00:50:3e:e4:4c:00 源链路层地址选项 目的链路层地址选项

46 由单播/任播地址形成被请求节点多播地址 2001:410:0:1::1:A FF02::1:FF01:000A 地址前缀 接口标识符
FF02 : : : : : : FFXX : XXXX 被请求节点多播地址 24位 104位 单播/任播地址 64位 FF02::1:FF01:000A

47 以太网上的多播映射 128位 32位 IPv6被请求节点多播地址
FF02:0000:0000:0000:0000:0001:FF01:000B 33:33 :FF:01:00:0B 多播以太网前缀 128位 IPv6被请求节点多播地址 32位 以太网MAC地址 (48位)

48 邻节点请求和邻节点通告报文的其它应用 验证邻节点可达性:邻节点请求报文使用单播地址,而不使用被请求节点多播地址。
如果请求报文的发送者收到了目的主机回送的通告报文,它认为目的主机是可达的。 否则它认为目的主机不能到达。 更新邻节点缓存:当一个节点改变链路层地址后,使用所有节点多播地址FF02::1,主动发送“邻节点通告”报文,通告自己的链路层地址信息。本地链路上节点的邻节点缓存用新的链路层地址更新。

49 4.5 多播监听者发现协议MLD 4.5.1 多播监听者发现协议概述 多播监听者是希望收到多播数据报的节点。
IPv6路由器通过多播监听者发现MLD协议,发现在与它直接连接的链路和出现的多播监听者,同时发现这些多播监听者感兴趣的多播地址。 MLD用3个ICMPv6报文取代了IPv4网络所用的IGMP协议。可以通过报文中多播地址字段的内容区分不同的MLD报文。 RFC3810给出MLD协议的第2版MLDv2,MLDv2与MLDv1兼容 增加了对源过滤器的支持,可以区分多播数据报发出的源地址。 多播路由器通过多播路由协议收集多播监听者的信息,并把监听状态通告与它相邻的多播路由器。

50 4.5.2 多播监听者发现报文格式 MLDv2的报文类型是ICMPv6报文类型的子集 MLDv2的报文类型有三种:
与ICMPv6一样,也是通过IPv6分组中下一个首部字段值为58来标识。 MLDv2的报文类型有三种: 多播监听者查询 多播监听者报告 多播监听者退出

51 多播监听者查询报文 多播监听者查询报文的类型为130,由处于查询状态的多播路由器发出 用于查询邻居接口的多播监听状态。 比特 代码(0) S
图4.24 多播监听者查询报文的格式 8 16 31 校验和 类型 最大响应代码 保留字 多播地址 源地址数 QQIC QRV 保留 源地址[i] 源地址[n] ……

52 多播监听者报告报文 多播监听者报告报文由IPv6节点发送给邻居路由器 用于报告节点接口当前的多播监听状态或多播监听状态的变化。 比特
保留字(0) 图4.25 多播监听者报告报文的格式 8 16 31 校验和 类型 多播地址记录数 保留字 多播地址记录[i] …… 多播地址记录[n]

53 ICMPv6组成员关系报文

54 ICMPv6组成员关系报文

55 ICMPv6组成员关系报文

56 ICMPv6组成员关系报文

57 组成员关系操作的四种状态

58 课堂练习---ICMPv6报文 ipv6 unicast-routing interface f0/0 ipv6 enable
PC1和PC2自动配置IPv6地址; Ping对端的ipv6地址 ipv6 unicast-routing interface f0/0 ipv6 enable ipv6 address 2013::1 ……


Download ppt "第4章 ICMPv6及相关协议."

Similar presentations


Ads by Google