设定DHCP服务器:服务器名称为win2k3,IP为192.168.1.1;客户端主机名:winxp2;Scope:192.168.1.1—192.168.1.10。
第一部分:
1、客户端发送DHCP Discover 数据包。客户端使用UDP的68号端口广播发送DHCP Discover数据包,同时指定打开了UDP的67号端口的主机才能接受此数据包。此时,客户端IP Address:0.0.0.0。数据包中信息包括DHCP包的类型、上一次分配到的IP地址,或可能是APIPA分配的地址,并表示能否使用这个地址。这些信息都包含在Bootstrap Protocol(也就是BOOTP)协议中。这也是DHCP的原始协议。不仅仅是刚接入会发送查询包,还有在机器刚启动或请求被拒绝时也会触发DHCP Discover数据包。
2、服务器回应DHCP Offer 数据包。DHCP服务器会响应客户端的DHCP Discover请求后,会检查自己的配置,如果有多余且有效的地址,则会返回一个DHCP Offer的广播消息。因为此时服务器也不知道客户端在那里。数据包除了有IP地址、掩码外,还有这个地址对应的租约时限。当然,这个分配的IP地址可能是已被其它主机在用,可能会产生IP冲突的。
3、客户端收到IP地址后用DHCP Request 数据包回应DHCP服务器。DCHP Request这个数据包是通知当前所有的DHCP服务器,当然也包括分配给它IP地址的那台。目的是让大家知道,客户端XP2已经接受某一台DHCP服务器指派了一个IP地址,并将IP地址通告出去。因为可能网内不止一台DHCP,而且XP2发的第一个包是面向全体的,XP2自己也不知道谁会给它分配IP,同时其他DHCP服务器收到查询请求后必然也会检查各自的配置,然后都会分配IP出来。关键看XP2最先收到谁的Offer,当其他DHCP服务器收到Request请求数据包后,就会收回已经派出的地址,留做他用。客户端必须得到指派给它IP地址的那台DHCP服务器的确认消息,这个IP地址也就是192.168.1.1才可以正式为XP2所用。
4、DHCP收到Request报用DHCP ACK包回应客户机。DHCP服务器用ACK数据包作为一个确认来回应客户端的Request包,数据包中的Option同样也包含了租约的IP地址、掩码和期限等信息。客户端和服务器利用DHCP完成了一次交互查询和响应的过程。尽管服务器的IP固定,但这4个过程都是通过广播方式进行的,而且四个过程使用同一个Transaction ID。现在XP2可以获取的地址是192.168.1.1,这个是有冲突的IP地址。
第二部分:
客户机在收到DHCP ACK数据包之后,会利用Gratuitous ARP协议对这个IP地址进行冲突检测,目的是确定网内是否有人使用这个IP。这个机制存在于2000或之后系统内。如果网内有相同机器使用这个IP,那么就会返回数据包。并用广播方式告知对方IP冲突。整个检测过程有三个数据包。
1、客户端广播发送Gratuitous ARP的Request数据包。这个数据包是客户端广播用来检测IP冲突的。这个包内容包括:源IP地址192.168.1.1,MAC 地址,对方MAC地址:000000000000(不知道对方MAC地址,用0代替),对方IP地址:192.168.1.1(目的是此IP地址收到这个数据包后返回一个回应数据包,表示有台主机的IP是:192.168.1.1,那么XP2收到后就知道此IP已存在到网址,存在网络IP冲突)。
2、有相同IP的主机向目的地发送Gratuitous ARP的Reply数据包。对方主机IP:192.168.1.1发出数据包返回XP2,数据包有源IP:192.168.1.1,源MAC地址,目的IP地址:192.168.1.1,目的MAC地址。
3、有相同IP的主机以广播方式发送Gratuitous ARP冲突提示信息。数据包 是原始IP地址:192.168.1.1的 原始拥有者,通过广播发出,告知网络中存在一个网络IP冲突,对此,DHCP服务器将收到信息并在日志中记录一条。
为了防止IP冲突,DHCP客户端收到指派的地址后都会利用ARP协议进行一次冲突检测。
4、XP2广播向DHCP服务器发送Decline拒绝数据包,表示192.168.1.1这个IP无法使用。XP2的IP地址为0.0.0.0,表示分配的IP:192.168.1.1有冲突,不可用。此条数据包的Transaction ID和最开始的4个DHCP数据包一致。一个申请事务的CASE就此完成。
第三部分:
1、客户机进行第二次的IP地址获取。这部分和第一部分的申请过程一样,只是事务Transaction ID有所变化。 第二次申请时,因为192.168.1.1刚才已经指派过,且被拒绝,所以按照顺序接下来会指派下一个可用的IP给XP2主机,显然是192.168.1.2,因为只有它一台主机在申请。
2、第二次IP冲突检测,通常情况下会一次发出三个ARP包进行检测。
3、IP地址获取成功后,对于客户端来说下一步就是查找WINS服务器,进行NETBIOS名称的注册。