DHCP协议浅析

上一篇 / 下一篇  2010-09-24 20:46:10

DHCP协议浅析

 

1. DHCP的配置方式主要有三种:自动配置,动态配置和手动配置,其中动态配置使DHCP能够灵活的分配IP地址,使有限的IP地址得到高效率的利用.

 

2. DHCP的特点:
   
全自动的配置,并且配置信息集中在一点: DHCP Server;
   
采用C/S结构,承载于UDP,客户端知名端口为67,服务器为68;
   
最初BOOTP/DHCP采用广播方式,因而无法穿越路由器.因此DHCP新采用了中继方式以穿越子网;
   
采用硬件地址对主机进行识别;
   
设置IP租期,达到IP分时复用的效果;

 

3. DHCP的缺点:基本是一个单向协议,即服务器完全是被动,其行为完全由客户端的请求激发,因此无法控制客户端的行为,交互性和安全性没有PPP协议完善.

 

4. DHCP发送请求报文时并不知道本地IP,服务器MACIP地址,因此请求报文的目的MACIP都是全1的广播地址,本地IP为全0,源端口为68,目的端口为67.

 

5. DHCP响应多采用广播形式,即目的MACIP均为全1.如果使用单播方式,MAC为客户端MAC地址,目的IP仍为全1.源端口为67,目的端口为68.注意传输的是中继报文时,目的端口为67而不是68,因为所有具有DHCP Relay功能的设备都在这个端口进行监听.

 

6. DHCP的选项:
    DHCP
的固定字段和BOOTP一样,而除了固定字段外还包含了选项字段,对于BOOTP又称之为vendor字段.此字段中包含了大量可选的终端初始配置信息和网络配置信息,如决定终端的IP特性配置信息,域名信息,标识终端的特殊信息,终端的默认网关IP地址, DNS服务器的IP地址, WINS服务器的IP地址,用户使用IP地址的有效租期等等信息.正是因为有了此字段DHCP协议才能够给client提供大量的配置信息.
   
此字段采用CLV方式构成,1字节Code标识后面的信息类型; 1字节Length长度表示后面信息内容的长度; Value信息具体内容.当需要新的信息时可以按照这种编码方式申请新的选项即可.其中最常用的选项包括DHCP Message Type, Router IP, DNS IP, Wins IP, Client ID, Server ID等选项.

 

7. DHCP报文类型:
    DHCP
协议采用CLIENT-SERVER方式进行交互其报文格式共有8,由选项字段中的DHCP Message Type选项的Value值来确定,各类型报文具体含义如下:
    DHCPDISCOVER 0x01:
此报文是client开始DHCP过程的第一个报文;
    DHCPOFFER 0x02:
此报文是serverDHCPDISCOVER报文的响应,其中包含了可以被client申请的地址,客户端收到后再通过DHCPREQUEST进行申请;
    DHCPREQUEST 0x03:
此报文是client开始DHCP过程中对serverDHCPOFFER报文的回应,或者是client续延IP地址租期时发出的报文;
    DHCPDECLINE 0x04:
client发现server分配给它的IP地址无法使用,IP地址冲突时,将发出此报文,通知server禁止使用IP地址;
    DHCPACK 0x05: server
clientDHCPREQUEST报文的确认响应报文, Client收到此报文后才真正获得了IP地址和相关的配置信息;
    DHCPNAK 0x06: server
clientDHCPREQUEST报文的拒绝响应报文, Client收到此报文后一般会重新开始新的DHCP过程;
    DHCPRELEASE 0x07: client
主动释放server分配给它的IP地址的报文,Server收到此报文后就可以回收这个IP地址能够分配给其他client;
    DHCPINFORM. 0x08: client
已经获得了IP地址发送此报文,只是为了从DHCP SERVER处获取其他的一些网络配置信息如Route IP, DNS IP,这种报文的应用非常少见.

 

8. DHCPBOOTP的区别:
    DHCP
