DHCP
Dynamic Host Configuration Protocol,动态主机配置协议,采用C/S模式,主要应用在为客户机自动分配IP地址、子网掩码、缺省网关、DNS服务器的IP地址等。
基于UDP协议,采用的知名端口号如下:
DHCP server:67
DHCP client:68
DHCPv6 Client:546
协议报文
DHCP一共有8种报文,按照客户端和服务器可分为:
server(reply):dhcp offer、dhcp ACK、dhcp NAK
client(request):dhcp discover、dhcp request、dhcp release、dhcp decline、dhcp inform
DHCP Discover
广播报文,dhcp client并不知道server的IP,因此客户端会在本地网络内广播发送discover报文,以期望发现网络中的dhcp服务器。所有收到discover报文的dhcp服务器都会回复应答报文,如此dhcp客户端可以知道网络中dhcp服务器的位置。
DHCP Offer
广播/单播,dhcp server收到discover报文后,就会在配置的地址池pool中查找一个合适的IP地址,加上相应的租期和其他配置信息(路由、DNS等),构造一个offer报文,发送给dhcp client,通知客户端可以为它提供IP地址。但是这个报文只是告诉dhcp客户端可以提供这个IP地址,并不是直接可以用,还需要客户端进行地址冲突检测,通常是发送ARP报文来确定此IP是否已经被占用。DHCP offer报文以广播或者单播回复,依赖于discover报文中的Flags。
DHCP Request
广播/单播,dhcp server可能会收到很多offer请求报文,所以必须在这些应答中选择一个,通常的策略是选择收到的第一个报文作为自己的目标服务器,并向这个服务器发送广播的request报文,通告自己选择的服务器,希望获得分配的IP地址。广播也是为了通知其他服务器,如果没有被选中,则需要删除相关信息。
dhcp client在成功获取IP地址后,在地址使用租期到达50%时,会向服务器发送单播request请求报文,请求续延租约,如果没有收到ACK,在租期到达87.5%时,会再次发送单播的request请求报文,请求续延租约。
DHCP ACK
广播/单播,dhcp server收到request请求报文后,根据request报文中携带的用户MAC来查找有没有相应的租约记录,如果有,则发送ACK应答报文,通知用户可以使用分配的IP地址。
DHCP NAK
广播/单播,如果dhcp server收到request请求报文后,没有发现相应的租约记录或者 由于某些原因无法正常分配IP地址,则向DHCP客户端发送NAK应答报文。
DHCP Release
单播,当dhcp client不再需要使用分配IP地址时,就会主动向DHCP server发送Release请求报文,通知服务器不再需要分配IP地址,请求服务器释放对应IP地址。
DHCP Decline
单播,dhcp client收到server的ACK报文后,通过地址冲突检测,发现服务器分配的IP地址冲突或者由于其他原因不可使用,则会向DHCP服务器发送DHCP Decline请求报文,通知服务器IP不可用。
DHCP Inform
单播,DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文。目前基本上不用了。
DHCP Client重新登录
DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ACK确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给 DHCP客户机回答一个DHCP NAK否认信息。当原来的DHCP客户机收到此DHCP NAK否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。
DHCP报文格式
解析:
1、OP
报文操作类型,1:请求报文,2:应答报文
2、Htype
客户端MAC地址类型,指明网络类型,1:Ethernet MAC
3、Hlen
客户端MAC地址长度,以太网MAC地址长度6
4、Hops
DHCP报文经过的DHCP中继数目,默认为0.dhcp请求报文每经过一个中继增加1,如果需要经过路由,同样+1
5、Xid
客户端通过dhcp discover报文发起一次请求报文时选择的随机数,相当于请求标识,一次IP请求过程,所有的xid都是一样的。
6、secs
客户端从获取IP地址或者续约过程开始到现在所消耗的时间,以秒为单位。在没有获取到IP之前,这个值一直为0。
7、flags
标志位,只使用第15比特(最左边),是广播应答标识位,0表示单播,1表示广播。
8、ciaddr
dhcp客户端ip地址,仅在服务器发送的ACK报文中显示,其他报文均显示0。因为,在ACK之前,IP地址还没有真正分配给客户端。
9、yiaddr
dhcp服务器分配给客户端的IP地址。仅在dhcp服务器发送的offer和ACK报文中显示,其他报文显示0.
10、siaddr
下一个为dhcp客户端分配IP地址等信息的dhcp服务器IP地址。仅在dhcp offer、ACK中显示,其他报文均显示0.
11.、giaddr
dhcp客户端发出请求报文后经过的第一个dhcp中继的IP地址。如果没有经过中继,则显示0。
12、chaddr
dhcp客户端MAC地址。在每个报文中都会显示对应dhcp客户端的MAC地址。
13、sname
为dhcp客户端分配IP地址的dhcp服务器名称(DNS域名格式),在offer和ACK报文中显示发送报文的dhcp服务器名称,其他报文显示0.
14、File
dhcp服务器为客户端指定的启动配置文件名称和路径信息。仅在dhcp offer报文中显示,其他报文中显示为空。
15、options
可选项字段,长度可变,格式为“代码+长度+数据”
option82是华为自定义的。
THANKS!