TCP/IP五层模型-应用层-DHCP协议

​1.定义:DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作,该协议允许DHCP服务器向客户机动态分配IP地址。端口号:DHCP协议端口号:udp   67(服务器)    68 (客户端)

2.DHCP报文结构:

DHCP字段信息:(DHCP报文及其格式详解见)

https://blog.csdn.net/one_in_one/article/details/51684551
OP:报文的操作类型。分为请求报文和响应报文。1:请求报文,2:应答报文。即client送给server的封包,设为1,反之为2。
请求报文:DHCP Discover、DHCP Request、DHCP Release、DHCP Inform和DHCP Decline。
应答报文:DHCP Offer、DHCP ACK和DHCP NAK。
Htype:DHCP客户端的MAC地址类型。MAC地址类型其实是指明网络类型,Htype值为1时表示为最常见的以太网MAC地址类型。
Hlen:DHCP客户端的MAC地址长度。以太网MAC地址长度为6个字节,即以太网时Hlen值为6。
Hops:DHCP报文经过的DHCP中继的数目,默认为0。DHCP请求报文每经过一个DHCP中继,该字段就会增加1。没有经过DHCP中继时值为0。(若数据包需经过router传送,每站加1,若在同一网内,为0。)
Xid:客户端通过DHCPDiscover报文发起一次IP地址请求时选择的随机数,相当于请求标识。用来标识一次IP地址请求过程。在一次请求中所有报文的我Xid都是一样的。
Secs:DHCP客户端从获取到IP地址或者续约过程开始到现在所消耗的时间,以秒为单位。在没有获得IP地址前该字段始终为0。(DHCP客户端开始DHCP请求后所经过的时间。目前尚未使用,固定为0。)
Flags:标志位,只使用第0比特位,是广播应答标识位,用来标识DHCP服务器应答报文是采用单播还是广播发送,0表示采用单播发送方式,1表示采用广播发送方式。其余位尚未使用。(即从0-15bits,最左1bit为1时表示server将以广播方式传送封包给client。)
Ciaddr:DHCP客户端的IP地址。仅在DHCP服务器发送的ACK报文中显示,在其他报文中均显示0,因为在得到DHCP服务器确认前,DHCP客户端是还没有分配到IP地址的。只有客户端是Bound、Renew、Rebinding状态,并且能响应ARP请求时,才能被填充。
Yiaddr:DHCP服务器分配给客户端的IP地址。仅在DHCP服务器发送的Offer和ACK报文中显示,其他报文中显示为0。
Siaddr:下一个为DHCP客户端分配IP地址等信息的DHCP服务器IP地址。仅在DHCP Offer、DHCP ACK报文中显示,其他报文中显示为0。(用于bootstrap过程中的IP地址)
Giaddr:DHCP客户端发出请求报文后经过的第一个DHCP中继的IP地址。如果没有经过DHCP中继,则显示为0。(转发代理(网关)IP地址)
Chaddr:DHCP客户端的MAC地址。在每个报文中都会显示对应DHCP客户端的MAC地址。
Sname:为DHCP客户端分配IP地址的DHCP服务器名称(DNS域名格式)。在Offer和ACK报文中显示发送报文的DHCP服务器名称,其他报文显示为0。
File:DHCP服务器为DHCP客户端指定的启动配置文件名称及路径信息。仅在DHCP Offer报文中显示,其他报文中显示为空。
Options:可选项字段,长度可变,格式为"代码+长度+数据"。

【注意】在客户端正式分配了IP地址之前的第一次IP地址请求过程中,所有DHCP报文都是以广播方式发送的,包括客户端发送的DHCP Discover和DHCP Request报文,以及DHCP服务器发送的DHCP Offer、DHCP ACK和DHCP NAK报文。当然,如果是由DHCP中继器转的报文,则都是以单播方式发送的。另外,IP地址续约、IP地址释放的相关报文都是采用单播方式进行发送的。

3.DHCP工作原理见:

https://www.cnblogs.com/happygirl-zjj/p/5976526.html

4.DHCP四步租约过程:

