IPv6 RFC8200 解读

RFC8200: Internet Protocol, Version 6 (IPv6) Specification 是 IPv6 的权威定义,接下来在解读 RFC8200 文档中的过程中,加深对 IPv6 的理解。

RFC8200: Internet Protocol, Version 6 (IPv6) Specification 是由 Internet Engineering Task Force (IETF) 负责定义的 IPv6 协议标准。

概要

本文档是 IPv6 的定义,将取代 RFC2460.

文档状态

本文档是 IETF 的产品,代表 IETF 社区的共识,已经接受了公众的审查,并已被 IESG 批准出版。

有关 Internet 标准的更多信息,请参阅 RFC 7841 的第二节。

关于此文档的当前状态、任何勘误以及如何对其提供反馈的信息,请访问 http://www.rfc-editor.org/info/rfc8200

版权公告

Copyright (c) 2017 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust’s Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.

This document may contain material from IETF Documents or IETF Contributions published or made publicly available before November 10, 2008. The person(s) controlling the copyright in some of this material may not have granted the IETF Trust the right to allow modifications of such material outside the IETF Standards Process. Without obtaining an adequate license from the person(s) controlling the copyright in such materials, this document may not be modified outside the IETF Standards Process, and derivative works of it may not be created outside the IETF Standards Process, except to format it for publication as an RFC or to translate it into languages other than English.

1.简介

IPv6 是 Internet 协议(IP)的一个新版本,为IPv4 RFC791 的继承者。从 IPv4 到 IPv6 的变化主要分为以下几类:

  • 扩展寻址功能

IPv6 将 IP 地址大小从 32 位增加到 128 位,以支持更多级别的寻址层次、更多的可寻址节点以及更简单的地址自动配置。组播路由的可伸缩性通过在组播地址中增加一个“范围(scope)”字段得到改善。定义了一种称为“选播地址(anycast address)”的新地址类型,它用于向一组节点中的任何一个发送数据包。

  • 简化IP包头格式

部分 IPv4 包头字段已被删除或设置为可选字段,以减少数据包处理的常见处理成本,并控制 IPv6 包头的带宽成本。

  • 改进对扩展和选项的支持 改变 IP 头选项的编码方式可以提高转发效率,减少选项长度的严格限制,并且在未来引入新选项时具有更大的灵活性。

  • 流标记能力 增加了一个新的功能,可以对发送方请求在网络中作为单一流处理的数据包序列进行标记。

  • 认证和隐私功能 为 IPv6 指定了支持身份验证、数据完整性和(可选的)数据保密性的扩展。

这个文档指定了基本的 IPv6 头和最初定义的 IPv6 扩展头和选项。它还讨论了包大小问题,流标签和流量类的语义,以及 IPv6 对上层协议的影响。Ipv6 地址的格式和语义在 RFC4291 中单独指定。所有 IPv6 实现都需要包括的 ICMP 的 IPv6 版本在 [RFC4443] 中指定。

IPv6 的数据传输顺序与[RFC791]附录B 中定义的 IPv4 相同。

注意: 由于本文档过时 [RFC2460] ,本文档中引用的任何文档,包括指向 RFC2460 的指针都应被解释为引用本文档。

2 术语

  • 节点(node) 实现 IPv6 的设备

  • 路由器(router) 不显式转发 IPv6 数据包的节点

  • 主机(host) 不是路由器的节点

  • 上层(upper layer): 位于 IPv6 之上的协议层。例如 TCP 和 UDP 等传输协议,ICMP 等控制协议,OSPF 等路由协议,以及 IPv6 本身被“隧道化”(即封装在 IPv6 中)的互联网层或低层协议,如 IPX、 AppleTalk 或 IPv6 本身。

  • 链接(link): 一种通信设施或媒介,节点可以通过它在链路层(即 IPv6 之下的层)进行通信。比如以太网(简单或桥接) ; PPP 链路; x. 25、帧中继或 ATM 网络; 以及互联网层或更高层的“隧道”,比如 IPv4 上的隧道或 IPv6 本身。

  • 邻居(neighbors): 连接到同一个链路的节点。

  • 接口(interface): 节点连接到链接(link)上的入口

  • 地址(address): 一个接口或一组接口的 ipv6层标识符。

  • 数据包(packet): 包头(Header) + Playload

  • link MTU: 最大传输单元,即以八位字节表示的最大数据包大小。

  • Path MTU: 源节点和目标节点之间路径中所有链路的最小链路 MTU。

注意:可以将具有多个接口的设备配置为转发来自某组(少于全部)接口的非自定向分组,并丢弃来自其他接口的非自定向分组。这样的设备在从前一个(转发)接口接收数据包并与邻居交互时,必须遵守路由器的协议要求。当从邻居(非转发)接口接收数据包并通过其与邻居交互时,它必须遵守主机的协议要求。

