【IPv6】ICMPv6那些被考官疯狂针对的点

2021-04-29 10:38:44 浏览数 (1)

ICMPv4和ICMPv6的区别?

1、工作环境区别:ICMPv4运行于ipv4网络中,而ICMPv6运行在ipv6网络中;

2、协议号的区别:ICMPv4协议号为1,ICMPv6协议号为58;

3、功能上的区别:在IPv4中,Internet控制报文协议ICMP(Internet Control Message Protocol)向源节点报告关于向目的地传输IP数据 包过程中的错误和信息。它为诊断、信息和管理目的定义了 一些消息,如:目的不可达、数据包超长、超时、回应请求和回应应答等。

在IPv6中,ICMPv6除了提供ICMPv4常用的功能之外,还是其它一些功能的基础,如邻接点发现、无状态地址配置(包括重复地址检测)、PMTU发现等。ICMPv6的协议类型号(即IPv6报文中的Next Header字段的值)为58。

ICMPv6报文格式报文中字段解释如下:

Type:表明消息的类型,0至127表示差错报文类型,128至255表示消息报文类型。

Code:表示此消息类型细分的类型。

Checksum:表示ICMPv6报文的校验和。

ICMPv6错误报文可以分为以下4种:

ICMPv6错误报文的分类;ICMPv6错误报文用于报告在转发IPv6数据包过程中出现的错误。

1、目的不可达错误报文在IPv6节点转发IPv6报文过程中,当设备发现目的地址不可达时,就会 向发送报文的源节点发送ICMPv6目的不可达错误报文,同时报文中会 携带引起该错误报文的具体原因。目的不可达错误报文的Type字段值为1。

根据错误具体原因又可以细分为:

Code=0:没有到达目标设备的路由。

Code=1:与目标设备的通信被管理策略禁止。

Code=2:未指定。

Code=3:目的IP地址不可达。

Code=4:目的端口不可达。

2、数据包过大错误报文在IPv6节点转发IPv6报文过程中,发现报文超过出接口的链路MTU时,则向发送报文的源节点发送ICMPv6数据包过大错误报文,其中携带出接口的链路MTU值。数据包过大错误报文是Path MTU发现机制的基础。数据包过大错误报文的Type字段值为2,Code字段值为0。

3、时间超时错误报文 在IPv6报文收发过程中,当设备收到Hop Limit字段值等于0的数据包, 或者当设备将Hop Limit字段值减为0时,会向发送报文的源节点发送 ICMPv6超时错误报文。对于分段重组报文的操作,如果超过定时时间, 也会产生一个ICMPv6超时报文。时间超时错误报文的Type字段值为3, 根据错误具体原因又可以细分为:

Code=0:在传输中超越了跳数限制。

Code=1:分片重组超时。

4、参数错误报文 当目的节点收到一个IPv6报文时,会对报文进行有效性检查,如果发现 问题会向报文的源节点回应一个ICMPv6参数错误差错报文。

参数错误报文的Type字段值为4,根据错误具体原因又可以细分为:

Code=0:IPv6基本头或扩展头的某个字段有错误。

Code=1:IPv6基本头或扩展头的NextHeader值不可识别。

Code=2:扩展头中出现未知的选项。

ICMPv6信息报文:

ICMPv6信息报文提供诊断功能和附加的主机功能,比如多播侦听发现 和邻居发现。常见的ICMPv6信息报文主要包括回送请求报文(Echo Request)和回送应答报文(Echo Reply),这两种报文也就是通常使 用的Ping报文。回送请求报文:回送请求报文用于发送到目标节点,以使目标节点立即发回一个回送应答报文。

回送请求报文的Type字段值为128,Code字段的值为0。

回送应答报文的Type字段的值为129,Code字段的值为0。

IPv6 NDP

邻居发现协议NDP(Neighbor Discovery Protocol)是IPv6协议体系中一个重要 的基础协议。

邻居发现协议替代了IPv4的ARP(Address Resolution Protocol)和ICMP路由器发现(Router Discovery),它定义了使用ICMPv6报文实现地址解析,跟踪邻 居状态,重复地址检测,路由器发现以及重定向等功能。

(1)地址解析:取代IPv4中的ARP