兼容BOOTP. BOOTP协议比DHCP简单而且clientserver间的交互过程也简单,一个来回两个报文就完成了,而且也没有IP地址续延的问题.采用BOOTP协议进行配置时就必须一个终端一个IP地址的事先配置好,因此没有DHCP协议那么灵活. BOOTP没有DHCP那么多的报文类型,因此当发现在一个DHCP报文的选项字段中没有DHCP Message Type选项时,这个报文就是BOOTP报文.

 

9. DHCP的交互流程:
   
DHCP CLIENT处于初始化状态,即还没有获取IP地址的状态时, DHCP CLIENT将会发出一个广播的DHCPDISCOVER报文从而开始DHCP过程;
    DHCP CLIENT
具备超时机制,当此次DHCP不成功时再自动开始新的DHCP过程;
    DHCP CLIENT
根据固定字段中的事务id来检查收到的DHCP响应报文是否与自己发出的请求报文相匹配,如果不匹配则丢弃;
    DHCP CLIENT
获得一个具有有限使用期限的IP地址后,它将自动维护一个定时器.IP地址使用期限的50%的时刻自动启动单播续延IP地址租期的过程,如若续延成功则使用租期相应向前延长.否则在IP地址使用期限的87.5%的时刻自动启动广播续延IP地址租期的过程,如若续延成功则使用租期相应向前延长.否则在IP地址使用期限到期时DHCP CLIENT将不再使用此IP地址,而是开始新的DHCP过程再次申请IP地址;
   
DHCP CLIENT曾经获得过IP地址然后重启初始化时, DHCP CLIENT仍优先使用以前的IP地址.此时DHCP CLIENT会直接启动广播续延IP地址租期的过程.

下面是DHCP的状态转意图:

 

 

 

 

   相关的一些问题:
     1) CLIENT
发出广播的DHCPDISCOVER报文广播的目的是让DHCP SERVER能够收到这个请求报文.在这个报文中CLIENT可以在选项字段中加入request paramter list选项,表明自己想要获得的各种参数,并且四个IP地址字段都必须为0;


     2) CLIENT能够收到所有的DHCPOFFER报文,CLIENT只能处理其中的一个.一般的原则是CLIENT接收处理最先收到的那个DHCPOFFER报文. CLIENT会再发出一个广播的DHCPREQUEST报文,在选项字段中会加入选中的DHCP SERVERIP地址和用户想要的IP地址.之所以广播是因为要通知所有的DHCP SERVER进行相应的处理.


    3) CLIENT收到DHCPACK报文后会检查DHCP SERVER分配给自己的IP地址是否能够使用.如在以太网类型的网络中CLIENT会发出免费的ARP请求.如果可以使用则CLIENT成功获得IP地址并根据IP地址使用租期自动启动续延过程.如果CLIENT发现DHCP SERVER分配的IP地址已经被别人使用, CLIENT会发出DHCPDECLINE报文通知DHCP SERVER禁用这个IP地址,以免引起IP地址冲突.然后CLIENT又开始新的DHCP初始化过程.

 

10. DHCP协议安全漏洞来源于以下2个方面:
    1)
由于DHCP SERVER无法控制CLIENT行为,无法识别CLIENT的真假,因此DHCP SERVER的安全性较差,很容易遭到非法用户的恶意攻击.如用户大量发送非法DHCP报文,造成DHCP SERVER地址池中地址的耗尽
    2)
无法发现非法用户仿冒其他用户的IP地址MAC地址的情况.

   一种普遍的作法是限制单个网络上的用户数.在实际应用中,仅仅按照DHCP的标准协议内容来实现DHCP功能是远远不够的,除非在一个完全可以信任的网络中如企业网内部.
   
目前来看,最现实,最简单的方法就是在DHCP Relay设备上加入用户认证功能,这样不需要改动现存的DHCP SERVER软件,而仅仅在中继代理上增加附加软件,并由中继代理和DHCP SERVER交互.

 


TAG:

 

评分:0

我来说两句

Open Toolbar