首页 > 编程语言 >udhcp源码剖析(一)——DHCP服务器和客户端的工作流程

udhcp源码剖析(一)——DHCP服务器和客户端的工作流程

时间:2023-02-17 18:23:38浏览次数:38  
标签:udhcp BOUND INIT 源码 服务器 DHCP server 客户端

DHCP服务器的工作流程
udhcpd,即dhcp服务器,在路由器等网关设备中,DHCP服务器启动后用于给LAN侧和无线终端分配IP、租约和其他网络配置。根据RFC2131文档规范,一个标准的DHCP服务器和客户端的交互时序如下,这是一个完整的交互过程,从INIT到BOUND,其余的交互过程,比如INIT_REBOOT、RENEWING和REBINDING都可视作该过程的简化或一部分。


DHCP客户端的工作流程
udhcpc,即DHCP客户端的工作相对简单,可以使用客户端状态转移图来描述,根据所处的
不同状态,与服务器进行交互。如下图所示,客户端工作的起点一般是INIT和INIT_REBOOT状态,

一个标准的获取IP及其配置的流程是INITSELECTINGREQUESTINGBOUND, 重启后的重新获取IP
lease的流程:INIT_REBOOTREBOOTINGBOUND,
T1过期续约lease:BOUNDRENEWINGBOUND,
T1和T2过期续约lease:BOUNDRENEWINGREBINDINGBOUND。
可见,BOUND状态是最终完成配置的状态,REBOOTING、REQUESTING、RENEWING和REBINDING是中间状态,在中间状态,若接收到ACK即跳转到BOUND状态完成配置,若接收到NAK或lease过期则回到INIT状态。


udhcp的文件结构
udhcp的文件夹中包含许多源文件和头文件,每组源和头文件对应着一个模块或功能。
Dhcpd.c——整个DHCP server运行的主线,其udhcpd_main函数就是server开始允许的入口,相当于main入口。在udhcpd_main中,各个模块被组合起来实现DHCP服务器的功能。

Dhcpc.c:DHCP client运行的主线,提供udhcpc_main作为入口函数,相当于main函数,将各个客户端模块组合起来实现DHCP客户端的功能。
Frontend.c:该文件提供了一个main入口,在其中根据传入参数选择启动DHCP服务器还是客户端。
其余文件都是负责各个具体的模块:
Arpping.c:该源文件只包含arpping函数,在服务器给客户端分配一个free IP后,会调用arpping函数,查看网络上是否有主机已经使用该地址。
File.c和file.h:DHCP server file manipulation,负责DHCP服务器的文件操作,其中最重要的函数是read_config,该函数载入默认配置信息,并从配置文件udhcpd.conf读取配置信息。(以后读取配置信息的函数可以模仿read_config函数写)。
leases.c:tools to manage DHCP leases,针对dhcpOfferedAddr结构的操作函数,该结构体是DHCPOFFER报文的数据主体,通过它,服务器向客户端提供租约的信息。
options.c:DHCP server option packet tool,针对DHCP数据报文的options字段的操作函数都在这个文件中。
packet.c:DHCP数据报文的构造和发送。
pidfile.c:Functions to assist in the writing and removing of pidfiles。针对pidfile的写和删除操作。主要针对/tmp/var/run/udhcpd0.pid
serverpacket.c:Constuct and send DHCP server packets。构造和发送dhcp服务器报文。
clientpacket.c:Packet generation and dispatching functions for the DHCP client。
socket.c:DHCP server client/server socket creation。套接字创建,包含interface信息的读取
script.c:Functions to call the DHCP client notification scripts。

标签:udhcp,BOUND,INIT,源码,服务器,DHCP,server,客户端
From: https://www.cnblogs.com/dhcpclass/p/17131181.html

相关文章

  • DHCP源码分析_dhcpd后台进程子模块
    dhcpd是dhcp服务器端后台进程文件,dhcpd后台程序总是读取配置文件/etc/dhcpd.conf。一,守护进程的基本流程    dhcpd基本流程为: main(){/*设置isc和d......
  • udhcp源码剖析(四)——DHCP服务器的superloop
    udhcpd_main的Superloop到这一步,DHCP服务器开始提供具体的服务,superloop主要包括建立socket监听及信号处理、获取并提取报文、根据state和报文内容做出响应。建立Socket......
  • 基于ISC DHCP的简单准入开源方案
    实现所需要的组件:1)LINUX操作系统;ISC-DHCP-SERVER软件2)支持DHCPSnooping、防ARP中间人攻击的接入交换机 实现简单准入的原理:ISC-DHCP-Server的配置文件dhcpd.conf......
  • ISC DHCP 分配IP流程分析
    概述在Linux的世界中,ISCDHCP被广泛应用。因为ISCDHCP的版权是允许在保留其版权声明的基础上,使用,复制,修改其源代码。对于Linux开发人员来说,在掌握了ISCDHCP分配IP的流程......
  • DHCP源码分析-dhcp模块
    一,DHCP函数流程   函数voiddhcp(structpacket*packet)是处理DHCP包的入口函数,在进入这个函数的时候,对包的解析已经完成,已经将包的内容转换成内部结构s......
  • ISC DHCP租约分析
    租约状态转换DHCP服务系统中的租约共有八种状态:空闲状态、预留状态、活跃状态、过期状态、释放状态、废弃状态、重置状态、备份状态。重置状态和备份状态为启动FAILOVER模......
  • 2、HashMap源码分析
    目录1一般数据结构及特点2HashMap基本属性说明3HashMap数据结构3.1构造函数3.2Node<k,v>分析4put过程分析4.1扩容方法resize()分析4.2put方法分析5关于HashMap5.1......
  • qiankun 2.x 运行时沙箱 源码分析
    qiankun2.x运行时沙箱源码分析简介从源码层面详细讲解了qiankun框架中的JS沙箱和样式沙箱的实现原理。序言沙箱这个词想必大家应该不陌生,即使陌生,读完这篇文......
  • linux源码解析12–page数据结构
    几个问题:1.当开启了MMU之后,CPU访问内存的最小单位是多少呢?page2.linux怎样描述这个页呢?3.linux内核里,怎么理解和使用这个页?linux内核用stuctpage来描述一个物理页面:1......
  • Callable的基本使用和源码解读
    1使用java.util.concurrent.Callable是有返回值的多线程任务:publicinterfaceCallable<V>{Vcall()throwsException;}通过实现Callable接口,在call()方......