3 IPv6 Header Format

  Version             4位 IP 协议版本号,值为 6.

  Traffic Class       8位流量类别字段. 详见第7章.

  Flow Label          20位流标签,参见.  详见第6章.

  Payload Length      16位无符号整数. 表示 IPv6 负载的长度(即 IPv6 头之后的所有内容的长度),以八位字节为单位.

  Next Header         8位选择器. 标识紧跟 IPv6 头之后的报头类型. 常用值: 6 (TCP), 17 (UDP), 58 (ICMPv6), 以及扩展头的编号.

  Hop Limit           8位无符号整数. 数据包在被丢弃之前可以经过的剩余跳数. 每经过一个路由器减 1.

  Source Address      128-bit address of the originator of the
                       packet.  See [RFC4291].

  Destination Address 128-bit address of the intended recipient of
                       the packet (possibly not the ultimate
                       recipient, if a Routing header is present).
                       See [RFC4291] and Section 4.4.

IPv6 头固定为 40 个八位字节长,结构如下:

字段 位数 说明
Version 4 版本号,固定为 6
Traffic Class 8 流量类别,用于区分不同服务质量的数据流
Flow Label 20 流标签,用于标识需要特殊处理的数据包序列
Payload Length 16 负载长度,IPv6 头之后的数据长度
Next Header 8 下一报头类型
Hop Limit 8 跳数限制,每经过一个路由器减 1
Source Address 128 源 IPv6 地址
Destination Address 128 目的 IPv6 地址

4 Flow Label

流标签字段为 20 位,用于标识那些需要路由器进行特殊处理的数据包序列。发送方可以使用流标签来标记那些需要网络以特定方式处理的数据包——例如,提供特定服务质量(QoS)或资源预留。

并非所有数据包都需要使用流标签。未设置流标签的数据包(即流标签字段为 0)将按照常规方式处理。

流标签由发送方选择,发送方必须确保同一流的所有数据包具有相同的源地址、目的地址以及相同的非零流标签值。

5 Traffic Class

流量类别字段为 8 位,其语义与 IPv4 的区分服务(DiffServ)字段类似。该字段用于标记数据包的优先级和服务质量要求。

流量类别字段分为两个部分:

  • 前 6 位:区分服务代码点(DSCP),用于指定数据包的服务类别
  • 后 2 位:显式拥塞通知(ECN),用于指示网络拥塞情况,无需丢弃数据包

6 Payload Length

负载长度字段为 16 位无符号整数,表示 IPv6 头之后的数据长度(以八位字节为单位)。这包括任何扩展头和上层协议数据。

当负载长度字段为 0 时,表示数据包携带的是超大负载,其实际长度由逐跳扩展头中的超大负载选项指定。

7 Next Header

下一报头字段为 8 位选择器,用于标识紧跟在 IPv6 头之后的报头类型。该字段的值可以是:

  • 上层协议编号(如 6 = TCP,17 = UDP,58 = ICMPv6)
  • 扩展头编号(如 0 = 逐跳选项扩展头,43 = 路由扩展头,44 = 分片扩展头,60 = 目标选项扩展头)

当存在多个扩展头时,每个扩展头的"下一报头"字段标识下一个扩展头或上层协议的类型,最后一个扩展头的"下一报头"字段标识上层协议。

8 Hop Limit

跳数限制字段为 8 位无符号整数,类似于 IPv4 的 TTL(Time to Live)字段。数据包每经过一个路由器,跳数限制减 1。当跳数限制减至 0 时,数据包将被丢弃。

这防止了数据包在网络中无限循环。

9 Extension Headers

IPv6 扩展头是可选的,位于 IPv6 头和上层协议头之间。扩展头用于支持 IPv6 的功能,同时保持基本头的简洁。

IPv6 定义了以下扩展头:

扩展头类型 下一报头值 说明
逐跳选项扩展头 0 携带在路径上每个路由器都必须检查的选项
路由扩展头 43 携带源路由信息
分片扩展头 44 用于处理大于链路 MTU 的数据包分片
目标选项扩展头 1 60 由目的节点和路由扩展头中列出的路由器处理
目标选项扩展头 2 60 仅由目的节点处理

扩展头的顺序应为:

  1. 逐跳选项扩展头(如果存在)
  2. 路由扩展头(如果存在)
  3. 分片扩展头(如果存在)
  4. 目标选项扩展头(如果存在)
  5. 上层协议头

每个扩展头的"下一报头"字段标识下一个要处理的头类型。

10 Packet Size Issues

IPv6 要求链路层的 MTU 至少为 1280 个八位字节。如果底层链路不支持此 MTU 大小,链路层必须提供自己的分片和重组机制。

源节点可以使用路径 MTU 发现机制来确定从源到目的地的路径上的最小 MTU。路径 MTU 发现通过使用携带超大负载选项的逐跳扩展头来实现。

11 Path MTU Discovery

路径 MTU 发现是源节点用于确定到目的地的路径上的最小链路 MTU 的机制。在 IPv6 中,路径 MTU 发现使用 ICMPv6 分组太大消息来通知源节点其数据包太大而无法在不分片的情况下转发。

源节点应发送大小不超过路径 MTU 的数据包。如果发送的数据包太大而无法转发,路由器将返回 ICMPv6 分组太大消息,其中包含出链路的 MTU。源节点应减少其数据包大小并使用新的大小作为路径 MTU 的估计值。

路径 MTU 发现过程在 RFC8201 中详细描述。