Host A在向Host B发送报文之前它必须要解析出Host B的链路层地址,所以 首先Host A会发送一个NS报文,其中源地址为Host A的IPv6地址,目的地址 为Host B的被请求节点组播地址,需要解析的目标IP为Host B的IPv6地址,这就表示Host A想要知道Host B的链路层地址。同时需要指出的是,在NS报文的Options字段中还携带了Host A的链路层地 址。当Host B接收到了NS报文之后,就会回应NA报文,其中源地址为Host B 的IPv6地址,目的地址为Host A的IPv6地址(使用NS报文中的Host A的链路 层地址进行单播),Host B的链路层地址被放在Options字段中。

这样就完成了一个地址解析的过程

1、当PC1想访问PC2时,会查找自己的ipv6 neighbor表

2、如果ipv6 neighbor表里没有此邻居,则会以组播(使用PC2的ipv6 地址计算出来的被请求节点组播地址为目标地址)的方式往外发送 NS报文(携带有自己的mac地址)

3、因为PC2是属于这个组的,所以PC2会处理这个NS报文,解析NS报 文发现PC1要请求自己的MAC地址

4、PC2以单播的方式发送NA消息,携带了自己的MAC地址

(2)重复地址检测:探测是否有其它的节点使用了该地址

1、当PC1配置一个IPv6地址时,不会立即生效,是一个试验地址;

2、PC1会使用一个源IP为:: 目的地址为这个地址对应的被请求节点组播 地址的NS消息(会携带 target ip)进行重复地址检测;

3、如果网络中有人发送NA(目的地址为FF02::1)响应这个NS消息, 则认为这个地址已经有人使用,这个地址将不会生效;

4、如果在一段时间内没人响应这个NS消息,则认为这个地址是没有冲突的;

(3)路由器发现:路由器发现功能用来发现与本地链路相连的设备,并获取 与地址自动配置相关的前缀和其他配置参数。

在IPv6中,IPv6地址 可以支持无状态的自动配置,即主机通过某种机制获取网络前缀信 息,然后主机自己生成地址的接口标识部分。

路由器发现功能是IPv6地址自动配置功能的基础,主要通过以下两种报文实现:

1、 路由器通告RA(Router Advertisement)报文:每台设备为了让二层网络上的主机和设备知道 自己的存在,定时都会组播发送RA报文,RA报 文中会带有网络前缀信息,及其他一些标志位信 息。RA报文的Type字段值为134。

2、 路由器请求RS(Router Solicitation)报文:很多情况下主机接入网络后希望尽快获取网络前缀进行通信,此时主机可以立刻发送RS报文,网络 上的设备将回应RA报文。RS报文的Tpye字段值为133。

路由器发现功能如图4所示:

(4)重定向:当网关设备发现报文从其它网关设备转发更好,它就会发送重 定向报文告知报文的发送者,让报文发送者选择另一个网关设备

1、Host A需要和Host B通信,Host A的默认网关设备是Router A, 当Host A发送报文给Host B时报文会被送到Router A

2、Router A接收到Host A发送的报文以后会发现实际上Host A直接 发送给Router B更好,它将发送一个重定向报文给主机A。

其中报文中更好的路径下一跳地址为Router B,Destination Address为Host B

3、Host A接收到了重定向报文之后,会在默认路由表中添加一个主 机路由,以后发往Host B的报文就直接发送给Router B 注意:路由器收到重定向报文时,不会进行重定向

当设备收到一个报文后,只有在如下情况下,设备会向报文发送者发送重定向报文:

a)报文的目的地址不是一个组播地址。

b)报文并非通过路由转发给设备。

c)经过路由计算后,路由的下一跳出接口是接收报文的接口。

d)设备发现报文的最佳下一跳IP地址和报文的源IP地址处于 同一网段。

e)设备检查报文的源地址,发现自身的邻居表项中有用该地 址作为全球单播地址或链路本地地址的邻居存在。

(5)Path MTU在IPv4中,报文如果过大,必须要分片进行发送,所以在每个节点发送 报文之前,设备都会根据发送接口的最大传输单元MTU(Maximum Transmission Unit)来对报文进行分片。

