为什么dhcp请求ip时是四个包的组合而不是两个?实际上,dhcp server和client之间,两个包就足够完成一次ip请求,但是,一个网络内,同一个client和多个server之间实际上就是好几对组合,这样,两个包是无法明确本次ip请求到底由client和哪个server完成。也就是说,四个包的方式是一个client和多个server之间完成一次明确的ip请求所使用的最少包数量,第一二个包,实际就是确定client的请求由哪个server来完成,而且抓包会发现,1,2个包是没有真正完成ip的分配,而完成ip分配的,真正是3,4个包来完成。其中,第一个client发出的包是广播非常好理解,因为client不知道网络内dhcp服务器的位置。而由server发出的第一个dhcp offer在Cisco设备是使用广播来完成,这个offer对应了受到discover的信息,就是说,这个offer是针对发出discover的client回复的,因此广播不具有一个offer回复多个client的作用,所以说,rfc解释offer和ack可以使用广播或单播也是这个原因,因为广播没有替代单播使用一种一个offer回复多个discover的快捷方便的功能。而第三个由client发出的request是广播包具有两个目的:首先表示自己明确确定采用某一个server分配的ip,其次也告诉其他server不采它们的ip,因此,第三个包一定是广播,第四个包是被确定的server为client明确的分配ip,单播广播都可以,cisco设备使用了广播。反过来,如果仍然采用两个包的方式,这样就没有四个包的预留ip的环节,两个包只能在收到client之后,立刻将这个ip分配出去,如果使用了多个server,client只会采用其中一个,但其他server上任然会认为,这次请求,他们都分配了一个ip,因此,根据多个server的配置不同,可能出现地址冲突或者地址浪费的后果。其中在server预留ip的过程中,会主动使用icmp echo报文检查在网络上这个ip是否已经被使用,如果等待超时,那么认为这个包是没有被使用的,可以将这个ip分配出去,Cisco router的exclude add实际是为了server本身使用或者防止分配出不常在线的地址而设计的,如果某个地址一直在网络中使用,dhcp server的主动ping功能就能检查出来,可以直接不分配这些地址,所以没必要排除这些ip。。