①客户机没有IP地址,就会发送一个dhcp  discover广播包请求IP。客户端发送的dhcp  discover请求包里有一个二进制位(bootp  flags),写了希望收到的是单播包还是广播包。所以服务器收到客户端发送的dhcp  discover包后,回dhcp  offer包是单播还是广播(0X0000为单播,0x8000为广播),取决于discover包里面的二进制位。

②服务器收到客户机的请求IP地址信息,就会在自己配置的IP地址池中查找是否有合法的IP地址给客户机。然后把合法的IP地址、客户机的MAC地址、子网掩码、默认网关、租约的期限封装进dhcp  offer报文中,广播出去。

③客户机接收到dhcp  offer报文,从中选择ip地址,发送一个dhcp  request消息广播到全部的dhcp  server,表明它确认租约服务器提供的ip地址。

注:虽然客户机已经选择了ip地址,但是还没有配置ip地址,而一个网络可能存在多个dhcp  server,所以客户机仍然使用0.0.0.0来作为源ip。

④服务器收到dhcp request报文,确认租约,发送一个dhcp  ack广播包。

DHCP续租:

1.客户端如果通过地址冲突检测发现服务器分配的地址冲突或者由于其他原因导致不能使用,则会向DHCP服务器发送DHCP Decline请求报文,通知服务器所分配的IP地址不可用,请求获得新的IP址。
2.如果DHCP服务器收到Request请求报文后,没有发现有相应的租约记录或者由于某些原因无法正常分配IP地址(比如说客户端移动到了另一个IP地址不同的网络,并向服务器申请续租时,服务器发现客户端IP地址错误),则向DHCP客户端发送DHCP NAK(也称为NACK)应答报文,通知用户无法分配合适的IP地址。
3.客户端可以通过DHCP Release报文主动释放IP地址,一般出现在客户端关机、下线等状况。这个报文将会使DHCP服务器释放发出此报文的客户端的IP地址。
4.DHCP客户端如果需要从DHCP服务器端获取更为详细的配置信息,则向DHCP服务器发送DHCP Inform请求报文;DHCP服务器在收到该报文后,将根据租约进行查找到相应的配置信息后,向DHCP客户端发送ACK应答报文,目前基本上不用了。
5.地址池判定:当服务器收到DHCP请求,会查看接收到dhcp请求的网关接口,然后选择和该网关同网段的地址池,进行地址分配。

在使用租期超过50%时刻处,DHCP Client会以单播形式向DHCP Server发送DHCP Request报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址。

在使用租期超过87.5%时刻处,DHCP Client会以广播形式向DHCP Server发送DHCP Request报文来续租IP地址。如果DHCP Client成功收到DHCP Server发送的DHCP ACK报文,则按相应时间延长IP地址租期;如果没有收到DHCP Server发送的DHCP ACK报文,则DHCP Client继续使用这个IP地址,直到IP地址使用租期到期时,DHCP Client才会向DHCP Server发送DHCP Release报文来释放这个IP地址,并开始新的IP地址申请过程。

DHCP续租详解见:

https://blog.csdn.net/lizhiqiang5846/article/details/51955358

5.DHCP中继:

应用场景:客户端和服务器在不同广播域,dhcp报文为广播,无法到达服务器。

原理:主机的网关开启dhcp中继(int  网关接口 ip helper-address   dhcp服务器IP地址),将dhcp报文转为单播,发送到dhcp服务器,dhcp服务器以单播方式回包给主机的网关,主机网关再回复给主机。当服务器收到dhcp请求,会查看收到dhcp请求的接口,然后选择和该接口的地址同网段地址池,进行分配。

6.DHCP私设防范:

在二层交换机上,Ip  dhcp  snooping   所有接口,不接收dhcp offer和 dhcp ack。即使私设了,你的包也发不进交换机,不会影响别人。

Int  f0/24

Ip  dhcp  snooping  trust

把上联口设置为信任口,可以接收dhcp  offer和dhcp  ack。因为上联口接的不是PC,而是三层交换机,所以从上联口进来的都是合法的dhcp包、不会出现私设。

  

原文地址:https://www.cnblogs.com/dawangk-3366/p/14286308.html