udhcp源码剖析(一)——DHCP服务器和客户端的工作流程
来源:互联网 发布:淘宝女装数据包下载 编辑:程序博客网 时间:2024/06/08 16:29
DHCP服务器的工作流程
udhcpd,即dhcp服务器,在路由器等网关设备中,DHCP服务器启动后用于给LAN侧和无线终端分配IP、租约和其他网络配置。根据RFC2131文档规范,一个标准的DHCP服务器和客户端的交互时序如下,这是一个完整的交互过程,从INIT到BOUND,其余的交互过程,比如INIT_REBOOT、RENEWING和REBINDING都可视作该过程的简化或一部分。
DHCP客户端的工作流程
udhcpc,即DHCP客户端的工作相对简单,可以使用客户端状态转移图来描述,根据所处的
不同状态,与服务器进行交互。如下图所示,客户端工作的起点一般是INIT和INIT_REBOOT状态,
- 一个标准的获取IP及其配置的流程是INITSELECTINGREQUESTINGBOUND, 重启后的重新获取IP
- lease的流程:INIT_REBOOTREBOOTINGBOUND,
- T1过期续约lease:BOUNDRENEWINGBOUND,
- T1和T2过期续约lease:BOUNDRENEWINGREBINDINGBOUND。
可见,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。
2 0
- udhcp源码剖析(一)——DHCP服务器和客户端的工作流程
- udhcp源码剖析(五)——DHCP客户端重要的数据结构和初始化配置
- udhcp源码剖析(三)——DHCP服务器的初始化和配置
- udhcp源码剖析(六)——DHCP客户端的superloop
- udhcp源码剖析(二)——DHCP服务器重要的数据结构
- udhcp源码剖析(四)——DHCP服务器的superloop
- udhcp源码详解(一)
- udhcp源码详解(一)
- DHCP的工作流程
- DHCP的工作流程
- udhcp详解(七)——udhcp报文
- 数据库—服务器的工作流程
- udhcp详解源码(序)
- udhcp源码详解(二)
- udhcp源码详解(四)
- udhcp源码详解(五)
- udhcp详解源码(序)
- udhcp源码详解(二)
- 55. Jump Game
- opencv图像和二维数组相互转换
- SQL中sp_renamedb语句更改数据库名
- HDU 1142 A Walk Through the Forest 最短路+记忆化搜索
- 文章标题
- udhcp源码剖析(一)——DHCP服务器和客户端的工作流程
- C++连接MySQL并简单操作数据库
- 315. Count of Smaller Numbers After Self
- build.gradle
- lx004打印“Z”
- 杭电OJ 2005.第几天?
- software project management
- Linux常用命令
- lower_bound函数