动态主机设定协议(DHCP)

339 阅读6分钟

动态主机设定协议(Dynamic Host Configuration Protocol,DHCP),是一个用于IP网络的网络协议,位于OSI模型的应用层,使用UDP协议工作。

DHCP通常被用于局域网环境,主要作用是集中的管理、动态分配IP地址。

简单地说,DHCP就是一个不需要账号密码登录的、自动给内网机器分配IP地址等的协议。

分配IP地址的方式

1、手工配置方式:通过网络管理员手工配置某台客户端待定的IP地址,当客户端请求分配时,DHCP服务器就将手动配置的IP地址分配给客户端

2、自动配置方式:当DHCP客户端第一次向服务端租用到第一个IP地址之后,就将这个IP地址永久的分配给这个服务端使用

3、动态配置方式:服务器暂时分配一个IP地址给客户端,根据租约到期或者续约租期的方式来管里分配的IP地址

DHCP报文格式

在DHCP报文中,存在许多字段,其中重要的有:

1、flags标志字段(广播响应标识位),用来标识DHCP服务器发出的响应报文是广播还是单播,其中0是广播,1是单播,长度为2字节,但只使用最左边的比特位

2、chaddr字段,16字节,是client端的硬件地址,在client发出报文事会把自己网卡的硬件地址写进这个字段

3、options字段,可变长选项字段,这个字段包含了终端的初始配置信息和网络配置信息,包括报文类型和有效租期,DNS服务器的IP地址等配置信息

option字段格式:

code是标识号,表示后面value中的内容类型

length表示后面value值的长度

value是信息内容

option code字段有很多可选项,下图参考

DHCP协议报文类型与动态获取IP地址的过程

DHCP-DISCOVER报文:0x01 客户端请求发送包

这个报文是client端开始DHCP过程的第一个请求报文,client在请求地址的时候,并不知道server端的位置,所以client会以广播的方式发送请求报文

DHCP-OFFER报文:0x02 服务器响应包

这是DHCP server端对DISCOVERY报文的响应报文,会在所配置的地址池中查找一个合适的IP地址,加上相应的租约期限和其它的配置信息(如GATEWAY,DNS SERVER等),构造一个OFFER报文发给client,一般以单播的方式发送

由于此时client还没有自己的ip地址,所以这里DHCP-OFFER的目标ip地址还是255.255.255.255,只不过DHCP报文中的flags字段会变成1,即当其余电脑发现mac地址与DHCP-OFFER中带有的mac地址不一致时,就会立马把包丢掉,不处理后面的数据,以此来达到单播的效果

DHCP-REQUEST报文:0x30 客户端选择包

在一个子网中可能存在多台DHCP服务器,所有收到DISCOVER报文的服务器都会回应OFFER报文,所以client端可能收到多个OFFER报文,通常会选择第一个OFFER报文的服务器作为自己的目标服务器,并选择第一个OFFER报文返回的IP作为自己的IP,并向这个目标服务器回应一个REQUEST请求报文。在续租约的时候client端也会发送REQUEST报文请求续租期。REQUEST一般以广播的方式发送

DHCP-ACK报文:0x05 服务器确认包

DHCP server端对client端的REQUEST报文的确认响应报文,setver在收到REQUEST报文后,根据REQUEST报文中携带的client MAC来查找有没有相应的租约记录,如果有责发送ACK报文作为回应,通知client可以使用分配的IP地址

DHCP-NAK报文:0x06 服务器拒绝包

DHCP server端对client端的REQUEST报文的拒绝响应报文,如果服务器没有相应的租约记录,就会发送NAK报文给client端

DHCP-RELEASE报文:0x07 客户端释放包

client端主动释放server端分配给它的IP地址,server收到这个报文后,就会回收这个IP地址

DHCP-DECLINE报文:0x04 客户端IP不可用包

client收到server回应的ACK报文后,通过地址冲突检测发现server分配的地址冲突或由于其它原因导致ip不可用,则发送DHCP-DECLINE报文同志server所分配的IP地址不可用

DHCP-INFORMA报文:0x08 获取详细信息

client已经获得了IP地址,需要从server端获得更详细的配置信息是,就会发送DHCP-INFORMA报文香server请求,server找到相应信息后,就会回应DHCP-ACK报文给client

客户端执行DHCP-DISCOVERY后,如果没有DHCP服务器响应客户端的请求,客户端会随机使用169.254.0.0/16网段中的一个IP地址配置到本机地址

169.254.0.0/16是Windows的自动专有IP寻址范围,也就是在无法通过DHCP获取IP地址时,由系统自动分配的IP地址段

DHCP续约租期

当client IP地址已经用到50%的时间时,client端就会以单播的方式向server端发送一个DHCP Request包,此时server端会响应一个ACK包,重新约定一个时间,当然,server端会根据Request包中option字段的serverIP地址看是否是自己分配的IP地址,以及租期情况

若server未进行响应,那么client会继续使用这个IP地址,当使用到87.5%的时候,会重复上述操作(但是此时发送的DHCP Request包为广播的形式发送,因为DHCP的ip地址可能在此时进行了变幻)再续租一次,如果此时server还是没有响应,client就直接使用到过期为止,不再继续续租

重新连接使用IP地址

client在重新登录网络的时候,可以不需要从发送DHCP-DISCOVER报文开始,可以直接广播发送DHCP-REQUEST报文给DHCP 服务器,因为client会记录上一次分配的ip是多少,从而直接使用此ip地址

为什么在分配IP地址时,client选择0.0.0.0作为自己的IP地址?

0.0.0.0 代表的含义

配置在计算机或者网络设备上

当在自己电脑上配置IP地址为0.0.0.0的时候,表示这台机器在网络上是不可达的。 比如你的笔记本电脑在没有联网的时候,IP地址很可能是用0.0.0.0来标识,表示本机没有分配到一个可用的IP地址。 除此之外,0.0.0.0 也经常用于在防火墙或者路由设备上设置网络策略时表示任何网络地址。

配置在软件的配置文件上

除了在硬件设备上,在提供网络服务的软件配置文件中,也经常见到binding的IP地址为0.0.0.0。比如Redis服务binding的地址,Tomcat服务bind的地址。当在应用程序配置文件中配置的binding地址为0.0.0.0的时候表示可以监听该服务器上所有网卡过来的信息。

0.0.0.0 一般用作占位IP,比如在不确定该服务或者机器应该使用哪个具体IP时,用0.0.0.0来表示,当知道具体IP时,建议换成具体IP。