TCP/IP 协议——第六章:DHCP与自动配置详解
一个系统能够在Internet上运行并提供常用服务的基本要素:
- IP地址
- 子网掩码
- DNS服务器IP地址
- 默认路由器IP地址
DHCP介绍
DHCP,动态主机配置协议,前身是BOOTP协议,是一个局域网的网络协议,使用UDP协议工作,常用的2个端口:67(DHCP server),68(DHCP client)。DHCP通常被用于局域网环境,主要作用是集中的管理、分配IP地址,使client动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
DHCP有两个主要部分组成:地址管理和配置数据交付。地址管理用于IP地址的动态分配,并为客户机提供地址租用。配置数据交付包括DHCP协议的消息格式和状态机。
DHCP服务器决定IP分配方式:自动分配、动态分配和手动分配。
1. 最常用方法是动态分配,客户机从服务器配置的地址池(通常为一个预定义的范围)中获得一个可撤销的IP地址。
2. 自动分配使用的是相同方法,但地址不可撤销。
3. 在手动分配中,DHCP协议用于传输地址,但地址对于请求的客户机是不变的(即它不是由服务器维护的可分配池的一部分)。
DHCP客户端指的是支持DHCP协议的网络设备上的指定端口,通过该端口与DHCP服务器交互获取配置信息。三者之间的差异是地址分配是否基于客户机的身份,以及该地址是否可撤销或变更。
在上面提到的动态分配方式中,DHCP客户端请求分配一个IP地址,服务器从可用的地址池中选择一个地址作为响应。通常情况下这个地址池是专门为DHCP用途分配的一个连续的IP地址范围。
分配给客户机的地址只在一段特定时间内有效,这段时间称为租用期。
- 较长的租用期通常会较快耗尽可用的地址池,但能提供更稳定的地址和减小网络开销(因为续租请求较少)。
- 较短的租用期可为其他客户提供可用性更高的地址池,随之而来的是稳定性减小和网络流量负荷增大。
当服务器向客户机提供租用期时,服务器将租用信息保存在持久性存储中,通常是非易失性内存或磁盘中。
DHCP消息格式
DHCP的前身是BOOTP,它是在BOOTP上做了扩展,以保持两种协议之间的兼容性。一个DHCP(或者可以说是BOOTP)消息格式如下图所示:
Op(操作字段)标识消息是请求(1)还是应答(2);
HW类型字段分配基于ARP使用的值,并定义在相应的IANA ARP参数页中[IARP],最常见的值为1(以太网);
HW长度字段用于存放硬件(MAC)地址,对于类似以太网的网络,值通常为6;
跳步数字段用于保存消息传输过程中的中继次数,发送方将该值设为0,每次中继时加1;
事务ID有客户机选择,为一个随机数,用于将应答和请求匹配;
秒数字段由客户机设置,是第一次尝试申请或重新申请地址经过的秒数;
标志字段当前只包含一个经过定义的位,称为广播标志;
客户机IP地址包含请求者的IP地址(如果已知),否则为0;
"你的"IP地址有服务器填写,向请求者提供服务器地址;
下一服务器IP地址给出下一个服务器的地址,用以客户机的引导过程;
网关中继IP地址有DHCP或BOOTP中继器填写,它们在转发消息时返回自己的地址;
客户机硬件地址保存客户机的硬件地址(唯一标识);
服务器名和引导文件名可选,表示服务器名称或启动文件路径;
选项字段是BOOTP中的供应商扩展字段,现在用以区分DHCP消息与传统BOOTP消息,选项通常提供相对简单的配置信息,或者支持一些其他协商协议。
常见选项包括填充(0)、子网掩码(1)、路由器地址(3)、域名服务器(6)、域名(15)、请求的IP地址(50)、地址租用期(51)、DHCP消息类型(53)、服务器标识符(54)等等。
DHCP协议的地址分配过程
当一台新的客户机连接到网络的时候,它首先发现可用的DHCP服务器以及它们能够提供地址。然后它决定使用哪台服务器和哪个地址,并向提供该地址的服务器发送请求(同时将其他选择通知所有服务器)。除非服务器在此期间已将该地址分配出去,否则它通过确认将地址分配给请求的客户机。
如下图,一次典型的DHCP交换:
过程解析:
1. 客户机连接网络,向网络广播一个DHCPDISCOVER消息;
2. DHCP服务器接收到消息,响应一个DHCPOFFER消息,并在"你的"IP地址字段填写提供的IP地址,且提供租用时间(T)、更新时间(T/2)、重新绑定时间(7T/8)等信息;
3. 客户机接收到来自一台或多台DHCP服务器的响应,确定自己想要哪个DHCPOFFER,并广播一个包含服务器标识符选项的DHCPREQUEST消息,请求的IP地址选项设置为客户机选择使用的IP地址;
4. 多台DHCP服务器可能收到广播的DHCPREQUEST消息,但只有DHCPREQUEST消息标识的服务器同意将该地址进行绑定,其他服务器则清除与该请求相关的状态,然后标识的服务器响应给客户机:1).发送一个DHCPACK消息,可以使用该地址;2).无法分配该地址,发送一个DHCPNAK消息;
5. 客户端接到DHCPACK消息后进行配置,并探测网络来确定地址未被使用。如果探测到无冲突,则直接使用;如果探测到冲突,客户机舍弃该地址,向服务器发送一个DHCPDECLINE消息来通知该地址不能使用,经过默认10秒延时后客户机重新从第1步开始操作;
DHCP协议在客户机和服务器中运行一个状态机。状态用于指出协议下一个处理的消息类型:
在简单的网络中,一个DHCP服务器可供同一个局域网中的客户机使用,但在更复杂的网络中,可通过一个或更多的DHCP中继代理来中继DHCP流量将DHCP操作扩展到跨越多个网段。