计算机网络笔记整理(七):下一代网际协议IPv6(IPng)

时间:2024-03-31 20:55:11

一、解决IP地址耗尽的措施

IP协议是因特网的核心协议,现在使用的IP协议(IPv4)无论从计算机本身的发展还是从因特网规模和网络传输速率来看,现在IPv4已很不适应了,最主要的问题就是32位IP地址不够用。
要解决IP地址耗尽的问题,可以采用以下三个措施:

  1. 采用无分类编址CIDR,使IP地址的分配更加合理;
  2. 采用网络地址转换NAT方法,可节省许多全球IP地址;
  3. 采用具有更大地址空间的新版本的IP地址,即IPv6。

尽管前两项措施的采用使得IP地址耗尽的日期推后了不少,但却不能从根本上解决IP地址即将耗尽的问题。

二、IPv6的基本首部

IPv6仍然支持无连接的传送,但将协议数据单元PDU称为分组,而不是IPv4的数据报。
IPv6所引进的主要变化如下:

  • 更大的地址空间。IPv6把地址增大到128位。
  • 扩展的地址层次结构。IPv6由于地址空间很大,因此可以划分为更多的层次。
  • 灵活的首部格式。IPv6数据报的首部和IPv4的不兼容,IPv6定义了许多可选的扩展首部,不仅可提供比IPv4更多的功能,而且还可以提高路由器的处理效率。因为路由器对扩展首部不进行处理(除逐级扩展首部外)。
  • 改进的选项。IPv6允许数据报包含有选项的控制信息,因而可以包含一些新的选项(IPv4所规定的选项是固定不变的)。
  • 允许协议继续扩充。可以增加新的功能。
  • 支持即插即用(即自动配置)
  • 支持资源的预分配。IPv6支持实时视像等要求保证一定的带宽和时延的应用。
  • IPv6的首部改为8字节对齐(即首部的长度必须是8字节的整数倍)。原来的IPv4首部是4字节对齐。

IPv6数据报在基本首部(base header)的后面允许有零个或多个扩展首部(extension header),再后面是数据,注意所有的扩展首部都不属于IPv6数据报的首部。所有的扩展首部和数据合起来叫做数据报的有效载荷(payload)或净负荷
如图1所示是IPv6数据报的基本首部,在基本首部后面是有效载荷,它包括运输层的数据和可能选用的扩展首部。
与IPv4相比,IPv6对首部中的某些字段进行了修改,如下:

  • 取消了首部长度字段,因为它的首部长度是固定的(40字节)。
  • 取消了服务类型字段,因为优先级和流标号字段合起来实现了服务类型字段的功能。
  • 取消了总长度字段,改用有效载荷长度字段。
  • 取消了标识、标志和片偏移字段,因为这些功能已经包含在分片扩展首部。
  • 把TTL字段改称为跳数限制字段,但作用一致。
  • 取消了协议字段,改用下一个首部字段。
  • 取消了校验和字段,加快路由器处理数据报的速度。数据链路层的UDP/TCP已经进行了差错处理。
  • 取消了选项字段,而用扩展首部来实现选项功能。
    由于把首部中不必要的功能取消了,使得IPv6首部的字段数减少到只有8个(虽然首部长度增大了一倍)。

计算机网络笔记整理(七):下一代网际协议IPv6(IPng)
首部中各字段的作用如下:

  • 版本(version) 占4位,指明协议版本,IPv6该字段为6。
  • 通信量类(traffic class) 占8位,区别不同的IPv6数据报的类别或优先级。
  • 流标号(flow label) 占20位。IPv6的一个新的机制是支持资源预分配,并且运行路由器把每一个数据报与一个给定的资源分配相联系。所谓“流”就是互联网上从特定源点到特定终点(单播或多播)的一系列数据报(如实时音频或视频传输),而这个“流”所经过的路径上的路由器都保证指明的服务质量。所有属于同一个流的数据报都具有同样的流标号。因此流标号对于实时音频/视频数据的传送特别有用。对于传统的电子邮件或非实时数据。流标号没有用处,置为0即可。
  • 有效载荷长度(payload length) 占16位,指明IPv6数据报除基本首部以外的字节数(所有扩展首部都算在有效载荷之内)。
  • 下一个首部 占8位,相当于IPv4的协议字段或可选字段。当IPv6数据报没有扩展首部时,下一个首部字段的作用和IPv4的协议字段一样,它的值指出了基本首部后面的数据应交付给IP上面的哪一个高层协议(如6表示TCP,17表示UDP)。当出现扩展首部时,下一个首部字段的值就标识后面第一个扩展首部的类型。
  • 跳数限制(hop limit) 占8位。用来防止数据报在网络中无限期地存在。源点在每个数据报发出时即设定某个跳数限制,每个路由器在转发数据报时,要先将跳数限制字段中的值减1。当跳数限制的值为零时,就要丢弃这个数据报。
  • 源地址 占128位。是数据报的发送端的IP地址。
  • 目的地址 占128位,是数据报的接收端的IP地址。

