如果你的计算机是连接到Internet上的,不管你用的是哪种计算机,也不管你用的是什么连接方式,有两个问题可以肯定:第一,你在使用TCP/IP网络协议;第二,你的计算机有一个唯一的Internet协议(IP, Internet Protocol)号码。没有这两者是不能访问Internet的。一般来说,TCP/IP协议没有什么问题,它通常在安装Windows的时候就一起安装了,或者也可以通过控制面板的网络项进行安装。但是计算机是怎么得到这个唯一的IP号码的呢?这就是个完全不同的问题了。
计算机是从Internet服务供应商(ISP)那里得到IP号码的。ISP从高层(上游)服务供应商那里得到一段这样的号码,这个IP号码分配树的顶端是三个区域性的登记中心:APNIC负责亚洲和太平洋地区(www.apnic.net),RIPE负责欧洲(www.ripe.net),ARIN(www.arin.net)美洲Internet号码注册中心(American Registry for Internet Numbers)负责美洲和非洲的一部分。这些机构由美国政府的国家科学基金支持的Internet号码分配中心(Internet Assigned Numbers Authority,www.iana.org)协调工作。 ISP得到一组IP号码之后就可以把它们分配给单独的用户了。用户可以是一个需要大量IP号码的组织,也可能是只需要一个IP号码的个人。ISP可以静态或者动态地分配IP号码(分配之后,IP号码往往就称为IP地址)。如果你使用的是24小时不间断的Internet连接,那么你很可能有一个静态IP地址,也就是说这个地址不会改变。另一方面,如果使用调制解调器连接到Internet,用户往往是动态地被赋予一个IP地址—每次都不同。 对于调制解调器用户来说,动态地址分配是最常见的情况,但是ISP不一定非要如此分配IP地址。每个拨号用户都可以—在早期的商业ISP中更常见—被分配一个静态的IP地址,但是由于拨号用户都是临时的连接,这是一个低效的方法。不论连接15分钟还是15个小时,都可以看作临时连接。虽然这本杂志的读者很可能一拨号就要连接好几个小时,但是还有许多Internet用户几天才登录一次。不论如何,那些每个月10小时的账号存在还是有道理的。
如果一个ISP有一万个拨号用户,如果使用完全静态的分配方式它就需要有一万个IP号码。但是如果这个ISP只有500条拨入电话线,它就只需要500个IP号码,因为只有登录到Internet的计算机才会需要IP地址。所以,ISP只需要把IP地址分配给已经拨号登录的用户,而且这个地址只在它们登录期间有效。计算机断开连接后,ISP就把分配出去的IP地址收回并分配给下一个拨号上网的用户。 进入DHCP的世界
为了能够动态地分配IP号码,1993年Internet Engineering Task Force提出了动态主机配置协议(Dynamic Host Configuration Protocol,DHCP)的想法。这个协议最早出现于RFC(RFC,Request for comment)1531和1541(ftp://ftp.isi.edu/in-notes/rfc1541.txt),协议最新的定义可以参见RFC 2131(ftp://ftp.isi.edu/in-notes/rfc2131.txt)。DHCP的设计目的就是为了提供比以前的协议(如BOOTP, Bootstrap Protocol)提供更大的分配灵活性。DHCP实际上是基于BOOTP的,但是它提供了更多的特性,比如限制IP号码的租用时间可以让DHCP服务器收回并重用这些号码。 为拨号上网账号提供IP地址可能是DHCP最常见的用途,但它的用途并不仅限于此。例如可以在局域网上使用DHCP以共享Internet连接。微软Windows98第二版提供了称为Internet连接共享(ICS)的功能,可以实现DHCP。安装了ICS之后,它在局域网上就可以作为一个DHCP服务器,为网络上的计算机分配范围在192.168.x.x之内的IP号码,这个范围是专门保留用作内部网络使用的。提供ICS服务的计算机先拨号连接到ISP,从ISP得到一个IP地址,然后让局域网上的其它计算机共享这个地址。它把其它计算机的请求发送到Internet上,并利用内部的IP地址来跟踪每个局域网用户的请求,当Internet返回应答的时候,它把信息转发到相应的计算机上。
DHCP的工作原理 DHCP是一个客户机/服务器协议(就像TCP/IP,HTTP,FTP以及其他Internet协议一样)。DHCP客户机向DHCP服务器发出请求,服务器按照预先设定好的方式进行应答。如果计算机的IP地址设为0.0.0.0它就自动变成一个DHCP客户机,在Windows操作系统上,TCP/IP设置还可以改为从服务器获得IP地址(设置过程参见图1到图5)。客户机连接到网络之后,就会发生四阶段的DHCP通信。(下面我们将只讨论计算机拨号连接到ISP的情况,其他DHCP分配的操作的概念都是一样的。)
第一步是初始化。因为客户机还没有IP地址同时又需要进行Internet操作(比如浏览网页),它首先要找到一个能给它IP地址的DHCP服务器。在拨号连接的情况下,客户机连接到一个调制解调器,然后通过电话线广播一个DHCPDISCOVER信息以定位DHCP服务器。如果ISP有一个以上的DHCP服务器,所有的服务器都会发回一个DHCPOFFER的响应,响应中包括一个IP地址和地址的租用时间。地址的租用时间是客户机可以使用这个地址的时间,由系统管理员设定。
客户端返回一个DHCPREQUEST广播信息,说明它接受了哪一个服务器的DHCPOFFER。因为所有的服务器都在等待回答,所以需要使用广播方式。被接受的服务器通过返回一个DHCPACK消息来结束初始化步骤,确认IP地址和租用时间。如果在这段时间内它提供的IP地址不可用了(由于超时),服务器就返回一个DHCPNAK(不确认)消息,强迫客户端重新进行DHCPDISCOVER广播。实际上,客户端可能自己就重新发送DHCPDISCOVER信息了,在收到DHCPACK包之后,它就向网络发出一个地址解析协议(ARP)广播以检测这个地址是否已经被使用。(同样,由于超时原因)如果地址已经被使用,客户端就会向提供地址的服务器发出DHCPDECLINE消息,并立即发出一个新的DHCPDISCOVER消息。
然后就是更新和重新绑定阶段。客户端只能租用IP地址一段时间,租用时间可以设定得很短,也可以是无限长,或这两者之间的任意长度。将它称为“租用”而不是简单地说“失效时间”是因为在连接过程中租用可以被更新。
DHCP客户机(不是服务器)运行着T1和T2两个计时器。缺省情况下,T1设置为租用时间的50%,T2为87.5%。当IP地址的租用到了T1限定的时间后,客户端就进入更新阶段,向租借给它地址的服务器申请更新。如果服务器返回一个DHCPACK响应包,地址租用就被更新,T1和T2也相应地重新设置(T2的计时期限还根本没有到达)。如果服务器没有响应,客户机会在T2期限之前继续使用该地址。到达T2期限的时候,客户机就进入重新绑定阶段,向所有的服务器发出DHCPREQUEST广播。任何发回DHCPACK响应的服务器都可以更新这个租用,并成为这个客户机的授权服务器。如果还是没有服务器响应,地址租用就过期了,客户机不再拥有IP地址。也就是说,它不能再使用Internet。
最后一步称为顺利关机(graceful shut-down),当客户机不再需要被赋予的IP地址时会发生这一步。客户端发出DHCPRELEASE信息,告诉服务器它可以把IP地址交还。像你预计的一样,事情不会总是如此顺利,如果某人碰巧拿起了电话而把你的连接挂断,ISP的服务器不得不等到你的T2时间点才能收回地址。
图1-5告诉你如何设置DHCP客户端。在此我们讲解的是Windows95/98系统,但是Windows NT 4也是非常相似的。Windows 2000在另一个位置处理网络连接:不是控制面板,而是桌面上的Network Connection 文件夹。 DHCP不是一个复杂的协议,设置DHCP客户端也很容易。但这绝不是说这个协议不重要。没有它,IP地址的分配对于用户和管理员都会是一个头疼的问题,而且已经开始短缺的IP号码将会更快地消耗光。