但是在IPv6中,为了减少中间转发设备的处理压力,中间转发设备不对 IPv6报文进行分片,报文的分片将在源节点进行。当中间转发设备的接 口收到一个报文后,如果发现报文长度比转发接口的MTU值大,则会将 其丢弃;同时将转发接口的MTU值通过ICMPv6报文的“Packet Too Big” 消息发给源端主机,源端主机以该值重新发送IPv6报文,这样带来了额外流量开销。

PMTU发现协议可以动态发现整条传输路径上各链路的MTU值,减少由于重传带来的额外流量开销。PMTU协议是通过ICMPv6的Packet Too Big报文来完成的。

首先源节点假设PMTU就是其出接口的MTU,发出一个试探性的报文,当转发路径上存在一个小于当前假设的PMTU时,转发设备就会向源节 点发送Packet Too Big报文,并且携带自己的MTU值,此后源节点将 PMTU的假设值更改为新收到的MTU值继续发送报文。如此反复,直到 报文到达目的地之后,源节点就能知道到达目的地的PMTU了。

PMTU的工作过程如图1所示:

整条传输路径需要通过4条链路,每条链路的MTU分别是1500、1500、 1400、1300,当源节点发送一个分片报文的时候:

1、 首先按照PMTU为1500进行分片并发送分片报文,当到达 MTU为1400的出接口时,设备返回Packet Too Big错误,同 时携带MTU值为1400的信息。

2、源节点接收到之后会将报文重新按照PMTU为1400进行分 片并再次发送一个分片报文,当分片报文到达MTU值为 1300的出接口时,同样返回Packet Too Big错误,携带MTU 值为1300的信息。

3、 之后源节点重新按照PMTU为1300进行分片并发送分片报 文,最终到达目的地,这样就找到了该路径的PMTU

扩展问题1:NDP被看作第3层的协议,在三层完成地址解析,主要带来以下几个好处?

<1>地址解析在三层完成,不同的二层介质可以采用相同的地址解析协议 (P2P/FR也可以进行地址解析)

<2>可以使用三层的安全机制(例如IPSec)避免地址解析攻击。

<3>使用组播方式发送请求报文,减少了二层网络的性能压力。(APR是广播和单播)

扩展问题2:NDP和ARP的区别?

(1)NDP是基于三层的ICMPV6实现的,而ARP是基于二层的;

(2)NDP和ARP在功能上也有区别,NDP有重定向功能和路由发现功能, 而ARP没有;

扩展问题3:IPv6收到了一个超大数据包会怎么处理?

答:会把数据包丢掉,同时会通过ICMPv6的“packet too big”且携带有本端MTU 的消息发送给源主机,源主机收到此消息后,会根据此值对其进行分片,然后再 次发送此数据。

扩展问题4:RA可以分配哪些参数?

解释:

(1)Preferred lifetime内:表示能主动用这个地址发包,在preferred

(2)flag位(0x00)prf(默认网关优先级):用于决定哪个路由器是默认网关

M位:是否执行有状态自动配置,M=1,表示通 过DHCPv6动态获取ipv6地址;

other位:如果M位为0,other位为1,则表示地址和网关通过无状态配置,其他信息请求dhcpv6。如果M=0、o=0,那么只能通过无状态自动 获取ipv6地址,而无法获得其他的网络参数;

(3)Router lifetime:RA消息在缓存中存多久,在此时间内,设备 可以主动的访问其他设备。lifetime和valid lifetime内的只能被动响应,超过valid的为无效

扩展问题5:ICMPv6有几种协议报文?type是多少?举例说明

(1)目的不可达错误报文:type=1

(2)数据包过大错误报文:type=2

(3)时间超时错误报文:type=3

(4)参数错误报文:type=4

(5)信息报文:type=128、type=129

(7)RS type=133

(8)RA type=134

(9)NS type=135

(10)NA type=136

(11)redirect type=137

地址解析:NS组播请求FF02::1:FFXX:XXXXNA,单播响应

重复地址:NS组播请求FF02::1:FFXX.XXXXNA,组播响应FF02::1

路由发现:RS组播请求FF02::2,RA组播响应FF02::1

扩展问题6:ipv6中有ARP表项吗?

0 人点赞