• 文章搜索:
  • 经验案例

        • 分享到...

        • 新浪微博
        • 腾讯微博
        • 推荐到豆瓣 豆瓣空间
        • 分享到搜狐微博 搜狐微博
        • 分享到QQ空间 QQ空间
        • 分享到腾讯朋友 腾讯朋友
        • 网易微博分享 网易微博
        • 添加到百度搜藏 百度搜藏
        • 转贴到开心网 开心网
        • 转发好友 告诉聊友
    • 推荐
    • 打印
    • 收藏

    一个网上问题的处理,引发我们对DHCP协议新的思考

    作者:朱福祥  |  上传时间:2010-12-08  |  关键字:DHCP协议,朱福祥

    一个网上问题带来的疑惑:

    在某网络项目中,采用H3C数据中心产品S5820X交换机,在该网络项目中使用的是无盘网络技术,无盘客户机的网关设置在S5820X交换机上,并在S5820X交换机启用DHCP Relay 功能,下面的无盘客户机通过DHCP Relay方式从无盘网络的服务器端动态的获取IP地址,此时一个疑惑浮现在我们面前,如果使用S5820X交换机做DHCP Relay,下面的无盘客户机无法动态获取IP地址,而使用友商交换机做DHCP Relay,下面的无盘客户机可以正常动态的获取IP地址。

     

    问题的原因究竟是什么呢?——

        问题发生后,我们马上进行了测试,用普通的PC机做为DHCP Client,用Windows server 2003DHCP组件做为DHCP Server,使用S5820X交换机做DHCP Relay,测试结果为普通的PC机可以正常动态的获取到IP地址,随后我们对整个过程进行了抓包并查找比较DHCP协议的整个交互过程

    DHCP,全称是 Dynamic Host Configuration Protocol﹐中文名为动态主机配置协议,它的前身是 BOOTP,它工作在OSI的应用层,是一种帮助计算机从指定的DHCP服务器获取它们的配置信息的自举协议。DHCP使用客户端/服务器模式,请求配置信息的计算机叫做DHCP客户端,而提供信息的叫做DHCP的服务器。DHCP为客户端分配地址的方法有三种:手工配置、自动配置、动态配置,DHCP最重要的功能就是动态分配。除了IP地址,DHCP分组还为客户端提供其他的配置信息,比如子网掩码。这使得客户端无需用户动手就能自动配置连接网络。

    1DHCP的工作流程

    发现阶段,即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

    提供阶段,即DHCP服务器提供IP地址的阶段。在网络中接收到DHCP discover发现信息的DHCP服务器都会做出响应,它从尚未出租的IP地址中挑选一个分配给DHCP客户机,向DHCP客户机发送一个包含出租的IP地址和其他设置的DHCP offer提供信息。

    选择阶段,即DHCP客户机选择某台DHCP服务器提供的IP地址的阶段。如果有多台DHCP服务器向DHCP客户机发来的DHCP offer提供信息,则DHCP客户机只接受第一个收到的DHCP offer提供信息,然后它就以广播方式回答一个DHCP request请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。

    确认阶段,即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ACK确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。

    重新登录,以后DHCP客户机每次重新登录网络时,就不需要再发送DHCP discover发现信息了,而是直接发送包含前一次所分配的IP地址的DHCP request请求信息。当DHCP服务器收到这一信息后,它会尝试让DHCP客户机继续使用原来的IP地址,并回答一个DHCP ACK确认信息。如果此IP地址已无法再分配给原来的DHCP客户机使用时(比如此IP地址已分配给其它DHCP客户机使用),则DHCP服务器给DHCP客户机回答一个DHCP NACK否认信息。当原来的DHCP客户机收到此DHCP NACK否认信息后,它就必须重新发送DHCP discover发现信息来请求新的IP地址。

    更新租约,DHCP服务器向DHCP客户机出租的IP地址一般都有一个租借期限,期满后DHCP服务器便会收回出租的IP地址。如果DHCP客户机要延长其IP租约,则必须更新其IP租约。DHCP客户机启动时和IP租约期限过一半时,DHCP客户机都会自动向DHCP服务器发送更新其IP租约的信息。

    DHCP 交互过程如下

    2DHCP Relay工作流程

    DHCP RelayDHCPRDHCP中继 也叫做DHCP中继代理,如果DHCP客户机与DHCP服务器在同一个物理网段,则客户机可以正确地获得动态分配的ip地址。如果不在同一个物理网段,则需要DCHP Relay Agent(中继代理)。用DHCP Relay代理可以去掉在每个物理的网段都要有DHCP服务器的必要,它可以传递消息到不在同一个物理子网的DHCP服务器,也可以将服务器的消息传回给不在同一个物理子网的DHCP客户机。

    DHCP Relay交互过程如下

     

    分析过后带给我们对DHCP协议新的思考——

    通过对无盘客户机DHCP Relay交互过程的抓包分析发现,无盘客户机与DHCP服务器DHCP Relay交互过程没有遵循标准的标准的DHCP协议交互过程,即没有采用Discover-Offer-Request-Ack四报文交互方式或者Request-Ack两报文交互方式,而采用的是一种简化了的DHCP交互过程,即Discover-Ack两报文交互方式。

    3、简化的DHCP工程流程

    在一些无盘工作站的网络项目中,客户机采用的是无盘客户机,DHCP服务设置在无盘工作站系统的服务器端,在这样的无盘网络系统中DHCP的工作流程简化成了三个阶段

    发现阶段,即DHCP客户机寻找DHCP服务器的阶段。DHCP客户机以广播方式(因为DHCP服务器的IP地址对于客户机来说是未知的)发送DHCP discover发现信息来寻找DHCP服务器,即向地址255.255.255.255发送特定的广播信息。网络上每一台安装了TCP/IP协议的主机都会接收到这种广播信息,但只有DHCP服务器才会做出响应。

    选择阶段,以广播方式回答一个DHCP request请求信息,该信息中包含向它所选定的DHCP服务器请求IP地址的内容。之所以要以广播方式回答,是为了通知所有的DHCP服务器,他将选择某台DHCP服务器所提供的IP地址。

    确认阶段,即DHCP服务器确认所提供的IP地址的阶段。当DHCP服务器收到DHCP客户机回答的DHCP request请求信息之后,它便向DHCP客户机发送一个包含它所提供的IP地址和其他设置的DHCP ACK确认信息,告诉DHCP客户机可以使用它所提供的IP地址。然后DHCP客户机便将其TCP/IP协议与网卡绑定,另外,除DHCP客户机选中的服务器外,其他的DHCP服务器都将收回曾提供的IP地址。

    简化的DHCP交互过程如下

    DHCP Client第一次登陆,获取地址交互过程

    DHCP Client再次登陆,获取地址交互过程

     

    4、简化的DHCP Relay工程流程

    DHCP Client第一次登陆,获取地址交互过程

    DHCP Client再次登陆,获取地址交互过程

     

    问题背后的真相——

    问题发生后,我们对S5820X交换机的DHCP功能进行了多项测试并抓包分析,S5820X交换机的DHCP交互过程是严格按照RFC协议来实现的,正是由于简化的DHCP交互过程不符合RFC协议实现,才导致无盘客户机无法正常动态的获取IP地址。

    这种简化的DHCP工作流程,如DHCP ClientDHCP Server是在同一个广播域中,DHCP Client可以正常获取IP地址。

    如果DHCP ClientDHCP Server不在同一个广播域中,DHCP Client通过DHCP Relay方式从DHCP Server获取地址,如果使用H3C早期版本的S5820X交换机做DHCP RelayDHCP Client无法获取到IP地址,原因为S5820X交换机对DHCP交互过程检查机制比较严格,当S5820X交换机收到DHCP ACK报文时,会根据报文中的your-ipaddr查找临时表项,如果找不到DHCP Request报文创建的临时表项,则不转发DHCP ACK报文,在S5820X交换机的最新版本中已经兼容了这种简化的DHCP交互过程。