首页 > 编程语言 >unbound源码分析

unbound源码分析

时间:2024-03-31 20:33:23浏览次数:29  
标签:分析 udp unbound point worker 源码 comm handle

unbound源码分析

版本: 1.17.2

编译选项: ./configure --prefix=your_path --enable-subnet --enable-debug --with-libevent

请求调用栈:

看了worker_handle_request的源码,unbound也是存在ip维度的限速的。

dig qq.com @127.0.0.1

worker_init初始化线程变量worker

在comm_base_set_slow_accept_handlers方法中传入worker_stop_accept和worker_start_accept函数指针以及worker,并设置到worker->base->stop_accept和worker->base->start_accept,worker->base->cb_arg。

在调用accpet相关函数指针时,就会传入worker->base->cb_arg。

设置worker->comsig的信号回调函数为worker_sighandler。处理信号为SIGHUPSIGINTSIGQUITSIGTERM

设置worker->front为listen_create返回值(接收用户请求),主要回调方法是worker_handle_request

回调方法原型:typedef int comm_point_callback_type(struct comm_point*, void*, int, struct comm_reply*);

unbound使用struct comm_point来表示一个监听的socket。

  • tcp类型的comm_point创建通过comm_point_create_tcp方法。其accept回调为comm_point_tcp_accept_callback
  • udp类型的comm_point创建通过comm_point_create_udp方法。其回调为comm_point_udp_ancil_callback

unbound worker通过worker_handle_control_cmd来执行命令控制。

每个worker里面存在back字段来向权威服务器发起递归,主要是在worker_init方法中调用outside_network_create方法来初始化。

unbound的lruhash数据结构:动态增长的哈希表(当元素数量等于数组长度时,扩容为原来的2倍),采用lru机制来限制哈希表的内存使用量,当超过最大内存使用量时淘汰最少使用的元素。(原理跟java中的linkedhashmap差不多)

slabhash则是对lruhash进行一层封装,内部用数组存放多个lruhash,再进行一层hash,把数据分散到不同lruhash中。

unbound的region数据结构:内存分配缓冲区,分配的内存大于large_object_size时,就调用malloc方法分配内存,然后用large_list保存为单链表节点,如果当前需要的内存大小大于available时,就malloc分配一块8192字节大小的内存块,然后用next保存为单链表节点,使用data保存当前分配的内存块,然后从内存块中划分一块内存出去。

unbound接收请求后,最后会保存为一个mesh事务树,然后依次调用subnet模块查ecs缓存、iterator模块发起递归请求。(方法mesh_run)

递归查询:iter_operate方法

  • process_handle -> iter_handle
  • iter_handle -> processInitRequest -> processQueryTargets -> worker_send_query -> outnet_serviced_query -> serviced_create(设置定时器,默认第一次触发就发送数据)
  • process_response -> iter_handle -> processQueryResponse

超时回调:serviced_timer_cb、响应回调:worker_handle_service_reply

选路算法:

iter_server_selection

第一次发送数据:

serviced_timer_cb -> serviced_udp_send -> pending_udp_query(创建一个pending_udp_timer_cb的定时器) -> randomize_and_send_udp -> comm_point_send_udp_msg

响应路径:

comm_point_udp_ancil_callback -> outnet_udp_cb -> serviced_udp_callback -> serviced_callbacks -> worker_handle_service_reply -> mesh_report_reply -> mesh_run -> iter_operate -> process_response -> iter_handle -> processQueryResponse -> processFinished -> mesh_continue -> mesh_query_done -> mesh_send_reply -> comm_point_send_reply

标签:分析,udp,unbound,point,worker,源码,comm,handle
From: https://www.cnblogs.com/Lht1/p/18107212

相关文章

  • Python数据分析九
    一、Python之列表操作方法remove和pop在Python中,列表还提供了其他一些常用的操作方法,例如删除指定元素和弹出(移除并返回)指定位置的元素。其中,remove()方法用于删除列表中第一个匹配的元素,而pop()方法用于弹出指定位置的元素。以下是详细的代码示例:使用remove()方法删除列表中......
  • 评论文本情感分析系统-完整代码+论文+可直接运行
    视频讲解:文本情感分析系统代码+论文:基于NLP深度学习机器学习的文本情感分析系统_哔哩哔哩_bilibili项目演示:完整代码:importpandasaspdimportnumpyasnpfromcollectionsimportCounterimportreimportjiebafromtqdmimporttqdmfromsklearn.metricsimpor......
  • 评论文本情感分析系统-完整代码+论文+可直接运行 计算机毕设
     视频讲解:文本情感分析系统代码+论文:基于NLP深度学习机器学习的文本情感分析系统_哔哩哔哩_bilibili项目演示:完整代码:importpandasaspdimportnumpyasnpfromcollectionsimportCounterimportreimportjiebafromtqdmimporttqdmfromsklearn.metricsim......
  • 基于Springboot框架高校学校自习室教室座位预约系统设计与实现(安装部署+源码+文档)
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • [附源码]计算机毕业设计电影播放器开发与设计(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着数字媒体技术的发展,电影播放器已成为人们日常生活中不可或缺的娱乐工具。一个功能丰富的电影播放器不仅需要支持各种视频格式、提供高清流畅的播放体验,还应......
  • [附源码]计算机毕业设计在线直播管理系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍在线直播管理系统,帮我写150字的选题背景的内容随着互联网技术的飞速发展,在线直播已成为新兴的媒体传播方式,尤其在娱乐、教育、电商等领域得到广泛应用。一个高......
  • [附源码]计算机毕业设计基于ssm的会议室预约系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍基于SSM(Spring,SpringMVC,MyBatis)框架的会议室预约系统,旨在通过现代化的信息技术手段解决企业和机构中会议室资源分配和使用的问题。随着企业规模的扩大和办......
  • [附源码]计算机毕业设计高校多媒体教室预约系统(JSP+java+springmvc+mysql+MyBatis)
    本项目包含程序+源码+数据库+LW+调试部署环境,文末可获取一份本项目的java源码和数据库参考。项目文件图项目介绍随着信息技术在教育领域的广泛应用,多媒体教室成为高校教学资源的重要组成部分。合理高效的预约管理系统对于充分利用多媒体教室资源、提高教学质量和效率具有显......
  • 学生管理系统分析
    一、系统功能概述1.1学生请假管理系统概述学生请假管理系统旨在提供一个高效、便捷的学生请假流程,涵盖请假申请、审批和记录查询等功能。通过系统,学生可以方便地提交请假申请,教师和辅导员可以及时审批请假请求,同时系统会记录请假的相关信息,方便学生和教职工查询。1.2学生请假......
  • 【攻防技术系列+流量分析】--日志溯源技巧
    下面是结合网上论坛针对日志分析溯源的理解现阶段大部分企业都会上日志审计设备,在配上流量分光,还有各类IDS、WAF等设备日志,对安全溯源分析十分方便,但在日常工作中,免不了要直接看服务器相关请求日志的情况,这个时候就需要我们自身具备日志分析的能力了。一、日志分析流程1、统计......