DP500030 DHCP原理 ISSUE 1.0
前 言 本章节主要通过对设备终端动态从主机获得IP地址的过程分析,来说明网络是如何动态的分配其所有的地址资源。 Page 2
目 标 学习完此课程,您将会: 掌握DHCP协议的流程 了解DHCP所使用的报文结构 Page 3
内容介绍 第一章 使用DHCP的原因 第二章 DHCP的原理 第三章 DHCP工作流程举例 Page 4
什么是DHCP 提出申请 DHCP Server 分配地址等参数 Client IP地址池 提出申请 DHCP Server 分配地址等参数 Client 随着网络规模的扩大和网络复杂度的提高,网络配置越来越复杂,经常出现计算机位置变化(如便携机或无线网络)和计算机数量超过可分配的IP地址的情况,这时我们经常需要用到动态主机配置协议DHCP(Dynamic Host Configuration Protocol)。 DHCP协议是在BOOTP(Bootstrap Protocol)协议基础上发展而来,加入了对重新使用的网络地址的自动分配和附加配置选项的功能。 DHCP (Dynamic Host Configuration Protocol)是一种动态的向Internet终端提供配置参数的协议。在终端提出申请之后,DHCP可以向终端提供IP地址、网关、DNS服务器地址等参数。 Page 5
DHCP在协议栈中的位置 Application layer DHCP Transport layer UDP Network layer IP Data-link layer No limited Physical layer DHCP是Bootstrap协议的一种扩展,基于UDP协议,客户端的端口号是68,服务器的端口号是67。 DHCP的端口号 DHCP有两个端口号:服务器为67,客户端为68。这意味着DHCP客户端不会选择未用的临时端口,而只用端口68。选择两个端口而不是仅选择一个端口的原因是:服务器的应答是可以进行广播的。 DHCP的分组格式 由于DHCP使用UDP,DHCP的各类报文均被封装在UDP数据报中。 Client端发送DHCP报文时,没有IP地址,因此DHCP请求报文都是广播封装,链路层中目的地址为广播地址,IP头中的SRCIP为全0,DSTIP为全1。 Page 6
DHCP的必要性 地址冲突了 在大型网络中,如果每台终端的地址都是由不同的使用这来分配,那么就很容易出现地址相同的情况。 Page 7 192.168.0.1 192.168.0.1 192.168.0.2 在大型网络中,如果每台终端的地址都是由不同的使用这来分配,那么就很容易出现地址相同的情况。 Page 7
DHCP的必要性 在TCP/IP网络上,每台工作站在访问网络及其资源之前,都必须进行基本的网络配置,一些主要参数诸如IP地址,子网掩码,缺省网关,DNS等必不可少,还可能需要一些附加的信息如IP管理策略之类。 在大型网络中,确保所有主机都拥有正确的配置是一件的相当困难的管理任务,尤其对于含有漫游用户和笔记本电脑的动态网络更是如此。经常有计算机从一个子网移到另一个子网以及从网络中移出。手动配置或重新配置数量巨大的计算机可能要花很长时间,而IP主机配置过程中的错误可能导致该主机无法与网络中的其他主机通信。 因此,需要有一种机制来简化IP地址的配置,实现IP的集中式管理。而IETF(Internet网络工程师任务小组)设计的动态主机配置协议(DHCP,Dynamic Host Configuration Protocol)正是这样一种机制。 Page 8
采用DHCP的好处 减少错误 通过配置DHCP,把手工配置IP地址所导致的错误减少到最低程度,例如已分配的IP地址再次分配给另一设备所造成的地址冲突等将大大减少。 减少网络管理 TCP/IP配置是集中化和自动完成的,不需要网络管理员手工配置。网络管理员能集中定义全局和特定子网的TCP/IP配置信息。使用DHCP选项可以自动给客户机分配全部范围的附加TCP/IP配置值。客户机配置的地址变化必须经常更新,比如远程访问客户机经常到处移动,这样便于它在新的地点重新启动时,高效而又自动地进行配置。同时大部分路由器能转发DHCP配置请求,这就减少了在每个子网设置DHCP服务器的必要,除非有其它原因要这样做。 Page 9
DHCP的结构 提出申请 分配地址等参数 地址释放 Client Server DHCP采用客户机/服务器结构。DHCP服务器拥有一个IP地址池,当任何启用DHCP的客户机登录到网络时,可从它那里租借一个IP地址,不使用的IP地址就自动返回地址池,供再分配。 Page 10
DHCP的责任 保证任何IP地址在同一时刻只能由一台DHCP客户机所使用 DHCP应当可以给用户分配永久固定的IP地址 DHCP应当可以同用其他方法获得IP地址的主机共存(如手工配置IP地址的主机) DHCP服务器应当向现有的BOOTP客户端提供服务 Page 11
DHCP的责任 DHCP报文 DHCP Server DHCP报文 Client IP地址池 DHCP报文 DHCP Server DHCP报文 Client 考虑到成本,无需每个子网都配备一台DHCP服务器,所以DHCP协议应当可以通过路由器或者BOOTP代理透传。 Page 12
DHCP的责任 当一台DHCP客户机重新启动时,在允许的情况下,它应当获得和上次相同的地址和配置 192.168.0.1 IP地址池 192.168.0.1 DHCP Server Reboot 192.168.0.1 当一台DHCP客户机重新启动时,在允许的情况下,它应当获得和上次相同的地址和配置 Page 13
DHCP的责任 当一台DHCP服务器重新启动时,在允许的情况下,它应当给每一台DHCP客户机分配和上次相同的地址 192.168.0.1 IP地址池 192.168.0.1 DHCP Server Reboot 192.168.0.1 当一台DHCP服务器重新启动时,在允许的情况下,它应当给每一台DHCP客户机分配和上次相同的地址 Page 14
内容介绍 第一章 使用DHCP的原因 第二章 DHCP的原理 第三章 DHCP工作流程举例 Page 15
DHCP服务器 保留的地址池 (地址池段1) (地址池段2) …… 分配的地址 ……. DNS服务器地址 WINS服务器地址 …… (网络地址1,硬件地址1) 分配的IP地址1 (网络地址2,硬件地址2) 分配的IP地址2 ……. DNS服务器地址 WINS服务器地址 …… Page 16
DHCP客户机 Page 17
地址申请流程 DHCPDISCOVER DHCPOFFER REQUEST DHCPACK Client Server Page 18 DHCP服务器提供三种IP地址分配策略: 自动分配地址(Automatic Allocation):为首次接入网络的某些主机分配固定IP地址,且该地址由此主机长期使用。 手工分派地址(Manual Allocation):由网络管理员为少数主机指定固定IP地址。 动态分配地址(Dynamic Allocation):以“租借”的方式为客户端分配地址,每个地址有一定的租约期限,到期必须重新申请(除非续约)。这是DHCP分配地址最主要的方式。 IP地址分配的优先级为: DHCP服务器的数据库中与客户端MAC地址静态绑定的IP地址。 客户端曾经使用过的IP地址。在客户端再次申请IP地址时,会在发送的DHCP REQUEST报文中的“option”字段加入“option 50:Requested IP Address=x.x.x.x”(x.x.x.x为上次曾经使用过的IP地址)。 在DHCP地址池中顺序查找可供分配的IP地址,首先查到的将被分配。 若上述几步都未找到可用IP地址,则依次查询租期过期、发生冲突的IP地址,找到则分配出去,否则报错。 DHCP协议的实现过程,涉及DHCP Server,DHCP Client,DHCP Relay(如果有)之间的各种报文信息的交互,可分类为Client首次向Server进行的地址申请,Client再次登陆网络地址申请,续约,地址释放四个可选流程,其中又包含不同流程下的数个状态机。分类讨论如下。 Page 18
DHCP的报文种类 DHCPDISCOVER —— 客户机广播发现可用的DHCP服务器 DHCPOFFER —— 服务器响应客户机的DHCPDISCOVER报文,并向客户机提供各种的配置参数 DHCPREQUEST —— a)客户机向服务器申请地址及其他配置参数 b)客户机重新启动后确认原来的地址及其他配置参数的正确性 c)客户机向服务器申请延长地址及其他配置参数的使用期限 DHCPACK —— 服务器向客户机发送所需分配的地址及其他配置参数 Page 19
DHCP的报文种类 DHCPNAK —— 服务器通知客户机,其申请的地址无效,或者已经超期 DHCPDECLINE —— 客户机通知服务器,其分配的地址已经被其他设备所使用 DHCPRELEASE —— 客户机放弃其所使用的地址 DHCPINFORM —— 客户机向服务器申请本地的配置参数(当客户机的地址已经被分配时使用) Page 20
DHCP的有限状态机 INIT -REBOOT REBOOTING SELECTING REQUESING REBINGING BOUND RENEWING DHCPNAK/Restart DHCPNAK/ Discard offer DHCPREQUEST DHCPACK (not accept)/ Send DHCPDECLINE DHCPDISCOVER Select offer/ send DHCPREQUEST DHCPOFFER/Collect replies DHCPACK/Record lease, set timer T1, T2 DHCPOFFER/ DHCPACK/ Record lease, DHCPOFFER, DHCPACK, DHCPNAK/Discard T1 expires/Send DHCPREQUEST to leasing server DHCPACK/Record lease ,set timer T!,T2 T2 expires/Broadcast Halt network Page 21
Client hardware IP address (4) DHCP报文的格式 OP (1) Htype (1) Hlen (1) Hops (1) Xid (4) Secs (2) Flags (2) Client IP address (4) Your IP address (4) Server IP address (4) Gateway IP address (4) Client hardware IP address (4) Server Name (64) File (128) Options (可变) Page 22
DHCP报文的格式 OP: 操作码 (1=bootrequest ,2=bootreply) Htype: 硬件地址类型 (1=10mb ethernet) Hlen: 硬件地址长度 (ethernet 为10) Hops: 客户机设置为0,当使用多个DHCP Relay时可变 Xid: 传输ID,在同服务器的交互中,由客户机所选择 Secs: 客户机所使用的地址,在最近一次地址获取/地址更新后所经过的时间 Flags: 最左边一位是广播位,其余各位置0 “op”字段:operator,表示当前报文是client请求还是server应答,为1时表示是client请求,为2时表示是server应答。 “htype”,“hlen”字段:hardware type,hardware length,分别表示client的网络硬件地址类型,长度,如“htype”为1,表示client的网络硬件是10M以太网类型,“hlen”为6,表示client的网络硬件地址长度为6byte(即以太网类型的6byte的MAC地址)。 “hops”字段:表示当前的DHCP报文经过的DHCP RELAY的数目,类似于IP头中的跳数字段,但含义完全不同,client或server发出DHCP报文时,该字段都被置为0,每经过一个DHCP RELAY,字段加1,此字段的作用是限制DHCP报文不要经过太多的DHCP RELAY,协议规定,当“hops”大于4(现在也有规定16)时,这个DHCP报文将被丢弃。 “xid”字段:client每次发送DHCP请求报文时选择的随机数,用来匹配server的相应报文是对应的哪个请求报文。 “secs”字段:由client 填充,用来表示client地址请求或续约过程中时间流逝的秒数。此字段已经没有太大意义,最初设计此字段是为了让DHCP SERVER在繁忙时优先处理此字段大的DHCP请求。 “flags”字段:在BOOTP中此字段是保留不用的,在DHCP协议中使用了其左边的最高位,格式如下: Flags字段格式 整个字段占16比特,最左边的B为广播响应标识位,其余为保留备用,必须被client置0。当client不能接受单播的DHCP响应报文时,必须把B置1,否则置0。而DHCP SERVER在回响应报文时是广播还是单播,就将根据此广播响应标识位来判断。 Page 23
DHCP报文的格式 Client IP address: 客户机在BOUND,RENEW或REBINDING状态所使用,可以用来回应ARP请求报文 Your IP address: 服务器给客户机分配的IP地址 Server IP address: bootstrap中使用的下一台服务器的地址,由服务器在DHCPOFFER,DHCPACK中使用 Gateway IP address: 使用的DHCP Relay的地址 Client hardware address: 客户机硬件地址 Server name: 服务器名字,缺省为空 File: 启动文件的名字,在DHCPOFFER报文中给出全名 Options: 根据不同的报文而定 “ciaddr”字段:client ip address,表示client自己的IP地址。当client能够使用此IP地址接受IP报文时,就将该字段用此IP地址填充,否则置0。DHCP SERVER发现此字段不为0时,将按填充的IP地址直接将响应报文单播给client。 “yiaddr”字段:your ip address,表示server分配给client的IP地址。当DHCP SERVER响应client的DHCP请求时,将把分配给client的IP地址填入此字段。 “siaddr”字段:server ip address,表示client获得启动配置信息的server的IP地址。 “giaddr”字段:gateway ip address,记录第一个DHCP RELAY agent的地址。当client发出DHCP请求报文后,如果网络中存在DHCP RELAY,则第一个DHCP RELAY转发这个请求报文时,将把自己的IP地址填入此字段,随后的DHCP RELAY将不改写该字段,只是将“hops”加1。DHCP SERVER将根据此字段为客户端分配IP地址(必须为同一网段),再把响应报文由DHCP RELAY agent转发给client。 “chaddr”字段:client hardware address,记录client的实际硬件地址。DHCP SERVER一般根据此字段来唯一标识一个client。而且此字段必须与前面的“htype”“hlen”字段一致。如当“htype”“hlen”分别为1和6时,此字段必须填入6字节的以太网地址。 “sname”字段:server name,记录client获取启动配置信息的服务器名字。此字段由DHCP SERVER填写,而且是可选的,如果填写,必须为一个以0结尾的字符串。 “file”字段:Boot file name,记录client的启动配置文件名,由DHCP SERVER填写。可选,如果填写,必须是以0结尾的字符串。 “option”字段:可选变长选项字段,对于BOOTP,又称为“vendor”字段。此字段包含了大量可选的终端初始配置信息和网络配置信息。如决定终端的IP特性配置信息,域名信息,表识终端的特殊信息,终端的默认网关信息,WINS服务器的IP地址,用户使用IP地址的有效租期等等。正是因为有了此字段,DHCP协议才能够给client提供大量的配置信息,此字段采用“CLV”方式构成,即code:标识号,唯一标识后面的信息内容,占1bytes;length:长度,表示后面信息内容的长度,占1bytes; value:信息内容,其长度为length所指定,以bytes为单位。 当需要新的信息时,可以按照这种编码方式申请新的option即可,目前DHCP协议已经支持即成为标准的option已有近80项,具体内容可以参考RFC2132。由于option不断扩展,可以从最新的RFC中得到最新的option集合。其中最常用的option包括Dhcp message type, router IP,DNS IP, Wins IP,client id, server id等选项。 Dhcp message type:code = 53, length = 1, value= 1----8,此字段表示DHCP报文类型; router IP :code = 3, length = IP地址长度, value=client的默认网关的 IP地址; DNS IP :code = 6, length = IP地址长度的倍数, value= client的DNS服务器的IP地址序列; Wins IP :code = 44, length = IP地址长度的倍数, value= client的WINS服务器的 IP地址序列; client id :code = 61, length = client的网络硬件地址的长度+2, value=“htype”+“hlen”+ client的网络硬件地址; server id :code = 54, length = IP地址长度, value= DHCP SERVER的IP地址; 对于BOOTP协议,此字段为64bytes,对于DHCP协议,此字段为64---312 bytes,当client想要更长时,可以与DHCP SERVER协商。由于“options”字段是个可变长度的,DHCP Client必须能够接受包含有312字节长度的“options”长度的DHCP报文,也就是说DHCP Client必须能够接受至少576字节长度的IP报文(DHCP报文部分:312+236,UDP头8,IP头20)。 Page 24
DHCPDISCOVER/DHCPINFORM报文的格式 BOOTREQUEST Htype (1) Hlen (1) Xid (4) 0或者自从DHCP启动后的秒数 Flags (2) 0(DHCPDISCOVER)/客户机的IP地址(DHCPINFORM) Client hardware IP address (4) Server Name (64) File (128) Options (可变) Page 25
DHCPREQUEST报文的格式 Htype (1) Hlen (1) Xid与DHCPOFFER报文的Xid相同 Secs (2) BOOTREQUEST Htype (1) Hlen (1) Xid与DHCPOFFER报文的Xid相同 Secs (2) Flags (2) 0/客户机的IP地址(BOUND/RENEW/REBIND状态) Client hardware IP address (4) Server Name (64) File (128) Options (可变) Page 26
DHCPDECLINE/DHCPRELEASE报文的格式 BOOTREQUEST Htype (1) Hlen (1) 由客户机选择 0(DHCPDECLINE)/客户机的IP地址(DHCPRELEASE) Client hardware IP address (4) 未使用 Page 27
DHCPOFFER报文的格式 Htype (1) Hlen (1) Xid与DHCPDISCOVER报文相同 服务器向客户机提供的IP地址 BOOTREPLY Htype (1) Hlen (1) Xid与DHCPDISCOVER报文相同 服务器向客户机提供的IP地址 下一台服务器的地址 Client hardware IP address (4) Server Name (64) File (128) Options (可变) Page 28
DHCPACK报文的格式 Htype (1) Hlen (1) Xid与DHCPDISCOVER报文相同 BOOTREPLY Htype (1) Hlen (1) Xid与DHCPDISCOVER报文相同 0或者从DHCPREQUEST报文中获得 服务器向客户机提供的IP地址 下一台服务器的地址 Client hardware IP address (4) Server Name (64) File (128) Options (可变) Page 29
DHCPOFFER报文的格式 Htype (1) Hlen (1) Xid与DHCPDISCOVER报文相同 BOOTREPLY Htype (1) Hlen (1) Xid与DHCPDISCOVER报文相同 Client hardware IP address (4) Server Name (64) File (128) Options (可变) Page 30
DHCP流程 客户机在本网段内广播DHCPDISCOVER报文已发现网络中的DHCP服务器,DHCP Relay可将此报文广播到其他的网段 网络2 DHCPDISCOVER 网络1 发现阶段 Client在它本地物理子网上广播一个DHCPDISCOVER报文,该报文可以包含请求的租约期限和请求的option选项建议值(当然也可以没有)。如果子网上存在BOOTP Relay Agents,也会将这个报文转发到Agents连接的不同物理子网的DHCP Server。只有DHCP Server才会对这个报文进行响应。 DHCPDISCOVER报文的作用,就是由客户端广播来查找DHCP服务器。 客户机在本网段内广播DHCPDISCOVER报文已发现网络中的DHCP服务器,DHCP Relay可将此报文广播到其他的网段 Page 31
DHCP流程 DHCPOFFER (192.168.0.1) ICMP (192.168.0.1) 网络1 服务器向客户机回应请求,并给出一个可用的IP地址。此地址并非真的被分配。但在给出此地之前,应当用ICMP ECHO REQUEST报文进行检查。 Page 32
DHCP流程 Reboot DHCPREQUEST (192.168.0.1) 192.168.0.1 网络1 如果收到多个DHCPOFFER报文,DHCP客户机会根据报文的内容从其中选择一个给与响应。如果客户机之前曾经获得过一个IP地址,她会将此地址写在DHCPREQUEST报文的OPTIONS域的“REQUESTD IP ADDRESS”中发给服务器 网络上每个收到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”时为单播。 Page 33
DHCP流程 当收到DHCPREQUEST报文后,服务器将客户机的网络的(网络地址,硬件地址)同分配的IP地址绑定,在将IP地址发送给客户机 分配的地址 (网络地址1, 硬件地址1) 分配的IP地址1 ……. DHCPACK (192.168.0.1) 保留的地址池 (地址池段1) (地址池段2) …… DNS地址 WINS地址 …… 网络1 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可以根据自己的实际决定哪些配置哪些忽视。 当收到DHCPREQUEST报文后,服务器将客户机的网络的(网络地址,硬件地址)同分配的IP地址绑定,在将IP地址发送给客户机 Page 34
DHCP流程 当收到DHCPREQUEST报文后,如果发现其申请的地址无法被分配,则用DHCPNAK报文回应 DHCPREQUEST (192.168.0.1) 192.168.0.1已经被另外一台 设备所使用了 DHCPNAK 网络1 确认阶段 被选择的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报文,也会重新开始地址申请。 当收到DHCPREQUEST报文后,如果发现其申请的地址无法被分配,则用DHCPNAK报文回应 Page 35
DHCP流程 192.168.0.1 DHCPACK (192.168.0.1) DHCPDECLINE 网络1 客户机收到DHCPACK报文后,再对所有的参数进行一次最后的检查,如果发现由地址冲突存在,则使用DHCPDECLINE报文回复服务器 Page 36
DHCP流程 如果客户机放弃现在使用的IP地址,则她使用DHCPRELEASE报文通知服务器,服务器将此地址回收以备下次使用。 网络1 如果客户机放弃现在使用的IP地址,则她使用DHCPRELEASE报文通知服务器,服务器将此地址回收以备下次使用。 Page 37
DHCP流程 当客户机的地址到达50%租用期(T1)时,客户机进入RENEW状态,使用DHCPREQUEST报文续约; 网络1 当客户机的地址到达50%租用期(T1)时,客户机进入RENEW状态,使用DHCPREQUEST报文续约; 当客户机的地址到达87.5%租用期(T2)时,客户机进入REBINDING状态,使用DHCPREQUEST报文续约; Page 38
内容介绍 第一章 使用DHCP的原因 第二章 DHCP的原理 第三章 DHCP工作流程举例 Page 39
DHCP流程举例 服务器 10.77.11.10 DHCP- RELAY 10.77.2.1 客户机 Page 40
DHCP流程举例 Page 41
DHCP流程举例 Page 42
DHCP流程举例 Page 43
DHCP流程举例 Page 44
DHCP流程举例 Page 45
DHCP流程举例 Page 46
DHCP流程举例 Page 47
小结 本章主要通过对DHCP报文结构及流程的介绍,希望大家能够建立起对DHCP协议的清晰概念 Page 48