当前位置: 首页 > article >正文

一文彻底了解UDHCP源码核心☝️

🍄参考学习: udhcp源码剖析(一)——DHCP服务器和客户端的工作流程_udhcpc源码v1.29.2-CSDN博客

前言介绍

本文深入探讨了DHCP服务器和客户端的工作流程,以udhcp为例,详细阐述了udhcpd(服务器)如何分配IP和网络配置,以及udhcpc(客户端)如何通过交互获取和续租IP。同时,介绍了udhcp的文件结构,如Dhcpd.c、Dhcpc.c和Frontend.c等,揭示了其内部模块的功能…

☝️还不是很清楚 DHCP 的理论, DHCP 协议的学习移驾:
一文读懂DHCP协议 && DHCPv6协议 - 知乎 (zhihu.com)

先启动 dhcpd,再启动 dhcpc

🥇DHCP服务器的工作流程

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

🐻第一次连接过程解析:

  1. client 开始初始化
  2. client 广播发送 DHCP Discover 到 server 端
  3. server 接收到,回复 DHCP Offer 包到 client 端, client 端接收到回复,开始收集回应信息,从中挑选一个 server
  4. 挑选好 server 之后,client 发送 DHCP Request 到 server 端
  5. 被选中的 server 接收到 DHCP Request 包后,提交 client 的配置信息, 并回复 DHCP ACK
  6. client 接收到 DHCP ACK 后,初始化结束.
    🐻第一次断开过程解析:
  7. client 端突然 shutdown, 会发送 DHCP Release 包到 server 端
  8. server 端接收到 DHCP Release 后,就丢弃 lease
    🥈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状态。

☝️dhcpc 的工作流程图

dhcpc 的状态逻辑图

在这里插入图片描述

源码解析图

在这里插入图片描述
在这里插入图片描述

超时处理

在这里插入图片描述

处理网络数据包

在这里插入图片描述

信号处理

在这里插入图片描述

☝️dhcpd 的工作流程图

在这里插入图片描述

处理 DHCP 请求

处理 DHCP 请求


udhcp的文件结构

udhcp的文件夹中包含许多源文件和头文件,每组源和头文件对应着一个模块或功能。

● 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的整体的工作流程图,在接下来的几篇文章里,将会详细介绍每个文件的作用,以及函数的作用,可以期待一下。

觉得有用的话,不要吝啬点赞哦!

勤奋小牛,努力奋斗!


http://www.kler.cn/a/391897.html

相关文章:

  • Objection
  • qt QVideoWidget详解
  • 在Flutter中,禁止侧滑的方法
  • Unity3D学习FPS游戏(11)敌人AI巡逻(NavMesh)
  • 常见的噪声模型+图像中噪声模型的估计+常见的滤波方法(C++)
  • Dial-insight:利用高质量特定领域数据微调大型语言模型防止灾难性遗忘
  • 工业相机选取
  • docker compose 多个 Dockerfile
  • VUE使用TS开发打包时发现校验问题无法打包
  • 349. 两个数组的交集
  • C 语言冒泡排序算法详解
  • 二叉树的练习题(中)
  • 【蓝桥杯 2021 省 B2】特殊年份
  • 如何优化Kafka消费者的性能
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十三:将AVFrame转换成AVPacket。视频编码原理.编码相关api
  • 【微服务设计】分布式系统一致性:深入解析2PC(两阶段提交)和TCC的优势与劣势
  • wordpress搭建主题可配置json
  • springboot中返回数据脱敏
  • FFmpeg将mp4的文件转化为m4a
  • Spring Boot编程训练系统:构建可扩展的应用
  • 网络安全-Linux基础(bash脚本)
  • 【设计模式系列】享元模式(十五)
  • RabbitMQ 与 PHP Swoole 实现
  • 期权懂|期权新手入门教学:期权合约有哪些要素?
  • 容器技术在持续集成与持续交付中的应用
  • (附项目源码)Java开发语言,springboot 乳腺癌术后中医健康管理APP 56,计算机毕设程序开发+文案(LW+PPT)