1.3 IPv6 用来做什么?
我们已经看到,IPv6 可以简化一些功能,比如全球地址寻址、主机地址的自动配置等。由于 IPv6 提供的地址总数能满足我们今后几百年甚至上千年的需求,我们可以为所能想到的几乎所有物体都分配一个全球唯一的 IPv6 地址。这也是因特网规范的初衷 —— 每一个 IP 设备间都可以相互通信。这种端对端的通信允许整个因特网或者任何 IP 设备都可以双向通信,这将促进产生新的应用,新的存储、发送、接收和访问信息的方法。
在本书的内容中,我们可以思考世界上的 IPv6 传感器如何采集、发送以及被其它地方访问,从而如何创建一个可以测量、存储和处理世界上所有物体的全球网。
巨大数量的地址触发了一个新的被叫做无状态地址自动配置(stateless
address autoconfiguration,SLAAC)的机制。SLAAC 在 IPv4 中是不存在的。配置 IPv6 接口地址有如下几种方式:
- 静态配置:你可以自己决定分给你的 IP 设备的地址,并通过网页、命令行等接口进行配置。一般情况下,为了将报文从网络中发送出去,你还需要配置一些其它的网络参数,比如网关等。
- DHCPv6(Dynamic Host Configuration Protocol for IPv6[RFC3315]):这与 IPv4 中的 DHCP 是相似的。你需要去配置一个专用服务器,该服务器与设备经过协商后,为设备分配一个 IP 地址。因为 DHCPv6 服务器维护了一个已分配地址的状态,所以 DHCPv6 也被叫做有状态地址自动配置(stateful address autoconfiguration),。
- SLAAC:无状态地址自动配置 [RFC4862] 是 IPv6 中引入的新机制,它允许连接到网络中的路由器自动配置网络中的所有参数。
SLAAC 的优点是简化了“哑”设备的配置,比如传感器、相机或者其他任何低处理能力的设备。你不需要在 IP 设备上使用任何接口做任何配置,即”插入就连上了网”。由于不需要附加的设备/服务,你可以使用相同的路由器去配置 IP 设备,这也简化了基于IPv6 网络的网络基础设施。我们不会深入研究,但是你需要知道,一个局域网(Local Area Network,LAN)通过路由器连接到因特网,这个路由器通过 RA(Router Advertisement)消息发送主机需要的所有配置信息。路由器周期地发送 RA,但是当主机的接口被连接到因特网时,为了加快对主机处理,主机可以发送 RS(Router Solicitation)消息。路由器接收到 RS 消息时会立即发送 RA。
下图描述了在连接到局域网中的主机和连接到因特网的 IPv6 目的地之间的报文交换流程:
1)路由器 R1 周期性地发送 RA,以连接局域网中的主机。
2)R1 和主机在局域网的接口都有一个链路本地地址,当接口准备就绪后,该地址会被自动配置。我们主机的链路本地地址由两部分组成:左边的 64 位链路本地前缀fe80::/64
,右边的本地生成的 64 位接口标识符(IID) 7ff1c2a1
。这个链路本地地址可用于在局域网内交换数据,但是不能用于将数据发送报文局域网外面。
3)如果要将报文发送到其它网络,主机需要满足两个基本的条件:一个全球 IPv6 地址和网关地址(即需要一个路由器选择网络外部的路由)。
4)尽管 R1 在周期地发送 RA 消息(周期一般是几秒),但是当主机连接并配置链路本地地址后,主机会向 R1 发送 RS 消息。当 R1 接收到 RS 后,会立即做出 RA 响应。RA 响应包括如下两部分:
A.准备一个用于 SLAAC 的64位全球前缀。主机接收到前缀后,加到它本地产生的 IID 上面,这样就在主机上形成了一个全球 IPv6 地址并且可以与 IPv6 因特网通信。
B.隐式地包含R1 的链路本地地址。之所以说是隐式包含,是因为 R1 发送的数据报文的源地址就是 R1 的链路本地地址。我们的主机可以使用这个地址去配置默认网关。
5)一旦完成该网关和全球 IPv6 地址配置后,主机就可以接收、发送消息了。在上图中,本地主机有一些数据(Tx Data)需要发送到因特网中的一个主机,本地的主机就用自动配置的源地址、接收主机的目标地址、需要发送的数据构成一个报文,然后通过它的网关(即 R1 的链路本地地址)发送。目标主机就可能会传回一些数据(Rx Data)作为应答。