DHCP学习总结Word格式文档下载.docx
《DHCP学习总结Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《DHCP学习总结Word格式文档下载.docx(30页珍藏版)》请在冰豆网上搜索。
3.4DHCP服务器的工作过程17
3.4.1DHCPDISCOVER消息的处理17
3.4.2DHCPREQUEST消息的处理19
3.4.3DHCPDECLINE消息的处理22
3.4.4DHCPRELEASE消息的处理22
3.4.5DHCPINFORM消息的处理22
3.4.6客户端消息的区别22
3.5DHCP客户端的工作过程23
3.5.1未分配网络地址时的初始化23
3.5.2已知网络地址后的初始化25
3.5.3外部分配地址后的初始化25
3.5.4使用单播还是广播25
3.5.5重新获得和超时26
3.5.6DHCPRELEASE消息26
3.6DHCP中继的工作原理26
3.6.1DHCP客户端通过DHCP中继首次申请地址27
3.6.2DHCP客户端通过DHCP中继延长租期29
4参考资料30
附录130
1DHCP概述
1.1DHCP简介
DHCP(DynamicHostConfigurationProtocol)协议是在BootstrapProtocol(BOOTP)的基础上提出,其作用是在TCP/IP网络中向Internet主机提供配置信息。
DHCP采用客户端/服务器通信模式,由DHCP客户端向DHCP服务器提出配置申请(包括IP地址、子网掩码、缺省网关等参数),服务器根据路由策略返回相应配置信息,DHCP报文采用UDP进行封装,使用两个知名端口:
服务器为67,客户端为68。
1.2DHCP提供的服务
1.2.1配置参数的存储
DHCP要提供的第一个服务就是能够为客户端的参数配置提供持久稳固的存储,该模型中,为每个客户端存储了一个key-value对,如IP子网号和客户端标识组成一个key,value则包好了客户端要配置参数的内容。
对于Key值的选定,RFC中没有硬性规定,一般采用IP子网号+客户端硬件地址来标识,这样,对于不同的子网,可以有相同的硬件地址。
Key也可以是IP子网号+主机名,这样服务器在客户端更换了硬件地址后,也可以根据主机名智能的分配参数。
1.2.2动态分配网络参数
DHCP要提供的第二个功能就是为客户端分配一个暂时的或者永久的IP地址。
客户端向服务器请求在一段时间内租用一个地址,服务器则分配给客户端一个地址,并规定了该地址的租用时间,我们称这个时间为“租期”(lease)。
客户端可以通过与服务器的交互延长其租期,可以请求释放地址,结束与服务器的租约。
在某些环境中,由于地址的缺乏,需要重新分配网络地址,分配机制就是使用已经到租期的地址。
服务器应该利用在配置信息库中的任何可用的信息来选择一个重新使用的地址,比如,选择最近分配过的地址。
由于需要一致性检查,DHCP服务器在分配地址时需要保证要分配的地址没有被使用,一般可以在分配地址之前,发送一个ICMPECHO报文,目的地址就是要分配的IP地址。
这样,如果有客户端回应了该ICMPECHO报文,则标识该地址已经被使用;
但是,即使没有客户端回应,也不能代表该地址没有被分配,因为客户端可能开启了防火墙,防止ICMP包的进入。
不仅服务器需要检查,客户端也应该检查该地址是否被使用,可以在收到分配的地址后,发送一个免费的ARP,如果有客户端回应这个ARP,则表示本地子网有已经分配了该IP的客户端,如果没有回应该ARP,则标识该地址本地子网未使用。
一般来讲,开启了防火墙的客户端是不会阻挡ARP的,所以这种探测方法较好。
1.3DHCP分组格式
DHCP的分组格式如图1所示。
图1DHCP的分组格式
DHCP的各类报文均被封装在UDP数据报中。
由于DHCP报文的选项字段是可变长的,所以DHCP报文的长度没有固定值,但最小长度是548字节。
1.4DHCP中的角色
DHCP在实际组网环境中有三种角色:
DHCP服务器、DHCP中继和DHCP客户端。
1.4.1DHCP服务器
提供DHCP服务,根据DHCP客户端的请求,为客户端分配IP地址、子网掩码、缺省网关等参数,一般存在于路由器、三层交换机或者专门的DHCP服务器。
其典型的组网应用如图2所示。
该应用中包含一台DHCP服务器和多台客户端(如PC和便携机)。
图2DHCP服务器典型组网应用
1.4.2DHCP中继
早期的DHCP协议只适用于DHCP客户端和服务器处于同一个网段内的情况,不能跨网段。
因此,为进行动态主机配置,需要在每个网段设置一个DHCP服务器,这显然是很不经济的。
DHCP中继(DHCPRelay)功能解决了这一难题:
客户端可以通过DHCP中继与其他网段的DHCP服务器通信,最终取得合法的IP地址。
这样,多个网段的DHCP客户端可以使用同一个DHCP服务器,既节省了成本,又便于集中管理。
其典型的组网应用如图3所示。
图3DHCP中继的典型组网应用
1.4.3DHCP客户端
DHCP客户端就是使用DHCP协议获得网络配置参数(IP地址、子网掩码、缺省网关等)的三层设备,最常见的就是普通的Internet主机。
1.5DHCP组网方式
常见的DHCP组网方式可分为两类。
●DHCP服务器和客户端都在一个网段内,直接进行DHCP协议的交互,如图2所示;
●DHCP服务器和客户端分别处于不同的网段中,必须通过DHCP中继代理实现IP地址的分配,如图3所示。
1.6DHCP设计目标
以下给出了DHCP的基本设计目标
¡
DHCP应该是一种机制而不是一种策略,它必须允许本地系统管理员控制配置参数,本地系统管理员应该能够对所希望管理的资源管理进行有效地管理。
客户端不需要手工配置,应该能在客户不参与的情况下发现合适的本地配置参数,并将这些参数添加到自己的配置中。
不需要对单个客户端手工配置网络,一般情况下,网络管理员不需要输入任何预先设计好的配置参数。
DHCP不要求在每个子网上都有服务器,考虑到规模和经济的原因,DHCP必须可以通过路由器和DHCP代理进行工作
DHCP客户端必须能够对多个DHCP服务器提供的服务做出处理,为了提高系统稳定性,某些部署中都会有多台DHCP服务器。
DHCP必须能够和静态配置共存,以现有的协议来实现
DHCP必须能够和BOOTP中继代理互操作
DHCP必须能够为现有的BOOTP客户服务
下面的设计目标是对于网络层参数而言,DHCP也必须到达:
保证在同一时间,不能有两个及以上的客户端使用同一个网络地址
DHCP客户端重启后,应能保留客户端的参数配置,并尽可能的获取相同的配置参数
DHCP服务器在重启后,应能保留客户端格的参数配置,并在DHCP重启启动后,为客户端分配其原来的配置参数
能够为新加入的客户端自动分配参数
支持为特定的客户端分配固定的和永久的配置参数
2DHCP报文详解
2.1DHCP报文格式
DHCP的报文格式如图4所示。
图4DHCP的报文格
图4中括号里的数字表示字段的长度,单位是字节。
表1给出了DHCP报文中各字段的含义。
表1DHCP报文中各个字段的含义
字段
长度
含义
OP
1字节
表示报文的类型:
●1:
客户端请求报文
●2:
服务器响应报文
HardwareType
表示硬件地址的类型。
对于以太网,该类型的值为“1”。
HardwareLength
表示硬件地址的长度,单位是字节。
对于以太网,该值为6。
Hops
表示当前的DHCP报文经过的DHCPRelay的数目。
该字段由客户端设置为0,每经过一个DHCPRelay时,该字段加1。
此字段的作用是限制DHCP报文所经过的DHCP中继数目。
说明:
服务器和客户端之间的DHCP中继不能超过4次,也就是Hops值不能大于4,否则DHCP报文将被丢弃。
TransactionID
4字节
用户选取的随机数,使服务器的回复与用户的报文相关联。
Seconds
2字节
该字段表示客户端在开始DHCP请求后的逝去的秒数,单位是秒。
Flags
此字段在BOOTP中保留未用,在DHCP中表示标志字段。
如图5所示,只有标志字段的最高位才有意义,其余的位均被置为0。
最左边的字段被解释为广播响应标志位,内容如下所示:
●0:
客户端请求服务器以单播形式发送响应报文
客户端请求服务器以广播形式发送响应报文
ClientIPAddress
该字段表示客户端的IP地址。
可以是服务器分配给客户端的IP地址或者客户端已有的IP地址。
客户端在初始化状态时没有IP地址,此字段为0.0.0.0。
说明
IP地址0.0.0.0仅在采用DHCP方式的系统启动时允许本主机利用它进行临时的通信,并且永远不是有效目的地址。
Your(Client)IPAddress
该字段表示Server分配给客户端的IP地址。
当服务器进行DHCP响应时,将分配给客户端的IP地址填入此字段。
ServerIPAddress
该字段表示服务器IP地址。
RelayAgentIPAddress
该字段表示第一个DHCP中继的IP地址。
当客户端发出DHCP请求时,如果服务器和客户端不在同一个网络中,那么第一个DHCP中继在转发这个DHCP请求报文时会把自己的IP地址填入此字段。
服务器会根据此字段来判断出网段地址,从而选择为用户分配地址的地址池。
服务器还会根据此地址将响应报文发送给此DHCP中继,再由DHCP中继将此报文转发给客户端。
若在到达DHCP服务器前经过了不止一个DHCP中继,那么第一个DHCP中继后的中继不会改变此字段,只是把Hops的数目加1。
ClientHardwareAddress
16字节
该字段表示客户端的MAC地址,此字段与前面的“HardwareType”和“HardwareLength”保持一致。
当客户端发出DHCP请求时,将自己的硬件地址填入此字段。
对于以太网,当“HardwareType”和“HardwareLength”分别为“1”和“6”时,此字段必须填入6字节的以太网MAC地址。
ServerHostName
64字节
该字段表示客户端获取配置信息的服务器名字。
此字段由DHCPServer填写,是可选的。
如果填写,必须是一个以0结尾的字符串。
FileName
128字节
该字段表示客户端的启动配置文件名。
此字段由DHCPServer填写,是可选的,如果填写,必须是一个以0结尾的字符串。
Options
可变
该字段表示DHCP的选项字段,至少为312字节。
DHCP通过此字段包含了服务器分配给终端的配置信息,如网关IP地址,DNS服务器的IP地址,客户端可以使用IP地址的有效租期等信息。
对Options字段的详细解释请参见"
2.2DHCP报文中的Options字段"
。
图5DHCP报文中Flags字段格式
2.2DHCP报文中的Options字段
2.2.1Options字段的格式
Options字段的格式如图6所示。
图6Options字段的格式
Options字段由Code、Length和Value三部分组成。
这三部分表示的含义如下所示:
表2Options各字段的含义
Code
标识号,该字段表示后面的信息内容
Length
该字段表示后面信息内容的长度
Value
其长度为Length字段所指定
该字段表示信息内容
一些比较常用的Options如表3所示。
表3Options举例
Code值
Length值
Value内容
1
4
子网掩码
3
IP地址长度,必须为4的整数倍
客户端默认网关的IP地址,可以指定多个网关地址
6
P地址长度,必须为4的整数倍
客户端的DNS服务器的IP地址,可以指定多个DNS服务器地址
53
1~9,此字段表示DHCP报文类型,具体的报文类型请参见"
2.3DHCP的报文类型"
54
DHCP服务器的IP地址
2.2.2Options字段的作用
DHCP报文中的Options字段可以用来存放某些普通协议中没有定义的控制信息和参数。
如果用户在DHCP服务器端配置了Options,DHCP客户端在申请IP地址的时候,会通过服务器端回应的DHCP报文获得Options字段中的配置信息。
根据Options选项功能的不同,此字段的作用对象也不同。
比如Option77用于DHCP客户端,用于识别用户或应用程序所属的类型,根据Option字段中所携带的用户类型(UserClass),DHCP服务器选择适当的地址池为客户端分配IP地址以及相关配置参数。
Option77一般在客户端由用户进行配置,而不必用命令在服务器端配置。
RFC2132,RFC2241等定义了DHCPOptionCode的含义和用法。
2.3DHCP的报文类型
DHCP报文分为8种类型,DHCP服务器和客户端之间通过这8种类型的报文进行通信。
●DHCPDISCOVER:
这是DHCP客户端首次登录网络时进行DHCP过程的第一个报文,用来寻找DHCP服务器。
●DHCPOFFER:
DHCP服务器用来响应DHCPDISCOVER报文,此报文携带了各种配置信息。
●DHCPREQUEST:
此报文用于以下三种用途。
✧客户端初始化后,发送广播的DHCPREQUEST报文来回应服务器的DHCPOFFER报文。
✧客户端重启初始化后,发送广播的DHCPREQUEST报文来确认先前被分配的IP地址等配置信息。
✧当客户端已经和某个IP地址绑定后,发送单播的DHCPREQUEST报文来延长IP地址的租期。
●DHCPACK:
服务器对客户端的DHCPREQUEST报文的确认响应报文,客户端收到此报文后,才真正获得了IP地址和相关的配置信息。
●DHCPNAK:
服务器对客户端的DHCPREQUEST报文的拒绝响应报文,比如服务器对客户端分配的IP地址已超过使用租借期限或者客户端移到了另一个新的网络。
●DHCPDECLINE:
当客户端发现服务器分配给它的IP地址发生冲突时会通过发送此报文来通知服务器,并且会重新向服务器申请地址。
●DHCPRELEASE:
客户端可通过发送此报文主动释放服务器分配给它的IP地址,当服务器收到此报文后,可将这个IP地址分配给其它的客户端。
●DHCPINFORM:
客户端已经获得了IP地址,发送此报文的目的是为了从服务器获得其他的一些网络配置信息,比如网关地址、DNS服务器地址等。
3DHCP工作原理
3.1DHCPIP地址分配策略
对于IP地址的占用时间,不同主机有不同的需求:
对于服务器,可能需要长期使用确定的IP地址;
对于某些主机,可能需要长期使用某个动态分配的IP地址;
而某些个人则可能只在需要时分配一个临时的IP地址就可以了。
针对这些不同的需求,DHCP服务器提供三种IP地址分配策略。
●手工分配地址:
由管理员为少数特定主机(如WWW服务器等)配置固定的IP地址,即将客户端的MAC地址与某个IP地址绑定。
当此MAC地址的客户端申请DHCP地址时,服务器根据客户端MAC地址寻找到对应的固定IP地址分配给客户端。
●自动分配地址:
为首次连接到网络的某些主机分配固定IP地址,该地址将长期由该主机使用。
●动态分配地址:
以“租借”的方式将某个地址分配给客户端主机,使用期限到期后,客户端需要重新申请地址。
绝大多数客户端主机得到的是这种动态分配的地址。
3.2客户端与服务器的协议交互
3.2.1申请一个新地址
下面是客户端和服务器端进行协议交互的过程,图7给出了交互图。
本节给出的是完整的交互过程,如果客户端已经知道了自己的IP地址,则其中某些过程可以省略,3.2.2节将说明这个问题。
1、客户端主机接入网络后,需要申请一个地址才能使用网络,它会在本地子网内广播一个DHCPDISCOVER消息,该消息中可以包括一些选项,要求获得指定的网络地址和租期等。
如果DHCP客户端和DHCP服务器不在一个子网内,可以通过中继代理(Relayagent)来转发客户端的DHCPDISCOVER消息,当然该消息转发后不再是广播报文,而是一个单播报文,由中继代理填写正确的源IP和目的IP,发送到相应的DHCP服务器。
2、DHCP服务器收到DHCPDISCOVER消息后,回应一个DHCPOFFER消息。
服务器在DHCPOFFER消息中的yiaddr字段(youripaddress)填写的是要分配给客户端的IP地址,另外还需要向客户端返回客户端的请求参数列表中的选项,如果服务器不支持,则不返回相应的选项。
在DHCPOFFER消息中分配的地址,没有要求服务器为其保留,防止其他客户端使用。
当然,如果为其保留了避免再次分配给其他客户端,这样DHCP协议就更加高效了。
DHCP服务器在分配一个新地址之前,应该检查该地址是否已经被使用,可以通过发送一个ICMPECHO报文来探测,ICMPECHO报文的目的地址需要填成要分配的IP地址。
如果有客户端已经使用了该地址,则会回应一个ICMPREPLY消息给服务器(当然,如果客户端使用了防火墙,可能不会回应ICMP消息,则这种探测就会失败),服务器收到后,认为该地址已经被分配,就不会再分配该地址,而是重新选择地址进行分配。
3、通常为了保证网络的可靠性,一个子网内会有两个或者多个DHCP服务器互相备份。
客户端发送的DHCPDISCOVER消息是广播报文,因此子网内所有的DHCP服务器都会收到该报文,并且每个服务器都会回应一个DHCPOFFER消息。
这样,客户端就可能收到多个DHCPOFFER消息,在收到消息后,会根据DHCPOFFER消息中的配置参数来选择其中一个服务器作为回应。
客户端回应的消息是DHCPREQUEST消息,它和DHCPDISCOVER一样是广播报文,其中消息中必须带有Serveridentifier选项以指定所选择的DHCP服务器,一些客户端期望服务器分配的参数也可以包含在消息中。
DHCPREQUEST消息中的RequestIPaddress选项的值必须和接收的DHCPOFFER消息中yiaddr的值相同。
也就是,服务器准备分配给客户端的IP地址必须是客户端请求的IP,客户端不能请求的其他IP地址。
DHCPREQUEST是广播报文,当DHCP服务器不在本地子网时,需要通过DHCP/BOOTP中继代理relay到服务器。
DHCP客户端如何在一定的时间内没有收到DHCPOFFER,并重传DHCPDISCOVER报文。
4、DHCP客户端发送的DHCPREQUEST广播消息会达到所有的DHCP服务器,如果是通过DHCP中继代理relay的,一般会relay到指定的服务器。
DHCPREQUEST消息中的Serveridentifier指明了客户端所使用的DHCP服务器,未被Serveridentifier指明的服务器收到该消息后就认为客户端拒绝了自己的OFFER报文,不再向客户端发送回应报文了,而被选中的DHCP服务器则存储客户端的标识和分配的IP地址及其他信息于自己的数据库中,并回应客户端一个DHCPACK消息。
clientidentify或者chaddr与分配的IP地址组成的标识是客户端租约的唯一标识,同时也是客户端和服务器在DHCP消息中的租期的唯一标识。
在DHCPACK消息中收到的任何参数都不能和之前收到的DHCPOFFER消息中的参数有冲突和不同。
其中DHCPACK消息中的yiaddr字段就是客户端即将分配的地址了。
如果被选中的DHCP服务器不“同意”DHCPREQUEST消息中的参数(如请求的网络地址已经被分配出去),则server应该回应一个DHCPNAK报文。
图7DHCP客户端和服务器交互图(申请一个新的网络地址)
5、客户端接收到DHCPACK消息后,应该对参数执行最后的检查(比如,计算机在获得地址后,都会发送免费ARP报文,告知别人自己的地址和探测是否有地址冲突),以及通知租期的时间。
这样,客户端就配置好了。
如果客户端发现此IP地址已经被使用,必须发送一个DHCPDECLINE消息给DHCP服务器,重新申请地址。
客户端在重新申请地址前,最好等待客户端10秒左右,防止万一环路导致过多的网络流量。
如果客户端收到一个DHCPNAK消息,也会重新申请地址的过程。
客户端在等待DHCPACK消息期间会启动定时器,如果一定时间内没有收到任何DHCPACK或者DHCPNAK消息,则认为超时,并重传DHCPREQUEST消息。
DHCP客户端采用一定的重传算法重传DHCPREQUEST消息几次,如果还收不到DHCPACK或者DHCPNAK消息,则客户端回到其状态机的INIT状态,并重新初始化,进行申请地址。
6、客户端可以通过DHCPRELEASE消息来通知服务器释放地址和租约,客户端通过DHCPRELEASE消息中的“clientidentifier”或者“chaddr”以及网络地址来释放指定的租约。
客户端在获取租约和释放租约时,必须使用同一个“clientidentifier”。
3.2.2重复使用以前分配的地址
如果客户端保存了之前分配的IP地址,并且希望再次使用该地址时,其交互过程同新申请地址的交互过程类似,不过某些过程可以省略而已,如图8所示。
1、客户端在本地子网内广播DHCPREQUEST消息,消息的“RequestIPaddress”字段是客户端之前的IP地址。
由于客户端还没有接收到分配给自己的IP地址,ciaddr域一定不能填写。
如果客户端在获取地址时使用了“clientidentifier”,在DHCPREQUEST消息也必须使用相同的“clientidentify”。
2、服务器在接收到DHCPREQUEST消息后,根据存储的信息,响应一个DHCPACK消息。
DHCP在此种情况下不应该去检查地址是否被使用,因为如果DHCP服务器发送了ICMPECHO报文来探测地址是否被使用,而这时客户端可能会回应该ICMP报文,结果导致服务器误