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允许IP设备被自动配置,这也就是为什么它也被叫做有状态地址自动配置(stateful address autoconfiguration),因为DHCPv6服务器维护了一个被分配地址的状态。
- SLAAC:无状态地址自动配置[RFC4862]是IPv6引入的新机制,它允许连接网网络中的路由器自动配置网络中的所有参数。
SLAAC的优点是简化了“哑”设备的配置,比如传感器,相机,或者其他任何底处理能力的设备。你不需要再IP设备上使用任何接口做任何配置,只需要“插上并联网”。由于不需要附加的设备/服务,你可以使用相同的路由器去配置IP设备,这也简化了基于IPv6网络的网络基础设施。我们不会深入研究,但是你需要知道,一个局域网(Local Area Network,LAN)通过路由器连接到因特网,这个路由器通过一个RA(Router Advertisement)消息发送主机需要的所有配置信息。路由器周期地发送RA,但是当主机的接口被连接到因特网时,为了加快对主机处理,主机可以发送RS(Router Solicitation)消息。路由器接收到RS消息时会立即发送RA。
下图描述了在连接到LAN的主机和连接到因特网的IPv6目的地之间的包交换流程:
图1.7. IPv6中的包交换
1)路由器R1周期性地发送RA,以连接LAN中的主机。
2)R1和主机的连接到LAN的接口都有一个本地连接地址,当接口准备就绪后,该地址会被自动配置。我们的主机的本地连接地址由两部分组成:左边64bit是本地连接前缀fe80::/64
,右边64bit是由本地IID产生的:3432:7ff1:c001:c2a1
。这个本地连接地址可用于在LAN内交换数据,但是不能用于将数据发送包LAN外面。
3)为了将包发送到其它网络,主机需要两个基本的条件:一个全球IPv6地址和网关地址(即需要一个路由器选择网络外部的路由)。
4)尽管R1在周期地发送RA消息(周期一般是几秒),但是当主机连接并已被配置本地连接地址后,主机会向R1发送RS消息。当R1接收到RS后,会立即做出包括如下两部的RA响应:
1.准备一个用于SLAAC的64bit的全球前缀。主机接收到前缀后,加到它本地产生的IID上面,这样就在主机上形成了一个全球IPv6地址并且可以与IPv6因特网通信。
2.隐式地包含R1的本地连接地址。之所以说是隐式包含,是因为数据包的源地址就是R1的本地连接地址。我们的主机可以使用这个地址去配置默认网关。
5)一旦完成该网关和全球IPv6地址配置后,主机就可以接收、发送消息了。在上图中,本地主机有一些数据(Tx Data)需要发送到因特网中的一个主机,本地的主机就用被自动配置的源地址、接收主机的目标地址、需要发送的数据构成一个包,然后通过它的网关(即R1的本地连接地址)发送。目标主机就可能会传回一些数据(Rx Data)作为应答。