三、IPv6的扩展首部

  1. 扩展首部及下一个首部字段
    IPv6把原来IPv4首部中选项的功能都放在扩展首部中,并把扩展首部留给路径两端的源点和终点的主机来处理,而数据报途中经过的路由器都不处理这些扩展首部(只有一个首部例外,即逐跳选项扩展首部),这样就大大提高了路由器的处理效率
    RFC 2460中定义了以下六种扩展首部:逐跳选项/路由选择/分片/鉴别/封装安全有效载荷/目的站选项。
    每一个扩展首部都由若干个字段组成且长度也各不同。但所有扩展首部的第一个字段都是8位的“下一个首部”字段,此字段的值指出在该扩展首部后面的字段是什么。当使用多个扩展首部时,应按照以上先后顺序出现,高层首部总是放在最后面,如图2所示。
    计算机网络笔记整理(七):下一代网际协议IPv6(IPng)
  2. 分片扩展首部
    IPv6把分片限制为由源节点来完成。源点可以采用保证的最小MTU或者在发送数据前完成路径最大传送单元发现(Path MTU Discovery),以确定该路径到终点的最小MTU。当需要分片时源点在发送数据报前先把数据报分片,保证每个数据报片都小于此路径的MTU。因此分片是端到端的,路径途中的路由器不允许进行分片。
    分片扩展的首部如下图3所示:
    计算机网络笔记整理(七):下一代网际协议IPv6(IPng)
    其字段意义如下:

    • 下一个首部(8位) 指明紧接着这个扩展首部得下一个首部。
    • 保留(10位) 为今后使用。
    • 片偏移(13位) 指明本数据报片在原来的数据报中的偏移量,以8个字节为单位。
    • M(1位) M=1表示后面还有数据报片。M=0表示已经是最后一个数据报片。
    • 标识符(32位) 由源点产生的、用来唯一地标志数据报的一个32位数。每产生一个新数据报,就把这个标识符加11.采用32位标识符,可使得在源点发送同样的终点的数据报中,在数据报中的生存时间内无相同的标识符。

    采用端到端分片的方法可以减少路由器的开销,因而允许路由器在单位时间内处理更多的数据报。然而,端到端分片方法有一个重要的后果,就是改变了因特网的基本假设。
    因特网原来被设计为允许在任何时候改变路由,但IPv6就不能轻易地重新改变路由。因为改变路由可能也要改变路径的最大传送单元MTU。若新路径的MTU小于原来路径的MTU,那么就要解决这个问题。
    为此IPv6允许中间的路由器采用隧道技术来传送太长的数据报。当路径途中的路由器需要对数据报进行分片时,路由器既不插入数据报片扩展首部,也不改变基本首部中的各个字段。相反,这个路由器创建一个全新的数据报,然后把这个新的数据报分片,并在各个数据报片中插入扩展首部和新的基本首部。最后,路由器把每个数据报片发送给最后的终点,而在终点收到的各个数据报片收集起来,组装成原来的数据报,再从中抽取出数据部分。

