1.2.1 IPv6 报文


  你需要知道的第一件事是 IPv6 报文长啥样。在我们之前看到的分层模型中,每一层都添加该层自身相关的信息,而这些被添加的信息只能由另一个 IP 设备的对等层处理。不同设备的对等层之间的“对话”必须按照一个协议。

  因特网的分层包括:

  • 应用层:这里驻有程序员利用网络协议栈提供的网络服务开发的软件。比如网页浏览器,它向网页服务器发送一个连接请求。又比如网页服务器,它运行在因特网中的某个服务器上等待来自客户端浏览器的请求。应用层协议包括 HTTP、DNS 等。
  • 传输层:传输层位于网络层之上,并给网络层提供附加功能,比如转发丢失的数据报文,或者保证报文按照发送的顺序接收。本层为应用层提供一个“网络服务”,用于发送或接收数据。TCP/UDP 是传输层中最常见的协议。
  • 网络层:这一层负责正确交付从传输层下发的数据,以及接收从链路层上传的数据。因特网在这一层只使用了一个协议 —— IP。IP 地址用来标识源和目的地。
  • 链路层:该层负责发送和接收帧 —— 网络层发送过来的字节的集合。它指定了相关了机制,用于在不同节点间共享媒介。
  • 物理层:该层负责电信号处理。通过有线或者无线物理媒介获取或发送从一个节点到另一个节点的的数字信息。

  下图描述了如下的思想:每一层接收上一层传递下来的一些字节信息,然后添加一些相关的附加信息,接收端主机的对等层负责处理这些对应的附加信息。在本图中,数据来源于应用层,被发送到物理层。

1.2.1 IPv6 报文 - 图1

图1.2. 协议栈中的数据流

IP 报文中字节的发送、接收都遵循一个标准格式,下图是 IPv6 首部的基本结构:

1.2.1 IPv6 报文 - 图2

图1.3. IPv6 首部

  最开始,是一个大小固定的 40 个字节的 IPv6 基本首部,接着是上层数据和一些可选的扩展头(将在后面介绍)。如图所示,报文首部被分为若干个字段。与 IPv4 首部相比,IPv6 的首部有如下的改进:

  • 字段数由 12 个减至 8 个。
  • 基本的 IPv6 首部的大小是固定的,一共 40 个字节,且是 64 位对齐的,这样的好处是允许在路由器上进行基于硬件的快速转发。
  • 地址的长度由 32 位增加至 128 位。

  在 IPv6 首部中,最重要字段是源地址和目的地址。IP 地址是每个 IP 设备在因特网上独一无二的标识。路由器利用 IP 地址进行转发决策。

  每个 IPv6 地址有 128 位,这相当于有 2^128 个地址(大约是 3.4x10^38),而 IPv4 的地址使用 32 位编码方式,一共只有 2^32 个地址。

  除了基本首部之外,还有一个上面提到的扩展首部。为了保证基本首部的简单性和固定大小,附加信息以扩展首部的形式被添加到 IPv6 首部。

1.2.1 IPv6 报文 - 图3

图1.4. IPv6 扩展首部

  有几个扩展首部已经被定义了,正如上图所示。扩展首部必须按照上图中的顺序。扩展首部具有如下特性:

  • 扩展首部具有灵活性。例如,计算报文中数据以保证数据安全。
  • 扩展首部能够优化报文处理过程。因为除逐跳传输首部之外,扩展都只被终节点处理(报文的源节点和最终目的节点),而不会被传输路径中的路由处理。
  • 扩展首部在基本首部的后面。扩展首部有一个字段叫做“下一个首部”(Next Header),指向下一个扩展首部。多个扩展首部通过“下一个首部”字段形成一个链式结构。