Bind9源代码分析

本文详细分析了Bind9的源代码,重点关注了resolver.c和dispacth.c中的核心流程,从dns_resolver_prime开始,直至深入到fetch的创建与启动。同时,概述了从main函数开始的执行路径,特别是如何从cache中获取数据。通过梳理main.c中的main、setup、named_server_create、run_server和load_configuration等函数,揭示了Bind9服务器的启动和配置加载过程。在lib/ns/interfacemgr.c中,关注了接口管理器的扫描和监听设置,包括ns_interfacemgr_scan的实现。整个分析旨在帮助读者深入理解Bind9的工作原理。
摘要由CSDN通过智能技术生成

Bind9源代码分析

1、串一遍resolver.c和dispacth.c里面的内容

dns_resolver_prime(请求解析器开始一个fetch启动,如果它还没有启动。一些启动判断,然后进行了rdataset初始化,创建fetch)

–>dns_resolver_createfetch(创建或从res桶区中获取一个fctx, 并为其新fetch绑定事件)

–>fctx_start(作为fctx的绑定控制事件,发送给task处理,负责正常的fctx启动)

–>fctx_try(找到一个不为空的,且未超过配额的addrinfo)

–>fctx_query(初始化一个resquery)

2、从main开始走流程(主要为了找到从cache中拿数据,这里只标出了函数,但是没有把参数加进来,加红的是我认为比较重要的函数)
named/main.c

1、main

函数功能:主函数,发起启动

流程:获取规范程序名称,系统初始化,进行dns\dst\isccc result的注册,解析命令行,调用setup(),启动运行(do while,用isc_app_run()结果来判断结束或重新加载),最后是cleanup())

2、setup

函数功能:必要的检查、设置和记录,启动类库守护进程,创建task\timer\socket管理器,创建server,根据命令行选择修改server上下文。

流程:获取用户和组信息,初始化时间转换信息,检查cpu个数,切换到最小权限,初始化日志系统,设置默认日志的默认配置,启动守护进程,开始一个isc library 应用,写日志,获取初始资源限制,针对系统,提高限制,更改目录,记录服务启动时间,创建task\timer\socket管理器,调用 named_server_creat()e创建server,根据命令行选择,修改server上下文

3、named_server_create

函数功能:使用默认设置创建服务器对象。

流程:从内存上下文中分配地址给server,初始化derver结构,设置服务器任务,默认设置创建一个server上下文,有GeoIP必须在interface manager创建个之前进行初始化,任务绑定关闭时调用函数shutdown_server。isc_app_onrun绑定run_server()函数。服务器计时器和接口、心跳服务时间间隔初始化。zone管理器的创建和初始化。Server的hostname和version设置,zone\resolver\sock统计器创建和设置,创建控制命令响应,初始化dispatches\statschannels\cachelist list。Key相关的初始化。

4、run_server

函数功能:运行服务,创建关键管理器,加载配置和zones。

流程:创建dispatch_manager,并设置统计器。创建interfacemgr.创建个interface等的计时器。创建默认和额外的配置解析器。load_configuration载入配置。load_zones()载入zones。

5、load_configuration

函数功能:加载配置。

流程:从server->interfacemgr中获取acl环境,初始化viewlist\builtin_viewlist\cachelist\altsecrets list,创建ACL配置上下文,关闭所有dyndb实例,解析全局默认伪配置文件。用新配置代码来解析配置文件,记录日志信息。检查解析正确性,创建属性map,用于解析默认值。 Dnssec处理。确保对配置数据的独占,设置处理限制,检查处理锁文件,检查系统允许的最大打开套接字数目。获得资源的当前限制。配置多样的server选项,配置配额。设置黑名单。设置保持响应顺序。配置统计服务。配置tcp相关。配置UDP相关。配置EDNS UDPsize。配置zonemgr。确定用于监听传入连接的端口。确定默认DSCP。设置监听队列深度,最小为10.根据“listen-on”声明配置接口管理。这里对IPV6和IPV4不同。ns_interfacemgr_scan()

  • 9
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值