
IPv6网络协议技术.doc
31页IPv6网络协议技术 目 录第1章. 简介 1第2章. IPV6报文格式 2第3章. ICMPV6协议 3第4章. IPV6地址发现协议 64.1 邻居发现协议的功能 9第5章. IPV6地址 12第6章. IPV6寻址模型 14第7章. IPV6地址类型 157.1 单播 157.2 组播 19第8章. IPV6扩展头 228.1 扩展头 228.2 扩展头的用法 228.3 扩展头的标识 238.4 扩展头的顺序 238.5 选项 258.6 逐跳扩展头 258.7 选路扩展头 268.8 分段扩展头 278.9 目的地扩展头 28第1章. 简介随着IP网络规模和业务的迅速发展,IP网络的用户数急剧增加,正因为如此,IP网络也暴露出越来越多的问题,如地址空间不足、QoS、安全问题等为了解决Internet的这些问题,尤其是解决地址空间不足的问题,IETF于1992年在IPv4的基础上定义了下一代的Internet协议,被称之为“Ipng”或“IPv6” IPv6解决的最大问题是扩大了地址空间,另外,它与IPv4相比在其它许多方面都具有优势,例如安全性、服务质量、移动性等IPv6的一个显著特点就是它具有“即插即用”功能。
即插即用使节点直接连接到网络后,不需要经过任何人工配置就能够使用,即插即用使网络的管理和控制变得更加简单;其次,节点只需要知道自己的链路层地址及本地网络的子网前缀,就能够通过IPv6的无状态或者全状态自动配置得到惟一的IPv6地址,从而成为网络的一部分;另外,IPv6还实现了更好的对节点移动性的支持这些功能都是通过邻居发现协议来实现的,同一个子网内的所有主机和路由器之间的交互也都是通过邻居发现协议来实现的 本章主要是介绍IPv6协议的基本原理本章主要内容:l IPv6报文格式l ICMPv6协议l IPv6地址发现协议l IPv6地址l IPv6 寻址模型l IPv6 扩展头第2章. IPv6报文格式在IPv6中,包头以64位为单位,且包头的总长度是40字节IPv6协议为对其包头定义了以下字段:版本长度为4位,对于IPv6,该字段必须为6长度为8位,指明为该包提供了某种“区分服务”RFC 1883中最初定义该字段只有4位,并命名为“优先级字段”,后来该字段的名字改为“类别”,在最新的IPv6Internet草案中,称之为“业务流类别”该字段的定义独立于IPv6,目前尚未在任何RFC中定义。
该字段的默认值是全0长度为20位,用于标识属于同一业务流的包一个节点可以同时作为多个业务流的发送源流标签和源节点地址唯一标识了一个业务流在RFC 1883中这个字段最初被设计为2 4位,但当类别字段的长度增加到8位后,流标签字段被迫减小长度来作补偿净荷长度长度为16位,其中包括包净荷的字节长度,即IPv6头后的包中包含的字节数这意味着在计算净荷长度时包含了IPv6扩展头的长度下一个头这个字段指出了IPv6头后所跟的头字段中的协议类型与IPv4协议字段类似,下一个头字段可以用来指出高层是TCP还是UDP,但它也可以用来指明IPv6扩展头的存在长度为8位每当一个节点对包进行一次转发之后,这个字段就会被减1如果该字段达到0,这个包就将被丢弃IPv4中有一个具有类似功能的生存期字段,但与IPv4不同,人们不愿意在IPv6中由协议定义一个关于包生存时间的上限这意味着对过期包进行超时判断的功能可以由高层协议完成长度为128位,指出了IPv6包的发送方地址目的地址长度为128位,指出了IPv6包的接收方地址这个地址可以是一个单播、组播或任意点播地址如果使用了选路扩展头(其中定义了一个包必须经过的特殊路由),其目的地址可以是其中某一个中间节点的地址而不必是最终地址。
第3章. ICMPv6协议IP节点需要一个特殊的协议来交换报文以了解与IP相关的情况ICMP正好适用于这种需求在IPv4升级到IPv6的过程中,ICMP也经历了一定的修改ICMPv6最新的定义在RFC 2463中定义ICMP报文可以用来报告错误和信息状态,以及类似于包的Internet探测(Ping)和跟踪路由的功能ICMP报文的产生来源于一些错误情况例如,如果一个路由器由于某些原因不能处理一个IP包,它就可能会产生某种类型的ICMP报文,并直接回送到包的源节点,然后源节点将采取一些办法来纠正所报告的错误状态例如,如果路由器无法处理一个IP包的原因是由于包太长而无法将其发送到网络链路上,则路由器将产生一个ICMP错误报文来指出包太长,源节点在收到该报文后可以用它来确定一个更加合适的包长度,并通过一系列新的IP包来重新发送该数据RFC 2463中定义了以下报文类型(没有包括该文档中定义的有关组的报文):目的地不可达参数问题回声请求回声应答下面将详细介绍这些报文目的地不可达这个报文由路由器或源主机在由于除业务流拥塞之外的原因而无法转发一个包的时候产生这种错误报文有五个代码,包括:0:没有到达目的地的路由。
这个报文在路由器没有定义IPv6包的目的地路由时产生,通常在路由器没有设置默认路由时会产生这种错误1:与目的地的通信被管理员禁止当被禁止的某类业务流欲到达防火墙内部的一个主机时,包过滤防火墙将产生该报文2:地址不可达这个代码指出在把IPv6目的地址解析到链路层地址时遇到了一些问题,或者在目的地网络的链路层上去往其目的地时遇到了问题3:端口不可达这种情况发生在高层协议(如UDP)没有侦听包目的端口,且传输层协议又没有其他办法把这个问题通知源节点时包太长当接收某包的路由器由于包长度大于将要转发到的链路的MTU,而无法对其进行转发时,将会产生包太长报文该ICMPv6错误报文中有一个字段指出导致该问题的链路的MTU值在路径MTU发现过程中这是一个有用的错误报文超时当路由器收到一个跳极限为1的包时,它必须在转发该包之前减小这个数值如果在路由器减小该数值后,跳极限字段的值变为0 (或者是路由器收到一个跳限制字段为0的包),那么路由器必须丢弃该包,并向源节点发送ICMPv6超时报文源节点在收到该报文后,可以认为最初的跳限制设置得太小(包的真实路由比源节点想象的要长),也可以认为有一个选路循环导致包无法交付。
在“跟踪路由”功能中这个报文非常有用这个功能使得一个节点可以标识一个包在从源节点到目的节点的路径上的所有路由器它的工作方式如下:首先,一个去往目的地的包的跳极限被设置为1它所到达的第一个路由器将跳极限减小到0,并回送一个超时报文,这样一来源节点就标识了路径上的第一个路由器然后如果该包必须经过第二个路由器的话,源节点会再发送一个跳极限为2的包,该路由器将把跳极限减小到0,并产生另一个超时报文这将持续到包最终到达其目的地为止,同时源节点也获得了从每个中间路由器发来的超时报文参数问题当IPv6头或扩展头中的某些部分有问题时,路由器由于无法处理该包而会将其丢弃路由器的实现中应该可以产生一个ICMP参数错误报文来指出问题的类型(如错误的头字段、无法识别的下一个头类型或无法识别的IPv6选项),并通过一个指针值指出在第几个字节遇到这种错误情况ICMPv6回声功能ICMPv6中包含了一个与错误情况无关的功能所有IPv6节点都需要支持两种报文:回声请求和回声应答回声请求报文可以向任何一个正确的IPv6地址发送,并在其中包含一个回声请求标识符、一个顺序号和一些数据尽管二者都是可选项,但回声请求标识符和顺序号可以用来区分对应不同请求的响应。
回声请求的数据也是一个选项,并可用于诊断当一个IPv6节点收到一个回声请求报文后,它必须回送一个回声应答报文在应答中包含相同的请求标识符、顺序号和在最初的请求报文中携带的数据ICMPv6回声请求/应答报文对是ping功能的基础ping是一个重要的诊断功能,因为它提供了一种方法来决定一个特定的主机是否与其他一些主机连接在相同的网络上第4章. IPv6地址发现协议邻居发现协议是IPv6协议的一个基本的组成部分,它实现了在IPv4中的地址解析协议(ARP)、控制报文协议(ICMP)中的路由器发现部分、重定向协议的所有功能,并具有邻居不可达检测机制 邻居发现协议实现了路由器和前缀发现、地址解析、下一跳地址确定、重定向、邻居不可达检测、重复地址检测等功能,可选实现链路层地址变化、输入负载均衡、泛播地址和代理通告等功能 邻居发现协议采用5种类型的IPv6控制信息报文(ICMPv6)来实现邻居发现协议的各种功能这5种类型消息如下 (1) 路由器请求(Router Solicitation):当接口工作时,主机发送路由器请求消息,要求路由器立即产生路由器通告消息,而不必等待下一个预定时间 (2) 路由器通告(Router Advertisement):路由器周期性地通告它的存在以及配置的链路和网络参数,或者对路由器请求消息作出响应。
路由器通告消息包含在连接(on-link)确定、地址配置的前缀和跳数限制值等 (3) 邻居请求(Neighbor Solicitation):节点发送邻居请求消息来请求邻居的链路层地址,以验证它先前所获得并保存在缓存中的邻居链路层地址的可达性,或者验证它自己的地址在本地链路上是否是唯一的 (4) 邻居通告(Neighbor Advertisement):邻居请求消息的响应节点也可以主动发送邻居通告以快速的通告链路层地址的变化 (5) 重定向(Redirect):路由器通过重定向消息通知主机对于特定的目的地址,如果不是最佳的路由,则通知主机到达目的地的最佳下一跳 IPv6的一个设计要求是:即使在一个受限制的网络内,主机也必须正确工作,可以不需要存储像路由器上的路由表,也可以不需要有固定的配置因此主机必须能进行自动配置,必须能学习到如何将数据发送到目的地的相关信息这些信息储存的存储器叫做缓存,这些数据结构是一系列记录的排列,称作表项每个表项储存的信息有一定的有效期,需要周期性地清除缓存中的表项,以保证缓存的空间大小 主机需要为每一接口维护以下信息 邻居缓存:一组有关单个邻居的表项,这些邻居接收到了最新的数据流。
表项是连接单播地址的关键,它包括的信息有:其链路层地址、指示邻居是路由器还是主机的标志、指向任何排队等待完成地址解析数据包的指针等邻居缓存表项还包括由邻居不可达检测算法所使用的信息,如可达状态、探测无应答的次数以及下一次邻居不可达检测发生的时间目的地缓存:一组有关最近收到数据流的目的地节点表项目的地缓存包括“在连接(on-link)”和“非连接(off-link)”目的地,并在其中提供一定程度的间接寻址目的地缓存能把目的地IP地址映射成下一跳邻居的IP地址,该缓存通过重定向消息进行信息更新如果在目的地缓存表项中存储与邻居发现没有直接关系的附加信息,例如路径MTU(PMTU)以及由传输协议设定的往返时间,则执行时会更加方便 前缀列表:规定一组“在连接(on-link)”地址的前缀组成的列表前缀列表表项产生于路由器通告接收到的信息每一个表项都有一个相关的失效计时器值(由通告信息确定),它用于在前缀失效时废弃这些前缀除非在后续通告中收到了一个新的(有限)值,否则特殊的“无限”计时器值规定前缀永久有效本地链路(1ink-local)前缀位于带有无限失效计时器的前缀列表,而不管路由器是。
