《IPv6协议分组格式及其特点.ppt》由会员分享,可在线阅读,更多相关《IPv6协议分组格式及其特点.ppt(93页珍藏版)》请在三一办公上搜索。
1、IPv6协议分组格式及其特点,IPv6协议分组格式及其特点,许多年来,第4版IP(IPv4)在互联网环境中起了一个中心的作用。实践证明,它是足够灵活的,可以在许多不同的网络技术上工作。然而在Internet的早期,使用它的人典型地是在学术机构、高技术公司和研究实验室工作的研究人员和科学家,主要目的是通过电子邮件交换科学数据。在上个世纪90年代WWW和个人计算机的广泛使用把Internet的用户改变为一般民众。这一改变产生了对新的IP地址的巨大需求,当前的32位IP地址或早或晚将会被用尽。,IPv6协议分组格式及其特点,总体评价:IPv6是比较简单的、易于编程的、比以前的版本更有效的协议。基本观
2、点:如果IPv4包含任何主要的错误,那么Internet在过去的年代里不可能如此地成功。IPv4是一个很好的设计,IPv6应该保留它的大多数特征。也许可以简单地增加地址空间,而让其它什么都不变。然而基于前瞻性的考虑,IPv6是建立在对IP的功能有增加的设计思想上。IPv6不是IPv4的简单演进,而是有实质性的改进。,1.1IPv6头格式,IPv6的头格式由64位头后随128位源地址和128位目的地址组成,总长度是40个字节。该头的起始64位由下列域组成:*版本域(4位)*交通类别(8位)*流标记(20位)*载荷长度(16位)*下一个头的类型(8位)*跳段限制(8位),1.1IPv6头格式,1.
3、1IPv6头格式:两个头的比较,新的头实际上要比经典IP的头简单。新头仅有6个域和两个地址,而老头有10个固定域,两个地址,以及一些选项。,1.1IPv6头格式:两个头的比较,IPv4的分组格式如上页中的图所示,IP分组头的长度为4个字节(32位)的整数倍。固定头部分的长度是20个字节,从任选项往后是可变长部分,这一部分也可以没有,以下我们对分组头中的段逐个加以解释。(1)版本号 该4位段表示协议支持的IP版本号。在处理IP分组之前,所有IP软件都要检查分组的版本段,以便保证分组格式与软件期待的格式一样。如果标准不同,机器将拒绝与其协议版本不同的IP分组。本书给出的是对版本为4的IP的描述,版
4、本1-3现已过时不用。(2)IP分组头长 该4位表示IP分组头的长度,以32个二进制位(4个字节)为单位,取值的范围是5-15(缺值是5)。由于IP分组头的长度是可变的,故这个段是必不可少的。,1.1IPv6头格式:两个头的比较 IPv4分组头,(3)服务类型 该8位段说明分组所希望得到的服务质量。它允许主机指定在网络上传输分组的服务种类,也允许选择分组的优先级,以及希望得到的可靠性和资源消耗,该段的目的是请求网络提供所希望的服务。如下图所示,服务类型段的头3位表明IP分组的优先权,该值在0(正常)到7(网络控制)之间变化,数值越大则IP分组越重要。但大多数TCP/IP产品和实际使用TCP/I
5、P的所有硬件都忽略该3位域,用相同的优先权处理所有IP分组。接下来的3位控制网络的延迟时间、吞吐率和可靠性,如果置零则表示常规服务,如果置1则分别表明短延迟、高吞吐率和高可靠性,最后两位未使用,置成零即可。,1.1IPv6头格式:两个头的比较 IPv4分组头,1.1IPv6头格式:两个头的比较 IPv4分组头,(4)IP分组总长度 该16位段给出IP分组的总长度,单位是字节,包括分组头和数据的长度。数据段的长度可以从总长度减去分组头长度计算出来。由于总长度段有16位,所以最大IP分组允许有65535个字节。但这样大的IP分组在现有物理网络上传输可能不太现实,尽管应用程序有时可能需要传送大的数据
6、报文。IP规范规定,所有主机和路由器至少能支持576字节的分组长度。需要指出的是,IP分组在网络传送过程中被分成报片的情况下,分片后形成的IP分组中的总长度段指的是单个报片的总长度,而不是原先IP分组的总长度。,1.1IPv6头格式:两个头的比较 IPv4分组头,(5)标识符 16位的标识符段包含一个整数,唯一地标识该IP分组。IP分组在传输时,其间可能会通过一些子网。这些子网允许的最大协议数据单元(PDU)长度可能小于该IP分组的长度。为了处理这种情况,IP为以数据报方式传送的IP分组提供了分片和重组的功能。这也正是IP模块的主要功能之一。当一个路由器分割一个IP分组时,要把IP分组头中的大
7、多数段值拷贝到每个分组片中,标识符段必须拷贝。它的基本目的是使得目的地知道到达的哪些分组片属于哪个IP分组,源发方计算机必须为发送的每个IP分组分别产生一个唯一的标识符段值。为此,IP软件在计算机存储器保持一个全局计数器,每建立一个IP分组就加1,再把结果放到IP分组标识符段中。,1.1IPv6头格式:两个头的比较 IPv4分组头,(6)标志 3位的标志段含有控制标志,如下图所示,3位中的低序2位控制IP分组的分片,这2位分别称作不可分片位和还有分组片位。当不可分片位置1时,规定不要将IP分组分片。仅当完整的IP分组才是有用的情况下,应用程序才可选择禁止分片,例如,考虑一台计算机的引导序列。在
8、这个序列中,机器开始时执行ROM上的一个小程序,通过Internet去请求一个初始引导软件,作为响应,另一台机器送回来一个内存映象。如果该软件设计成要么需要整个映象,要么一点也不使用,那么就应将不可分片位置1。,1.1IPv6头格式:两个头的比较 IPv4分组头,1.1IPv6头格式:两个头的比较 IPv4分组头,标志段的低位标明这个分组片包含的数据是取自原始IP分组中间,还是取自原始IP分组的最后,为什么需要这个“还有分组片”位呢?在分片的情况下,在最终报宿中的IP软件需要重新组合IP分组。当一个分组片到达时,分组头中的总长度段是指该分组的长短,而不是原来分组的长短,所有报宿不能用这个总长度
9、段判断该分组的所有分组片是否已收集齐全。有了“还有分组片”位,这个问题就容易解决了。一旦报宿收到一个分组片,如果它的“还有分组片”位置0,就知道这个报片中的数据取自原始分组的尾部。根据“分组片偏移”段和总长度段,接收端便可以知道,重组整个原始IP分组需要的所有数据的分组片是否都已到达。,1.1IPv6头格式:两个头的比较 IPv4分组头,(7)分组片偏移 13位的分组片偏移段标明当前分组片在初始IP分组中的位置。为了重组IP分组,报宿必须得到从偏移0开始,直到最高偏移值之间的所有分组片。这些分组片不需要按顺序到达,接收分组片的报宿与分割IP分组的路由器之间不进行通信,报宿也能重新组合IP分组。
10、分组片偏移以64位(8个字节)为单位,取值范围0至8191,缺省值是0。(8)生存时间 8位的生存时间段指定IP分组能在互联网中停留的最长时间,以秒为单位。当该值降为0时,IP分组就应被舍弃。该段的值在IP分组每通过一个路由器时都减去1。该段决定源发IP分组在网上存活时间的最大值,它保证IP分组不会在一个互联网中无休止地往返传输。,1.1IPv6头格式:两个头的比较 IPv4分组头,(9)协议 8位的协议段表示哪一个高层协议将用于接收IP分组中的数据。高层协议的号码由TCP/IP中央权威管理机构予以分配。例如,该段值的十进制表示对应ICMP(互联网控制报文协议)是1,对应传输控制协议(TCP)
11、是6,对应EGP(外部网关协议)是8,对应用户数据报协议(UDP)是17,对应ISO传输层协议第4类(ISO-TP4)是29。(10)分组头检验和 16位的分组检验和段保证IP分组头值的完整性,当IP分组头通过路由器时,分组头发生变化(例如生存时间段值减1),检验和必须重新计算。检验和的计算十分简单。首先,在计算前将检验和段的所有16位均置成0,然后IP分组头从头开始每两个字节为一个单位相加,若相加的结果有进位,那么将和加1。如此反复,直到所有分组头的信息都相加完为止,将最后的值对1求补,即得出16位的检验和。,1.1IPv6头格式:两个头的比较 IPv4分组头,(11)源地址 32位的源地址
12、段包含发送IP分组的源主机的IP地 址。(12)目的地址 32位的目标地址段包含IP分组的目的地主机的IP地址。(13)任选段 可变长的任选段提供了一种策略,允许今后的版本包含在当前设计的头中尚未出现的信息,也避免使用固定的保留长度,从而可以根据实际需要选用某些头部登录项。(14)填充段 如前所述,IP分组头必须是4个字节长的整数倍。填充段是为了使有任选项的IP分组满足4个字节长度的整数倍而设计的,通常用0填入填充段来满足这一要求。填充段的有无或所需要的长度取决于选择项的使用情况。,1.1IPv6头格式:两个头的比较,1.1IPv6头格式:两个头的比较,IPv4头的设计是基于1975年的技术状
13、态。20年以后,IPv6对其作了3个方面主要的简化:*对所有的头都分配固定的格式。*去掉头检验。*去掉逐跳分割过程。,1.1IPv6头格式:两个头的比较,IPv6取消了IPv4的6个域:头长、服务类型(8位3位优先级,另3位分别用于延迟、吞吐率和可靠性,还有两位未用)、标识符(用于分割)、标志(用于分割)、分割偏移(用于分割)和头检验和。重新命名并稍微改变了定义的有3个域:IP分组总长度、协议(说明上层协议)和生存时间(以秒为单位)。整个地修改了选项机制,并增加了两个域:交通类别(开头4位中的第1位用于两种交通类别的区分,其余3位用于各自的优先级;剩下4位可用于拥塞控制中经历拥塞的标记等功能)
14、和流标记。,1.1IPv6头格式:简化,仅有的含义和位置都未改变的域是开头4位。网络程序可以使用起始的版本域确定对分组的处理方式。如果该域的二进制码是0100(十进制4),就当作IPv4处理,如果是0110(十进制6),就被认为是IPv6分组。当然这样做并非是必需的。事实上在媒体层就可以区分开IPv4和IPv6。例如,在以太网上IPv6分组承载在类型域值为86DD的帧中,而不是IPv4的类型域值8000。,1.1IPv6头格式:简化,IPv6头不包含任何选项成分。但这并不意味着我们不可以对特殊分组表示选项。跟IPv4不同,IPv6的选项功能不是通过可变长选项取得的,而是把扩展头附加到主头后面。
15、其明显的结果是IPv6不再需要一个头长度。去除头检验的主要优点是减少了头处理的代价,因为没有必要在每一中继站都检查和更新检验和的值。其风险是未监测到的差错可能导致对分组作错误的路由选择。然而这种风险很小,因为大多数封装过程都包含一个分组检验和。事实上,在IEEE-802网络的媒体访问控制过程中,在使用ATM线路的适配层中,以及在用于串行链路的PPP协议的成帧过程中,都有检验和域。,1.1IPv6头格式:简化,IPv4包括一个分割过程,使得发送方可以发送大的分组而不用担心中继的能力。这些大的分组在必要的时候可以被分割成适当大小的片段。接收方等待所有这些片段的到来,并重组分组。然而,以往的实践表明
16、,这种分割与重组过程产生了一些负面效应。假定我们在仅能够运载小的片段的网络上尝试发送大的分组。一个分组的成功传输依赖于每个片段的成功传输。哪怕只有一个片段丢失了,整个分组必需重传,结果产生对网络的低效使用。,1.1IPv6头格式:简化,IPv6的规则是,主机通过一个称作通路MTU(最大传输单元)发现的过程应该能够知道可以被接受的最大片段尺寸。如果主机发送大的分组,这些分组将简单地被拒绝。因此IPv6不再像IPv4那样设立分割控制域(包括分组标识符,分割控制标志和片段偏移)。然而,IPv6包括一个端到端的分割规程。而且根据1996年的规范,所有的IPv6网络都被假定能够运载536字节的载荷。在I
17、Pv6的1997年版本中,Steve Deering提出把这个尺寸提升到1500字节的建议。不愿意发现或记住通路MTU的主机可以简单地发送小的分组。,1.1IPv6头格式:简化,IPv6的最后一项简化是去掉了服务类型(TOS:Type Of Service)域(3位表示优先级0-7,3位分别表示对延迟时间、吞吐率和可靠性的期望-0或1,剩下2位未用-保留)。在IPv4中,主机可以设置TOS的值,表示对最短的、最宽的、最可靠的(或最安全的)通路的期望。然而,应用程序并没有普遍地使用这个域。在IPv6中提供了处理这些期望的机制。,1.1IPv6头格式:对经典参数的修改,跟IPv4类似,IPv6头包
18、括分组长度指示、生存时间和协议类型。然而这些域的定义都被稍微地修改了。IPv4的分组总长度被IPv6的载荷长度代替了。这里有细微的差别,因为按照定义,载荷长度是在头后面运载的数据的长度。作为例子,假定载荷是一个TCP分组,包括20字节的TCP头和400字节的应用数据。在IPv4中,我们通常是在这个TCP分组的前面加上1个20字节的IPv4头,总长度将是440字节。在IPv6中,我们将加上一个40字节的IPv6头,但载荷长度将被设置成420(包括TCP报文段,也包括可能有的全部IPv6扩展头)。在IPv6中,载荷长度域也像IPv4总长度那样在16位上编码,这就把分组尺寸限制到64K字节。然而,I
19、Pv6使用巨大数据报选项(属于逐跳选项扩展头)提供对比较大的分组的传送服务。,1.1IPv6头格式:对经典参数的修改,IPv6把协议(类型)域重新命名为下一个头类型来反映新的IP分组结构。在IPv4中,IP头总是紧接着就后随传输协议数据,例如,一个UDP或TCP分组。在IPv6的情况下,如果IP分组封装TCP或UDP协议数据单元。那么头(包括扩展头)末尾的下一个头类型将被设置成协议类型TCP(6)或UDP(17)。,1.1IPv6头格式:对经典参数的修改,在IPv4中,生存时间域表示为秒的数量,说明分组在被丢弃以前允许在网络中还可以存在多长时间。生存时间的概念是基于对传输控制协议的理论分析。如
20、果允许分组在网络中无限期地存在着,那么老的拷贝可能在不可预期的时间退出,从而引起协议错误。IPv4规范强制每个路由器把生存时间域减少1秒,如果在路由中排队等待的时间较长,则减去这个等待时间(大于1秒)。但是,要精确地估计一个特定分组的等待时间是很困难的。由于这个时间通常是以毫秒计,而不是以秒计,大多数路由器只是简单地在每一中继处把TTL值减1。这一举动在IPv6中已经变成正规的做法了,所以相应的域名也改成跳段限制。它以跳段数目计算,而不以秒的数目计算。,1.1IPv6头格式:新域,IPv6头中有两个在IPv4中不存在的域:流标记和交通类别。这两个域主要是为了方便对实时交通的处理而设计的。交通类
21、别域有8位,开头4位中的第1位用于两种交通类别的区分,其余3位用于各自的优先级;交通类别域的剩下4位可用于拥塞控制中经历拥塞的标记等功能。流标记用以表示需要同样处理的那些分组,它们由一个特定的源发送给一个特定的目的地,并具有指定的一组选择。,1.2 从选项到扩展头,IPv4头允许有选项,可以对某些分组作特别的处理。早先的规范包括对安全性选择的编码,源路由选择,记录路由(用于路由跟踪)以及时间印迹。然而选项并未被普遍采用,主要是由于性能的问题。,1.2 从选项到扩展头,分组转发编码是路由器软件高度优化的部分。程序设计人员逐条地统计处理一个分组所需要的指令的条数,因为这个条数的任何减少都会产生更高
22、的性能。比竞争对手每秒可以转发更多个分组的路由器在市场上也更加容易获得成功。提高编码性能最常用的方法是关注最频繁出现的分组,让它们在程序中走最快的处理通路。具有选项的分组不能走快速通路,因为按照定义,它们需要特别的处理。它们常常被划归为第二类分组,由一个比较慢的欠优化的软件片段来处理。结果应用程序设计人员注意到,使用选项会引起性能缺陷。他们倾向于仅使用非常简单的分组。,1.2 从选项到扩展头,然而,人们有足够的理由需要对某些分组作特别的处理。例如,通过源路由选择请求一条特别的路由,或者指定接收方对一个分组作特别的处理。IPv6规范说明了如何通过扩展头来实现这类特别的处理。,1.2 从选项到扩展
23、头:头的菊花链,在IPv4中,作为载荷的TCP分组紧接在IP头的后面。在IPv6中在Internet头和载荷之间可能插入任意数目的扩展头。每个头用1个头类型表示,并运载在链中随后的头的类型,在最后一个扩展层头的情况下则是载荷的头类型。,1.2 从选项到扩展头:头的菊花链,1.2 从选项到扩展头:头的菊花链,当前的IPv6规范定义了6个扩展头:*逐跳选项头*路由选择头*分割头*身份验证头*加密安全载荷头*目的地选择头,1.2 从选项到扩展头:头的菊花链,每个扩展都用一个头类型标识。IPv6的下一个头域可以包含一个扩展头的类型,也可以包含载荷的协议类型,例如TCP或UDP。因此,头类型必须不能跟协
24、议类型冲突,它们从同样的一组256个数字中分配。协议类型域基本上跟IPv4相同(虽然有些协议类型略有不同),例如TCP是6,UDP是17,OSPF是89,ICMP(IPv4)是1,ICMP(IPv6)是2;而HBH(逐跳选项,IPv6)是0,RH(路由选择头,IPv6)是43,FH(分割头,IPv6)是44。,1.2 从选项到扩展头:路由选择头,在IPv6中对选项的处理最典型的例子是路由选择头,它的作用跟IPv4中的源路由选项相同。这个头主要运载分组将被中继经过的中间地址列表,源路由选择可以是严格的,也可以是松散的。路由选择头由一组参数后随一个地址列表组成。开头32位包含4个8位整数:*下一个
25、头。标识在头的菊花链中紧紧后随路由选择头的头的类型。*头长。用64位字的数目表示的头扩展长度,不包括开头64位(其中包括32个保留位)。*路由选择类型。设置成0。*剩余段域。分组到达该节点时在地址列表中剩余段的数目,该值的范围是从0到23。,1.2 从选项到扩展头:路由选择头,1.2 从选项到扩展头:路由选择头,紧接着的下一个32位是保留域,应该设置成0。路由选择头的剩余部分是一组128位地址的列表,编号从1到N。在IPv4中源路由编码在可选头域中,所有的路由器都需要对其进行检查,即使它们不被包括在源路由内明确说明的中继站列表中。因此对源路由分组的处理是非常缓慢的,该选项在实践中被使用得不多。
26、在IPv6中,路由器仅察看路由选择头来确定它们是否能识别出在主头的目的地域中它们自己的地址(源路由选择的IP分组的目标地址不一定是终点IP地址)。没有被明确地列在源路由列表中的中间路由器将转发分组而不作任何附加的处理。这应该能够产生比较好的性能。,1.2 从选项到扩展头:路由选择头,在目的地域中识别出自己的地址的站将检查路由选择头。它将检查在列表中是否还剩下至少1个域(如果不是这样,那么分组就已经到达源路由的终点,该站将跳过路由选择头去处理下一个头,其类型在下一个头参数中表明),如果是,该站将处理源路由选择。在源路由中的下一地址的位置从头扩展长度和剩余段数参数L推导出来。每个地址是128位长,
27、头扩展长度(不包括开头64位)是后随段(segment)的64位字的数目;因此,在列表中地址的数目N等于该长度的一半。要处理的下一地址在列表中的位置号是N-L(位置号范围是0至N-1)。,1.2 从选项到扩展头:路由选择头,所有的IPv6规范的实现必须都能够处理类型0路由选择头,而且这些实现也必须准备好碰到并处理其它的类型,然后采取某种默认操作。事实上,类型0路由选择头的所有类型都是一般路由选择头的子类型,它的组成是32位头后随类型特有的数据。32位头就是我们在前面介绍过的在类型0头中的4个8位参数。路由选择类型说明在使用哪一个版本。类型特有的数据的格式和处理源路由的规则在每个路由选择类型的规
28、范中解释。,1.2 从选项到扩展头:路由选择头,如果一个IPv6系统必须处理一个路由选择头。它将首先检查路由选择头类型和剩余段的数目。如果类型未知,分组应该被拒绝,并给源发送方返回一个ICMP错误报文(参数问题),其ICMP编码值为0,让参数(说明是什么样的错误)指向路由选择类型段。然而,剩余段值0表明该分组已经到达最后的目的地,即使系统不懂得指定的路由选择类型,它也应该接受这样的分组。,1.2 从选项到扩展头:分割头,跟IPv4不同,IPv6路由器不分割太大的分组,这种处理方式类似于IPv4把不可分割位隐含地设置成1。IPv6路由器拒绝其长度大于下一跳MTU的分组,并往回发送一个ICMP报文
29、。然而IPv6在主机把分组往网络上发送之前可以进行分割。假定我们要在以太网接口上发送一个2800字节的载荷,并且知道该以太网的MTU是1500。此时,我们需要发送两个分组,每个分组的最大尺寸是1500字节。在这两个分组中,我们都要在IPv6基本头和载荷之间插进一个分割头。,1.2 从选项到扩展头:分割头,1.2 从选项到扩展头:分割头,分割后的每个片段都是独立地进行路由选择。分割头包含足够的信息让目的地能够串接这些片段。除了下一个头参数以外,在IPv6的分割头中的域跟IPv4头的分割控制参数几乎相同。标识符同于IPv4的分组标识,显著的差别是用32位编码代替16位编码。分割偏移跟IPv4的偏移
30、域起同样的作用,但编码略有不同。IPv4使用一个16位字的13个最低有效位,IPv6则在最高有效位编码偏移域。在两种情况下分割都在64位字(8字节)的边界进行。IPv4偏移必须是8的整数倍,以得到字节偏移,而在IPv6中只要把3个最低有效位(8字节)置0就可以了。,1.2 从选项到扩展头:分割头,1.2 从选项到扩展头:分割头,1.2 从选项到扩展头:分割头,主要的不同点体现在标志域。在IPv6头中没有分割控制(是否可分片),因为这个头仅当发送方决定分割分组时才插入。在IPv6中也有“还有片段”位(M),对于一个完全分组除最后一个片段外的所有片段,该位都要置1。,1.2 从选项到扩展头:目的地
31、选项头,给IPv6增加可选功能有两种方法。第一种方法定义了一个新的扩展头类型,透明地通过网络传送,仅被在目的地址中指定的站检查和处理。这种扩展方法有两个不方便之处。(1)它需要分配头类型号码。现在仅有256个这样的号码,用于扩展头,也用于诸如UDP、TCP、ICMP、OSPF这类载荷。它们是相对于稀少的资源,应当节约使用。(2)它需要源和目的地都懂得新的选项。如果一个站不懂得一个头的类型,它只能拒绝整个分组。,1.2 从选项到扩展头:目的地选项头,IPv6选项头消除了这种不方便性。它使用单个头类型(60)来定义一个一般的目的地选项头。该头作为一个参数包含一个或多个以选项类型标识的一个或多个选项
32、。该头仅有的参数是下一个头类型和一个8位的扩展头长度域。扩展头长度域表示在该选项头中64位字(8字节)的数目,其中不包括开头的64位(8字节)。作为例子,如果选项头仅由8个字节组成,那么长度域的值将是0。如果选项头有32个字节组成,那么长度域的值将是3(单位是8字节,83=24字节 24+8=32字节)。,1.2 从选项到扩展头:目的地选项头,1.2 从选项到扩展头:目的地选项头,选项类型段是选项类型的8位标识符(其编码见下页的图)。在它的后面是8位整数,即选项数据长度,表示在选项数据段中的字节的数目。某些选项仅仅提供关于分组上下文的附加信息,或者表示倾向性。如果它们不被识别,则可以被安全地忽
33、略。处理节点可以只是跳过该选项数据域,其长度由选项数据长度字节标出,然后再继续处理在头中的剩余选项。与此相反,有一些选项是关键性的,则必须把分组丢弃。然而,当一个站丢弃一个分组时,一般的规则是往回发送一个ICMP报告。这可能是也可能不是发送方所期待的事情。动作位就是被用来指定所请求的动作。当发送一个ICMP报告时,应该把其编码设置成参数问题(2),参数应该指向未被识别的选项类型。,1.2 从选项到扩展头:目的地选项头,选项类型标识符的结构如下图所示:两个高序位编码如果处理节点不识别该选项时必须采取的动作。第3位表示该选项在路途中是否可以改变。最后5位表示选项号码本身。路途中改变位(c)表示该选
34、项可以被途中的中继站修改,类似于在路由选择头中的剩余段域。这类选项不被端到端的检验和计算。在目的地选项头的情况下C位一般都置0。,1.2 从选项到扩展头:目的地选项头,1.2 从选项到扩展头:目的地选项头,现在已经定义个两个选项,它们都是填充类的。第1个选项是Pad1,它由单个null字节(类型编码0)组成。作为例外,该null字节不应后随长度字节。我们可以使用任意多个null字节来填充在两个选项之间的缝隙,或者把选项数据域填充到最后的64位边界。然而,如果要跳过多个字节,我们应该使用第2个填充选项类型编码为1的Pad2,其长度域表示出应该跳过的字节的数目。,1.2 从选项到扩展头:目的地选项
35、头,1.2 从选项到扩展头:逐跳选项头,目的地选项头是常规的扩展头,他仅当分组到达最终目的地时才被处理。这跟IPv6尽量避免中间中继站做不必要的处理的总体思想是一致的。然而,某些管理功能或诊断功能需要给所有的路由器传递附加的信息。这正是逐跳选项头的目的。它用头类型0标识。在IPv6中的下一个头值null意味着存在逐跳选项头,即使目的地址不是本地节点地址也要对它进行处理。,1.2 从选项到扩展头:逐跳选项头,逐跳选项头具有跟目的地选项头同样的格式。逐跳选项也具有跟目的地选项同样的编码规则。在两个头中都有填充选项。选项域包含一个选项列表。每个选项的编码是可变数目的字节。选项类型段是选项类型的8位标
36、识符。在它的后面是8位整数,表示在选项数据段中的字节的数目。,1.2 从选项到扩展头:逐跳选项头,1.2 从选项到扩展头:逐跳选项头,1.2 从选项到扩展头:逐跳选项头,已经定义了一个巨大载荷选项(用于宽带通路,允许大的帧长),该选项类型194(8位)把IPv6头的载荷长度域置成0。处理节点解码,求得实际的分组长度,并编码为32位整数。选项类型194(8位)的对准需求被确定为4n+2(2表示下一个头和扩展头长引起的2个字节偏移),因此,长度域本身起始于32位边界(接在选项数据长度之后)。如果长度小于65,535(16位)字节,不应使用巨大载荷选项。如果分组运载一个分割头,也不应使用巨大载荷选项
37、。,1.2 从选项到扩展头:逐跳选项头,1.2 从选项到扩展头:逐跳选项头,在一些情况下,发送给目的地的信息会影响所有中途的路由器。例如,有的多播路由算法使用管理分组标记数据将要遵循的分布树,而资源预留协议(RSVP)使用报文标记随后要在其上执行预留的通路。使用逐跳选项,一个源将可以把一些分组标记成包含在前往目的地的通路上所有的路由器都应该查看的信息。当然,要达到这个目标,可以在每定义一个新算法时,定义一个新的逐跳选项。然而,这样做可能还是不够的。例如,我们可能需要对管理报文进行身份验证,因此仅在剥离逐跳选项头和身份验证头之后才可以对这些报文进行处理。其解决方案是定义一个类属“路由器警报”选项
38、,目的是警示路由器,分组包含需要它仔细察看的特别信息。,1.2 从选项到扩展头:逐跳选项头,1.2 从选项到扩展头:扩展头顺序,一个分组可以包含多个扩展头。这对于接收节点,应该不是一个问题,他只须按照接收的顺序处理各个头。早期的设计文档把这描述成“洋葱剥皮”过程。依次处理每个相继的层,就像剥去洋葱的每一层皮那样。不过有些层次还有它们自己的特殊性。例如,被分割了的分组在做进一步的处理之前必须进行重组。仅当在最后一个片段到达之后,节点才能够开始剥开下一个头。路由选择头的情况则不同。如果一个节点不是中继站列表中的最后一个,它应该更新目的地域,并转发分组,而甚至不用查看下一个头(用不着做在其它扩展头中
39、规定的其它处理)。,1.2 从选项到扩展头:扩展头顺序,处理顺序由菊花链中头的顺序决定。这个顺序由初始的发送方指定。IPv6规定包括一个推荐的顺序:1.IPv6头 2.逐跳选项头3.目的地选项头(1)-非最终目的地,例如隧道选项 4.路由选项头5.分割头 6.身份验证头 7.目的地选项头(2)-最终目的地8.上层头(例如TCP或UDP),1.2 从选项到扩展头:扩展头顺序,这些头中的每一个都是可选的。如果不使用逐跳选项,那么就没有必要插入一个逐跳头。如果不想强制一个特别的路由器,那么就不使用路由选择头。如果分组小于通路的MTU,那么就不使用任何分割头。所建议的顺序实际上是一个头的排列,它为实现
40、提供指南。可以看到在排列中目的地选项头出现了两次。如果我们要指定隧道选项,并且该选项要被所有的中继站处理,那么我们就需要把这些选项放到路由选项头的前面。而在另一方面,如果我们要把信息传递给最后的目的地,我们就需要把该选项头插在紧挨上层头的前面。,1.2 从选项到扩展头:扩展头顺序,如果要在通路中强行指定仅一个中继站,那么我们可以用一个完全的IPv6分组来代替路由选择头,以此来建立一个隧道(IPv6分组封装IPv6分组)。封装IPv6的头类型是41。这个封装载荷具有跟路由选择头同样的顺序。对头的这样处理将会快一些,因为在封装前的所有数据都会被简单地忽略。有时也需要发送一个不包括任何上层数据的分组
41、,例如,为了诊断的目的就可能这样做。在这种情况下,头的菊花链应该以一个“无下一个头”类型结束,其值是59。,第2单元 IPv6对ICMP和高层协议的影响,2.1 ICMP的演变 2.1.1 错误报文2.1.2 IPv6 Ping2.2 IPv6对高层协议的影响2.2.1 高层检验和2.2.2 在域名服务中的IPv6,2.1ICMP的演变,在定义IPv6期间对Internet控制报文协议(ICMP)也进行了修订。删除了一些在IPv4 ICMP中存在但现在已经不再被使用的功能。通过结合进IPv4组成员协议(IGMP),协议变得更加完整。扩展了一些格式以运载IPv6比较大的域。结果,新的ICMP与旧
42、的不兼容。为了避免混淆,它用一个不同的头类型2(而不是1)来标识。类型2事实上已用于IPv4的IGMP。,2.1ICMP的演变,2.1ICMP的演变,所有的IPv6 ICMP报文都具有同样的总格式。由类型、编码、检验和可变长度的本体组成。检验和根据一般的IPv6规则进行计算。它覆盖ICMP报文本身和IPv6头中固定的几个域(参见下页的插图)。报文体确切的格式以及不同的编码参数值取决于ICMP类型。现在的IPv6规范已经定义了14个不同的ICMP类型。编码1到4描述错误报文。编码133、134、135、136和137用于邻居发现和自动配置过程。编码130到132用于组成员管理过程。,2.1 IC
43、MP的演变,2.1ICMP的演变,2.1 ICMP的演变,类型为133的ICMP报文(路由器征求)由自动配置其IP地址的主机发给在链路上的路由器。路由器则用类型为134的ICMP报文(路由器通告)应答,其中包括请求站配置地址需要的前缀信息。邻居征求和邻居通告ICMP报文用以代替IPv4的地址解析和路由器发现协议,并用以作重复地址检测,一旦配置了一个地址,主机就向那个地址发送一个请求报文,并且等待1秒钟。如果另一个站配置了同样的地址,它将应答,并通告它的链路层地址,从而暴露出冲突。,2.1 ICMP的演变 2.1.1 错误报文,每当一个IPv6节点丢弃一个分组时,它可以给源发送方发送一个ICMP
44、错误报告。然而,该节点不应对多播分组发送错误报告,因为这可能产生大量的报文交通量。也不应该对ICMP分组发送错误报告,因为这可能产生关于ICMP错误报文的无限循环。具体的ICMP类型描述拒绝一个分组的原因是目的地不可达、分组太大、生存期超额、或者是参数问题。所有的错误报文都具有类似的格式。64位头包含ICMP类型、编码和32位参数。ICMP分组的其余部分包含原始分组的一个拷贝。如果原始分组太大,在一个576字节的报文内放不下,就把拷贝内容截尾。,2.1 ICMP的演变 2.1.1 错误报文,2.1 ICMP的演变 2.1.1 错误报文,编码和参数的含义取决于ICMP类型。在目的地不可达报文的情
45、况下,类型设置成1,参数域不使用,应该设置成0,编码域取决下列几个值之一:0 无通往目的地的路径1 管理规则禁止对目的地的通信2 分组太大(类型1,使用编码域)3地址不可达4端口不可达,2.1 ICMP的演变 2.1.1 错误报文,当路由器不知道到达最终目的地的任何通路时应该使用编码0(无通往目的地的路径)。编码1(管理规则禁止对目的地的通信)典型地用于防火墙,限制分组进出一个特定的网络,以取得某种程度的安全性。编码3(地址不可达)用于分组快要到达最终目的地但由于诸如最后的路由器不能解析对应于IPv6地址的链路层地址这样的原因而不能投递的情况。,2.1 ICMP的演变 2.1.1 错误报文,对
46、于分组太大的报文,可以将类型设置成2,不使用编码域,应该设置成0,参数域包含下一条链路的最大传输单元(MTU)。这些报文允许主机有效地实现MTU发现过程。他们开头发送一个大的分组,采用本地接收许可的尺寸。如果这个尺寸对于通路中的某一个链路是太大的话,相关节点会给出其下一跳链路的MTU。此后发送方会立即用这个新值进行尝试。如果另一个下行链路有进一步的限制条件,发送方将收到另一个错误报文,并用这个新的MTU再次尝试。实践经验表明,该算法能够向着一个可接受的值迅速收敛。除了这个一般的规则,分组太大报文还可以针对一个IPv6多播地址。这将允许通路发现过程也适用于IPv6多播。,2.1 ICMP的演变
47、2.1.1 错误报文,在超时报文的情况下,类型值是3,不使用参数域,应该置成0,编码域可以取下列二值之一:0:中转跳段数目超值1:分片重组超时跳段限制超额报文在中转过程中路由器丢弃分组时发送。当一个IPv6分组使用分割头以一组片段的形式发送时,如果有片段丢失,则会发生分割重组问题。每当IPv6节点开始重组一个分组时,他们将启动一个定时器。超时器应该安排在1到2分钟的时间。如果超时时间在最后一个片段到达之前期满,将要丢失一个分组。,2.1 ICMP的演变 2.1.1 错误报文,当接收节点不能够处理一个到来的分组时,就发生了参数问题。ICMP类型是4,参数域包含一个指针。它标识在到来的分组内发现问
48、题的字节偏移。有3种可能的编码值:0错误的头段1不可识别的下一个头类型2不可识别的IPv6选项在长的菊花链头的情况下,指针可能有一个大的值,它实际上指向输入分组的一部分,而且该部分不可能拷贝到ICMP报告中。,2.1 ICMP的演变 2.1.2 IPv6 Ping,回送请求和回送应答报文具有同样的格式。当一个IPv6节点要从远方节点触发一个回送时,他发送一个回送请求。类型段应该置成128,编码段应该置成0。节点可以选择一个标识符值(类似服务访问点,标识会话),以帮助应答跟请求的匹配。如果它发送多个相继的请求给同一目的地,它将给他们分配相继的序列号。回送应答发送给输入分组的源地址。ICMP回送应
49、答报文跟输入报文几乎相同。仅有的差别是类型域(被设置成129)和需要重新计算的检验和域。,2.1 ICMP的演变 2.1.2 IPv6 Ping,2.2 IPv6对高层协议的影响,改变IP协议对上层有一些影响。这种影响是最小的,因为IPv6数据报服务跟经典的IP服务相同。然而,诸如TCP或UDP这样的传输协议的实现将必须更新,以适应较大的IP地址。ICMP报文格式的更新也类似。这些协议的规范至少在计算传输层检验和时需要考虑新的地址。新定义的地址对应用本身也有影响。名字服务必须返回长的IPv6地址,应用必须把该地址通过编程接口传送给运输协议。,2.2 IPv6对高层协议的影响 2.2.1 高层检
50、验和,像TCP或UDP这样的传输协议附加一个检验和到它们的分组。这个检验和的目标是检测传输差错,即在链路上传输期间或在一个路由器的存储器内被改变了的位或字节。检验和的计算基于一个想象的分组,它由实际要传输的传输分组跟一个伪头串接形成。,2.2 IPv6对高层协议的影响 2.2.1 高层检验和,2.2 IPv6对高层协议的影响 2.2.1 高层检验和,伪头的定义是TCP或UDP规范的一部分,事实上也是任何在其检验和计算中包括IPv6地址的上层协议的规范的一部分。这个部分应该更新,以反映出地址尺寸的改变。TCP和UDP伪头的新版本根据IPv6规范确定,它包括源和目的地的IPv6地址,下一个头类型和