ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

HCIP-Datacom Core Technology V1.0_21 ICMPv6和NDP

HCIP-Datacom Core Technology V1.0_21 ICMPv6和NDP 在IPv4常用的排错命令比如Ping和Tracert都是基于ICMP去实现的IPv6中也定义了ICMPv6的版本除了提供类似基于IPv4的功能以外还有其他扩展其中最重要的邻居发现协议也是基于ICMPv6去实现的本章课程将详细的介绍ICMPv6和邻居发现协议NDP。ICMPv6介绍ICMPICMP协议作为IP协议的辅助它主要用作于网络设备之间去传递信息的时候来进行一个差错和控制信息可以通过该协议收集各种网络的信息包括故障诊断等等。设备之间通过传递ICMPv6的消息通过ICMP报文里面的一个不同的Type和Code的组合帮助去判断该网络是否正常运行还是发生怎样的故障。ICMP差错检测它主要是用在差错控制和错误报告里面。经常使用的命令ping命令它是用于帮助去判断网络设备间从源到目的的可达性是否正常ping命令就是基于ICMP去实现的。通过发送Echo Request和Echo Replay这两个报文帮助去诊断网络是否发生故障从简单的故障里面能够看出什么比如说按照图中的案例在R1上去ping20.0.0.2通过返回的数据包能够得知TTL发送数据字节大小超时时间最后总结了一下发送的信息的统计最大延时最小延时以及发包和收包这样的一个丢包率这样就能够帮助去判断想要去测试从源到目的之间的这样的一个稳定性状态。同时ping命令后面可以跟很多参数比如说指定-a -s指定源IP地址指定发送数据包的次数指定ICMP报文的长度通过构建不同的参数帮助在不同的应用场景下去判断想要测试的各个条件这就是用作差错控制的这样的一个消息通过ICMP的Echo消息去传递。ICMP错误报告错误报告是通过第二个常用命令Tracert来去实现的Tracert的工作原理通过Tracert报文里面的TTL值然后去判断沿途所经过的路径默认情况下初始的TTL是从1开始这样沿途所经过的设备就会将TTL数值减1然后向源端发送一个数据包超时的报文这样就包含着自己本身接口的IP地址。第二次源端就会将TTL值增大变成2以次类推通过不停增大TTL的值去帮助判断沿途所经过每一个设备接口的IP地址主要通过TTL和设备返回的超时报文将这两个结合在一起就能够得知沿途的这样一个设备情况这样既能帮助去诊断网络的连接问题同时还能够帮助去判断沿途所经过的这样一个路径这就是ICMP的第二个错误报告。当网络发生故障通过tracert去验证的时候不仅能够判断是在哪一跳路由器上出的问题同时通过返回的报文里面所包含的错误信息可以大体判断出是链路问题是主机问题还是端口问题。帮助实现一个快速定位这样的目的。ICMPv6概述ICMPv6作为IPv6协议的基础之一它不仅帮助去判断链路的连通性以及错误报告等等还有一个最重要的NDPNDP在ICMPv6里面是一个非常重要的协议它能够实现很多功能。包括关于IPv6地址中的自动配置地址解析地址冲突检测等等。都是基于ICMPv6的NDP协议去实现的。和IPv4不同的在IPv6中报文关部的下一条字段如果是58的话标志着后续的报文是ICMP。ICMPv6报文格式首先通过IPv6里面的下一个报头里面的数值标识着后面的扩展报头是ICMPv6ICMPv6的报文格式非常简单主要分为三个部分组成Type Code以及校验和(Checksum),其中消息一共分为两大类第一个是差错消息第二个是信息消息其中信息消息主要是用在Ping命令里面的Echo Request和Echo Reply这两个。其中差错消息就非常多了当基于Tracert的应用去诊断链路发生故障通过Type和Code的这样的一个组合帮助去定位是哪里出现的问题是目的不可达还是数据包过长还是超时以及参数错误然后根据code的数值具体进一步去判断它产生目的不可达的原因比如说是无路由还是未指定还是地址不可达等等。这样就能够帮助去实现快速定位故障。ICMPv6报文类型及应用分别是差错报文以及信息报文差错报文主要是用于在转发IPv6数据包过程中出现的问题比如说目的不可达等等而信息报文不仅可以去验证连通性同时还可以实现在同一链路节点之间通信或者说子网内组播成员的管理也可以通过信息报文去实现。ICMPv6差错报文应用-Path MTU 发现在差错报文里面有一个非常典型的应用就是路径MTU不同于IPv4的是在IPv6的网络中中间设备不针对IPv6进行任何分片的只在源节点进行数据包的分片这个时候就可能会产生一个问题如果在数据包的源端发送数据过大沿途所经过的设备它接口的MTU比源端小这个时候它就一定需要产生分片而在IPv6里面又定义了只在源节点进行分片这样就可能产生一些冲突。于是为了避免冲突的产生在检查端到端之间MTU时要根据这条链路上最小接口的MTU进行设备防止数据名在中间的节点进行分片影响数据包的转发效率。其实它的工作原理大致上和Tracert的工作原理有点类似.第一次数据包PC1,将MTU设置为1500字节然后发送给下一跳设备但是下一跳设备发它自己接口的MTU最大取值是1400所以它会返回一个ICMPv6的报文给源端通知它可用的MTU最大为1400字节当PC1收到这样的一个消息之后它再一次发送数据包将它的MTU设置为1400字节给它的下一跳设备1400字节然后R1发现该数据包的1400字节和自己接口的MTU大小是相同的于是将它转发给自己接口的一下跳但是R2的接口MTU是1300字节所以它又向源端回复该链路上最大可用的MTU为1300字节就这样以此类推最后源端发送数据包的大小是根据端到端这条链路上某一个设备接口最小的MTU来决定的这样就避免了中途设备对数据包进行分片从而影响数据包的转发效率。这个功能又叫做Path MTU,路径最小的MTU检测。ICMPv6信息报文应用-Ping通过Echo Request和Echo Reply这两个报文帮助去验证从源端到目的端的连通性是否正常通过发送Echo Request和得到的响应Echo Reply,能够判断链路故障同时还能构建相关的参数去判断丢包率等等他们的Type字段分别是128,code为0Reply的字段是129Code为0。ICMPv6其它常用的报文邻居发现协议里面所用的报文分别是路由器请求和路由器公告它们的Type字段分别是133和134然后是邻居请求和邻居公告分别是135和136以及重定向功能。关于组播协议里面的组播侦听者发现协议组播侦听者发现协议下所定义的报文查询报告离开与基于IPv4的 IGMP协议相似。该协议用来维持最后一跳路由器和用户成员之间的关系帮助成员之间想加入自己想要加的组播组。同理该协议组播侦听者协议MLD它也是类似的功能只不过它针对的是IPv6网络它的工作原理和IGMP大体相同。NDP介绍NDP概述邻居发现协议非常重要。为什么非常重要。因为它类似于IPv4中的ARP协议在IPv6网络体系里面已经没有ARP协议NDP协议取代了ARP协议这样的一个位置。同时还定义了其他很多功能因此这是IPv6协议里面非常重要的组件。路由器发现是用于在链路上发现设备获取相关的通告信息。无状态自动配置IPv6有一个即插即用的功能它是通过无状态自动配置协议去实现的而无状态自动配置又是在NDP里面去完成的因此可见该协议是十分重要。NDP报文类型及功能NDP协议所有到的报文主要分为以下这几种在不同的应用场景中所使用的报文也不一样。路由器发现路由器发现这个功能是指在主机设备上面发现本地链路的路由器获取相关配置信息的一个过程它可以实现以下这三个功能第一个主机去定位邻居路由器选择一个作为自己的缺省网关。第二个前缀发现前缀发现是帮助主机完成一个即插即用获取IPv6单播地址前缀这样的一个功能它主是通过无状态自动配置协议去完成的第三个是获取相关其他的参数。所使用的报文主要是RS路由器请求RA路由器通告。路由发现的应用场景主要分为两种第一种是主机主动发送路由器请求报文然后等待路由器的响应。第二种是路由器周期性的去通告它的报文信息然后携带着相关参数发送给主机。路由器发现流程-主机请求触发当主机上线的时候它就会向本地发送一个路由器请求报文该请求的目的地址是FF02::2该地址表示的是本地链路内所有路由器。当看到FE80的时候应该立马联想到这是链路本地地址这个时候可能会有一个疑问为什么该PC会有一个链路本地地址既然有链路本地地址要的IP地址要的是什么呢链路本地地址生成方式有哪几种链路本地地址是由它的前缀再加上接口ID标识符去生成的生成的方式一共有三种第一种用的是动态的EUI-64第二种是根据系统自动生成后面的接口ID。比如说主机一般运行的是WINDOWS系统它就能根据Windows系统自己去生成一个链路本地地址。第三个管理员手工静态去配置。那也就是说使用链路本地地址向该本地链路的所有路由器获取一个IP前缀这个IP前缀本的是什么呢全球单播地址的前缀当路由器收到之后会通过路由器通告报文去响应然后回复给PC1,它的目的地址是FF02::1该地址表示的是同一网段内所有路由器和主机有点类似于IPv4中的224.0.0.1。其实在回复路由器通告报告里面应该包含了它自己想要给主机分配的全球单播地址前缀以及其他标识位。当主机收到这样的通告报文之后就能够根据相关的参数信息建立路由表选择缺省网关然后转发数据包。路由器发现流程-路由器周期性发送路由器周期性的向主机发送路由器通告报文但是这个周期它并不是固定的是在200秒到600秒内随机取一个时间值然后周期性的通告它通告的过程中包含了自己本身接口的全球单播地址的网络前缀通过通告报文发送给本地链路的主机网段当主机收到这样的一个通报报文之后获取相关的参数信息然后去配置自动生成一个IPv6全球单播地址进行通信。地址解析因为IPv6没有广播的概念因此就没有了ARP协议但是在数据包封装的过程中除了网络层地址还要去封装数据链路层的目的MAC地址如何获取MAC地址呢因此必须想办法找一个协议去取代ARP能够获取对方的MAC地址这样的一个功能因此地址解析就能够完成ARP这样的一个功能。地址解析协议主要是通过邻居请求报文和邻居通告报文来实现的。在三层完成二层地址解析它的好处是什么呢针对不同的二层介质全部在三层完成地址解析这样就能够使地址解析统一化。而不需要根据不同的数据链路层的介质来分别用不同的协议去解析对方的地址。第二个可以使用IPv6的三层安全机制避免一些地址攻击第三个通过组播的形式发送请求报文避免了二层性能的压力也就是说不再有广播报文通过发送组播报文的形式来避免了广播泛滥。邻居请求报文里面包含了哪些参数。自己的源IP地址在地址解析协议时面发送的邻居请求报文的源IP地址是自己接口的全球单播地址目的地址是对方接口IP地址所对应的被请求节点组播地址这样发送被请求节点组播地址的好处是什么呢第一个避免了广播第二个只有相应的全球单播地址它才能生成相应的被请求节点组播地址也就是说其它设备节点正常情况下是无法接收的保证了交互的稳定性。然后携带了自己的链路层信息也就是自己的MAC地址当对方收到这样一个路由器请求报文之后其实PC2,就得知了对方的全球单播地址以及对方的 MAC地址然后就会将这样的关系作为一个映射缓存在自己的邻居表中帮助自己实现数据的转发邻居缓存表有点类似于在IPv4中的ARP表同时会回复一个邻居通告报文包含了自己的相关信息然后回复给PC1,这个里面也包含了自己的IP地址自己的MAC地址同理PC1收到这样回复的邻居通告报文之后也会将相关的信息作为一个映射然后存储在自己的邻居缓存表中到此就完成了地址解析这一过程。邻居状态跟踪当解析完链路层协议这个时候要查看IPv6的邻居表就可以发现对方接口IP地址和MAC地址的映射关系通过命令display ipv6 neighbors,能够看到对方接口的IP地址对方的链路层地址然后一些其他信息其中有一个比较重要的一点就是邻居状态邻居状态代表的是什么呢IPv6邻居状态关于IPv6邻居状态好像在IPv4中并没有所谓的邻居状态这样一概念大部分是在路由协议里面才会出现而在IPv6中每一个节点都需要去维护关于IPv6这个协议的邻居状态这样的好处是什么呢在IPv6中去维护这样的一个邻居状态变化表当设备正式进行通讯之前通过邻居状态变迁就可以得知对方的设备是否可以正常到达而这一点本身在IPv4中ARP协议是无法完成的因此可以说在IPv6中所谓的邻居状态能够帮助我们更好更快的去判断邻居之间是否能够正常进行通信。第一个状态Incomplete表示的是邻居不可达该状态表明地址解析正在进行或者说没有探测到链路层地址第二个是Reachable状态那表明该状态下用户正式就可以发送数据进行通讯了。后面的三个状态其实比较有意思都是用来表示邻居状态未可知的同时在不同的时间内都会发生相应的变迁。邻居状态迁移邻居状态的迁移主要是通过邻居请求报文和邻居通告报文实现的。以R1主动发送邻居请求报文给R2,同时关注一下邻居状态会发生怎样的变迁。首先初始状态是空(Empty)状态然后R1正式发送邻居请求报文给R2,这个时候会从初始状态进入到Incompliet的状态因为还没有接收到R2回复的NA报文代表地址解析还没有完成并没有获取到对方的目的MAC地址当收到对方发送的NA报文的时候代表地址解析已经完成IPv6的邻居表里面就会有相应的IP地址和MAC地址表的映射这个时候状态会进一步从Incomplete状态变成到Reachable状态代表是可达的在这个状态下其实R1和R2之间就可以正式帮助用户完成 数据通信。但是如果在到Reachable状态30秒以内并没有任何实际的数据到达R1上面完成通信这个时候经过30秒之后它的状态会变成Stale陈旧状态可以看作30秒有点类似于老化时间一样在这30秒内老化时间内并没有进行任何数据通信状态就会进入到Stale状态。这是第一种状态Reachable状态进入到Stale状态需要经过30秒的老化时间。还有一种特殊的情况之前已经学习关于关于对方IP和MAC地址的这样的一个映射放到自己的缓存表中如是又一次收到R2主动发送给我的第二次非请求NA报文里面还包含了路由器的MAC地址但是和之前的缓存表里面包含的映射关系不一样这个时候立马就会从Reachable状态切入到 Stale状态那是分两种应用场景如果进入到Stale状态下面现在想要进行通讯了这个时候该怎么办这个时候R1会主动发送邻居请求报文给R2并等等R2响应所以状态会变成Delay如果在固定时间内R2响应了那代表IPv6这样的一个邻居状态又被重新激活了因此状态会回到Reachable状态帮助用户实现数据通信。如果在固定的时间内仍然没有得到响应状态会进一步进行变迁再回到下一个状态Probe状态可以就要再接着去催对方回复了会每隔一秒连发三次邻居请求报文等待R2的回应如果在Probe状态R2响应了那么这个时候邻居状态就会被激活再回到Reachable状态但是如果在最后的Probe状态依然没有得到响应状态重新回到初始状态开始建立我们之间的邻居关系。因此简单来概括一下它的邻居状态变迁如果想要帮助用户实现通讯状态是要在Reachable状态但是在Reachable状态只维持了30秒时间如果在这30秒内并没有任何数据进行通信它就会切到相应的状态等待被激活它这也是一个非常简单的邻居状态变迁。
返回列表