DHCP源码分析-系统概述

     先名词解释下:

     DHCP:动态主机配置协议(Dynamic Host Configuration Protocol),是一个局域网的网络协议,使用UDP协议工作
它的前身是BOOTP(Bootstrap Protocol)初始引导协议。


     BOOTP则可以自动地为那些主机设定TCP/IP环境。但BOOTP有一个缺点:您在设定前须事先获得客户端的硬体位址,而且,与IP的对应是静态的。


     比较起BOOTP,DHCP透过"租约"的概念,有效且动态的分配客户端的TCP/IP设定。


     DHCP主要使用67,68两个端口,客户端向68端口(bootps)广播请求配置,服务器向67端口(bootpc)广播回应请求
546端口是DHCP failover用来做“双机热备”的,也叫失效备援。可以理解为宕机时切换用的。


     分析的源码版本基于ISCDHCP-4.2.3rc1,可用简单有效的方式提供设备需要的IP地址。ISC DHCP是开源软件,实现了动态主机配置协议IP网络连接。ISCDHCP解决方案支持IPv4和IPv6,适用于大容量和高可靠性的应用程序。


     源码下载地址:ftp://ftp.isc.org/isc/dhcp/dhcp-4.2.3rc1/


      在 DHCP 协议中,系统主要分为三个模块:DHCP 服务器、DHCP 客户端和 DHCP 中继。


      DHCP服务器的作用是能够接收并解析DHCP客户端直接发送或经由DHCP中继转发的 DHCP 请求报文,根据报文请求的内容并结合管理员的配置策略,为 DHCP 客户端进行一定范围内的IP 地址租约或网络参数分配,或对 IP 地址租约进行续约,或释放客户端不再需要的 IP 地址租约,从而保证该 IP 地址能够及时分配给其它有需要的 DHCP 客户端


      DHCP 客户端是用来获取 IP 地址或其它网络资源的主机,它会维持一个有限状态机,一旦启动 DHCP 客户端 DHCP 功能,它就会在状态机的控制下完成 IP 地址租约的申请、刷新和释放等功能,同时也会完成对其它自身所需的网络资源的获取。


      DHCP 中继用于连接不在同一子网中的 DHCP 客户端和 DHCP 服务器,中继的存在,使得组网时不必在每个子网中都设置 DHCP 服务器,从而大大节省了 DHCP 服务器资源,扩大了DHCP 服务器的辐射范围


      DHCP 服务器能够记录为 DHCP 客户端分配的网络资源信息,并从客户端获取唯一的标识将客户端和它分配到的 IP 地址信息进行绑定,从而保证IP 地址不会发生冲突。例如:可以获取客户端的硬件地址(也即 hardware address,一般对于一个网卡来说,出厂之后具有唯一的硬件地址)作为唯一标识。


       DHCP服务器可以分配给DHCP 客户端一个具有一定期限的 IP 地址租约来供其使用,它的实现机制是这样的客户端在它发送的 DHCP 请求报文中通过选项来告知服务器它需要使用的 IP 地址租期,而服务器可以根据其配置来决定具体的租约周期,客户端会在租期到期之前向服务器提出租约刷新的请求,而服务器所要做的就是保证在租期过期之前不要将该租约重复分配给其它客户端。当租约过期时,服务器不必马上将改租约分配给其它客户端,可以继续保留一段时间,从而当之前的客户端重新向服务器发送报文时,能够分配给它曾经使用过的 IP 地址。


            


整体参考:

[1]        RFC_2131

[2]        RFC_2132

[3]        RFC_3315

[4]        Linux环境下的DHCP服务器设计与实现


猜你喜欢

转载自blog.csdn.net/wuyongpeng0912/article/details/50411550