我们知道,手工配置主机IP地址是一件非常繁琐的事情,而治理分配给主机的静态IP地址更是一项艰难的任务,尤其当主机IP地址需要经常改动的时候。
在IPv4中,动态主机配置协议(DynamicHostConfigurationProtocol,DHCP)实现了主机IP地址及其相关配置的自动设置。一个DHCP服务器拥有一个IP地址池,主机从DHCP服务器得到IP地址并获得一些其他的相关信息,比如缺省网关、DNS服务器等等,从而实现了自动设置主机IP地址的目的。
IPng的一个重要目标便是支持“即插即用”,也就是说无需任何人工干预,就可以将一个节点插入IPv6网络并在网络中启动。为此,IPv6使用了两种不同的机制来支持即插即用网络连接。第一种机制的示例是启动协议(BOOTstrapProtocol,BOOTP),另外一种是动态主机配置协议(DHCP),这两种机制答应IP节点从非凡的BOOTP服务器或DHCP服务器获取配置信息。但是这些协议采用所谓的“状态自动配置”,即服务器必须保持每个节点的状态信息,并治理这些保存的信息。
状态自动配置的问题在于,用户必须保持和治理非凡的自动配置服务器以便治理所有“状态”,即所容许的连接及当前连接的相关信息。对于有足够资源来建立和保持配置服务器的机构,该系统可以接受;但是对于没有这些资源的小型机构,工作情形较差。
除了状态自动配置,IPv6还采用了一种被称为无状态自动配置(StatelessAutoConfiguration)的自动配置服务。RFC1971中描述了IPv6的无状态自动配置。无状态自动配置要求本地链路支持组播,而且网络接口能够发送和接收组播。
无状态自动配置过程要求节点采用如下步骤:首先,进行自动配置的节点必须确定自己的链路本地地址;然后,必须验证该链路本地地址在链路上的唯一性;最后,节点必须确定需要配置的信息。该信息可能是节点的IP地址,或者是其他配置信息,或者两者皆有。假如需要IP地址,节点必须确定是使用无状态自动配置过程还是使用状态自动配置过程来获得。
具体地说,在无状态自动配置过程中,主机首先通过将它的网卡MAC地址附加在链接本地地址前缀1111111010之后,产生一个链接本地单播地址(IEEE已经将网卡MAC地址由48位改为了64位。假如主机采用的网卡的MAC地址依然是48位,那么IPv6网卡驱动程序会根据IEEE的一个公式将48位MAC地址转换为64位MAC地址)。接着主机向该地址发出一个被称为邻居发现(neighbordiscovrey)的请求,以验证地址的唯一性。假如请求没有得到响应,则表明主机自我设置的链接本地单点广播地址是唯一的。否则,主机将使用一个随机产生的接口ID组成一个新的链接本地单点广播地址。然后,以该地址为源地址,主机向本地链接中所有路由器多点广播一个被称为路由器请求(routersolicitation)的配置信息请求,路由器以一个包含一个可聚集全局单点广播地址前缀和其它相关配置信息的路由器公告响应该请求。主机用它从路由器得到的全局地址前缀加上自己的接口ID,自动配置全局地址,然后就可以与Internet中的其它主机通信了。
假如没有路由器为网络上的节点服务,也即本地网络孤立于其他网络,则节点必须寻找配置服务器来完成其配置;否则,节点必须侦听路由器通告报文。这些报文周期性地发往所有主机的组播地址,以指明诸如网络地址和子网地址等配置信息。节点可以等待路由器的通告,也可以通过发送组播请求给所有路由器的组播地址来请求路由器发送通告。一旦收到路由器的响应,节点就可以使用响应的信息来完成自动配置。
使用无状态自动配置,无需手动干预就能够改变网络中所有主机的IP地址。例如,当企业更换了联入Internet的ISP时,将从新ISP处得到一个新的可聚集全局地址前缀。ISP把这个地址前缀从它的路由器上传送到企业路由器上。由于企业路由器将周期性地向本地链接中的所有主机多点广播路由器公告,因此企业网络中所有主机都将通过路由器公告收到新的地址前缀,此后,它们就会自动产生新的IP地址并覆盖旧的IP地址。