四、IPv6的地址空间

  1. 地址的类型与地址空间
    一个IPv6数据报的目的地址可以是以下三种基本类型地址之一:

    • 单播(unicast) 传统的点对点通信。
    • 多播(multicast) 多播是一对多点的通信,数据报发送到一组计算机中的每一个。IPv6没有广播的术语,而是将广播看作多播的一个特例。
    • 任播(anycast) IPv6增加的一种类型。任播的终点时一组计算机,但数据报只交付给其中的一个,通常是距离最近的一个。

    IPv6把实现IPv6的主机和路由器均称为结点。IPv6给结点的每一个接口指派一个IP地址,一个结点可以有多个单播地址,而其中的任何一个地址都可以当作到达该结点的目的地址。
    为了使地址再简洁,IPv6使用冒号十六进制记法(colon hexadecimal notation,简写为colon hex),把每个16位的值用十六进制表示,各值之间用冒号分隔。冒号十六进制记法可以允许零压缩(zero compression),即一连串连续地零可以用一对冒号取代,如FF05:0:0:0:0:0:0:B3,可以写成:FF05::B3。在任一地址中只能使用一次零压缩。

  2. 特殊地址
    • 未指明地址 16字节的全0地址,可缩写为两个冒号“::”,这个地址不能用作目的地址,而只能为某个主机当作源地址使用,条件是这个主机还没有配置到一个标准的IP地址。
    • 环回地址 IPv6的环回地址是0:0:0:0:0:0:0:1(即::1),作用和IPv4的环回地址一样。
    • 基于IPv4的地址 前缀为0000 0000保留一小部分地址作为与IPv4兼容的,这是因为必须要考虑到比较长的时期IPv4和IPv6将会同时存在,而有的结点不支持IPv6,因此数据报在这两类结点之间转发时,就必须进行地址的转换。把IPv4地址嵌入到IPv6的方法:前89位为0接着16位全是1,然后是嵌入IPv4地址,这种地址叫做“IPv4映射的IPv6地址”。
    • 本地链路单播地址(Link-Local Unicast Address) 有些组织的网络使用TCP/IP协议,但并没有连接到因特网上。连接在这样的网络上的主机都可以使用这种本地地址进行通信,但不能和因特网上的其它主机通信。
  3. 全球单播地址的等级结构
    IPv6把1/8的地址空间划分为全球单播地址(最前面的三位是001),单播地址使用最多。现在使用的IPv6单播地址的建议划分方法如图4所示:
    计算机网络笔记整理(七):下一代网际协议IPv6(IPng)

    • 全球路由选择前缀(Global Routing Prefix) 第一级地址,占48位,分配给各公司和组织,用于因特网中路由器的路由选择。注意单播地址的最前面3位是001,因此只有45位是可进行分配的。
    • 子网标识符(Subnet ID) 第二级地址,占16位,用于各公司和组织创建自己的子网,对于小公司可以把这个字段置为全0。
    • 接口标识符(Interface ID) 第三级地址,占64位,指明主机或路由器单个网络接口。

    由于IPv6的主机号字段足够长,所以可以将各种接口的硬件地址直接进行编码。这样IPv6只需要吧128位地址中的最后64位提取出就可以得到相应的硬件地址,而不需要使用地址解析协议ARP进行地址解析。IPv6使用一个叫做邻站发现协议(neighbor discovery protocol)使一个结点能够确定哪些计算机是和它相邻接的(在网际控制报文协议ICMP新版本ICMPv6中使用该协议)。

五、从IPv4向IPv6过渡

  1. 双协议栈(dual stack)
    在完全过渡到IPv6之前,使一部分主机(或路由器)装有两个协议栈一个IPv4和一个IPv6。双协议栈在和IPv6主机通信时采用IPv6地址,而和IPv4主机通信时就采用IPv4地址。双协议栈通过域名系统DNS来查询,根据返回的是IPv4地址还是IPv6地址来决定使用哪个协议。
  2. 隧道技术
    在IPv6数据报要进入IPv4网络时,将IPv6数据报封装成为IPv4数据报(整个IPv6数据报变成了IPv4数据报的数据部分),然后,IPv6数据报就在IPv4网络的隧道中传输,当IPv4数据报离开IPv4网络中的隧道时,再把数据部分(即原来的IPv6数据报)交给主机的IPv6协议栈。

六、ICMPv6

与IPv4相同,IPv6也不保证数据报的可靠交付,所以也需要ICMP来反馈一些差错信息。
ICMPv6的报文格式与IPv4使用deICMP相似,前4个字节的字段名称是相同的,但是ICMPv6把第5个字节起的后面部分都作为报文主体,如下表所示。
计算机网络笔记整理(七):下一代网际协议IPv6(IPng)
具体内容可以参考有关的RFC文档。

七、参考

[1] 谢希仁. 计算机网络(第五版)