网络基础之DHCP协议

时间:2024-03-24 20:57:04

DHCP 概述:

随着网络规模的扩大和网络复杂度的提高,网络配置越来越复杂,经常出现计算机位置变化(如便携机或无线网络)和计算机数量超过可分配的IP地址的情况,这时我们经常需要用到动态主机配置协议DHCP(Dynamic Host Configuration Protocol)。
DHCP协议是在BOOTP(Bootstrap Protocol)协议基础上发展而来,加入了对重新使用的网络地址的自动分配和附加配置选项的功能。

什么是DHCP?

DHCP (Dynamic Host Configuration Protocol)是一种动态的向Internet终端提供配置参数的协议。在终端提出申请之后,DHCP可以向终端提供IP地址、网关、DNS服务器地址等参数。
网络基础之DHCP协议

DHCP在协议栈中的位置

DHCP是Bootstrap协议的一种扩展,基于UDP协议,客户端的端口号是68,服务器的端口号是67。
网络基础之DHCP协议

DHCP的端口号
DHCP有两个端口号:服务器为67,客户端为68。这意味着DHCP客户端不会选择未用的临时端口,而只用端口68。选择两个端口而不是仅选择一个端口的原因是:服务器的应答是可以进行广播的。
DHCP的分组格式
由于DHCP使用UDP,DHCP的各类报文均被封装在UDP数据报中。Client端发送DHCP报文时,没有IP地址,因此DHCP请求报文都是广播封装,链路层中目的地址为广播地址,IP头中的SRCIP为全0,DSTIP为全1。

DHCP的必要型

在TCP/IP网络上,每台工作站在访问网络及其资源之前,都必须进行基本的网络配置,一些主要参数诸如IP地址,子网掩码,缺省网关,DNS等必不可少,还可能需要一些附加的信息如IP管理策略之类。
在大型网络中,确保所有主机都拥有正确的配置是一件的相当困难的管理任务,尤其对于含有漫游用户和笔记本电脑的动态网络更是如此。经常有计算机从一个子网移到另一个子网以及从网络中移出。手动配置或重新配置数量巨大的计算机可能要花很长时间,而IP主机配置过程中的错误可能导致该主机无法与网络中的其他主机通信。因此,需要有一种机制来简化IP地址的配置,实现IP的集中式管理。而IETF(Internet网络工程师任务小组)设计的动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)正是这样一种机制 。
网络基础之DHCP协议

采用DHCP的好处

减少错误:
通过配置DHCP,把手工配置IP地址所导致的错误减少到最低程度,例如已分配的IP地址再次分配给另一设备所造成的地址冲突等将大大减少。
减少网络管理:
TCP/IP配置是集中化和自动完成的,不需要网络管理员手工配置。网络管理员能集中定义全局和特定子网的TCP/IP配置信息。
使用DHCP选项可以自动给客户机分配全部范围的附加TCP/IP配置值。客户机配置的地址变化必须经常更新,比如远程访问客户机经常到处移动,这样便于它在新的地点重新启动时,高效而又自动地进行配置。同时大部分路由器能转发DHCP配置请求,这就减少了在每个子网设置DHCP服务器的必要,除非有其它原因要这样做。

DHCP的结构

DHCP采用客户机/服务器结构。DHCP服务器拥有一个IP地址池,当任何启用DHCP的客户机登录到网络时,可从它那里租借一个IP地址,不使用的IP地址就自动返回地址池,供再分配。
网络基础之DHCP协议

DHCP的责任

  • 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用
  • DHCP应当可以给用户分配永久固定的IP地址
  • DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机)
  • DHCP服务器应当向现有的BOOTP客户端提供服务
  • 考虑到成本,无需每个子网都配备一台DHCP服务器,所以DHCP协议应当可以通过路由器或者BOOTP代理透传。
    网络基础之DHCP协议
  • 当一台DHCP客户机重新启动时,在允许的情况下,它应当获得和上次相同的地址和配置
    网络基础之DHCP协议

DHCP的基本工作流程

发现阶段

Client在它本地物理子网上广播一个DHCPDISCOVER报文,该报文可以包含请求的租约期限和请求的option选项建议值(当然也可以没有)。如果子网上存在BOOTP Relay Agents,也会将这个报文转发到Agents连接的不同物理子网的DHCP Server。只有DHCP Server才会对这个报文进行响应。
DHCPDISCOVER报文的作用,就是由客户端广播来查找DHCP服务器。
网络基础之DHCP协议
网络基础之DHCP协议
网络上每个收到DHCPDISCOVER报文的DHCP Server都会用DHCPOFFER报文来回应。在DHCPOFFER报文中包含“yiaddr”和其他的“option”请求的参数信息。Server应该保证填入“yiaddr”的分配给该Client的IP地址没有被网络上其他的Client使用。为此Server会发送目的地址为该IP地址的“ICMP echo Request”报文来检验该IP是否被占用(这个过程实际上就是PING)。如果被占用,按照前面提及的IP地址分配的优先级策略重新分配,由于这里是Client端首次申请,Server将会继续在DHCP地址池中顺序查找可供分配的IP地址(这里均假设IP地址与MAC未静态绑定),再检验新的IP地址是否被占用。随后DHCP Server发送DHCPOFFER报文给Client,如果需要,将使用DHCP Relay Agents。
在地址分配时,DHCP Server将根据当前设置查找地址,分为两种情况:
接口地址池:接口专用的地址池,地址池中的IP都在接口所在的子网内;
全局地址池:每个接口都可以遍历,根据接口IP找到自己可以使用的地址池。
DHCP Server将通过检测Client发送的DHCPDISCOVER报文中的“flags”字段广播响应标识位的值来确定是用单播还是广播来发送DHCPOFFER报文,值为“1”时为广播,“0”时为单播。

网络基础之DHCP协议
DHCP Client可能会收到不同DHCP Server回应的DHCPOFFER,但通常只接受第一个收到的DHCPOFFER,并广播一个包含“server identifier”的DHCPREQUEST报文,通知哪个Server被它选中了。DHCPREQUEST报文中的“option”字段的“Request IP Address”选项中会填入Server分配给它的IP地址,返回给Server作确认。同时还可以包含其他配置参数的请求。注意,如果在DHCPREQUEST中Client使用了“client identifier”选项,那么在以后的所有后续报文中都要使用相同的“client identifier”。
实际上对于DHCP Server提供的各种配置参数,Client不是必须全部接收,Client可以根据自己的实际决定哪些配置哪些忽视。
网络基础之DHCP协议

确认阶段

被选择的DHCP Server在收到Client返回的DHCPREQUEST报文后,根据Client ID和Request IP Address来查找有没有记录相应的租约,如果有而且无误,则发送DHCPACK报文作为回应,否则返回DHCPNAK报文。同时DHCPACK报文中会包含Client请求的配置参数,并且不能与先前DHCPOFFER报文中提供的相应的参数有冲突。
当Client端收到Server返回的DHCPACK报文后,会发送目的地址为Server分配地址的ARP请求报文作最后的确认(参见图10),如果没有检测到冲突,则将此地址与自己绑定,同时配置相应参数。如果检测到冲突,就向DHCP Server发送DHCPDECLINE报文,在“Request IP Address”项填入Server提供的发生冲突的IP地址。发送完成后,等待10秒(避免环路导致的过多通信流量)再开始重新申请IP地址。另外要注意的是,DHCPDECLINE报文是以广播形式发送的。
如果Client收到了DHCPNAK报文,也会重新开始地址申请。
网络基础之DHCP协议
网络基础之DHCP协议
网络基础之DHCP协议网络基础之DHCP协议