01 dnsmasq 中 dns服务

前言

这里我们主要是 来看一下 dns 服务器这边的相关业务处理 

通常来说 在我们日常生活中 还是经常会需要使用 dns 的情况, 主要是更加友好的去给一个主机命名一个别名 

比如 现在我的应用在服务器 192.168.220.133 但是我不想记这个生硬的 ip, 我可能更期望记录一个域名, 比如 app.com, 这时候 就可以在 dns 服务器上面增加一个映射 app.com -> 192.168.220.133

比如 现在我的应用在服务器 192.168.220.133, 但是 之后服务可能会发生迁移更新到 10.60.50.16, 这种场景下面 我们仅仅需要在 dns 上面将 “app.com” -> 192.168.220.133 更新为 “app.com” -> 10.60.50.16 而客户端这边无需做任何改动 

我们这里调试的 dns 服务器主要是基于 dnsmasq 

 

在 /etc/hosts 中 映射配置如下, 存在一条 “master“ -> 10.60.50.16 的映射配置 

 

 

dns 的请求 和 响应

dns 请求这边如下, 这里我们看基于 udp 的 dns 数据交互 

dns 这边主要是包含了一个 txId, flags, questions, answterRRs, AuthorityRRs, AdditionalRRs, 以及具体的查询请求

具体的查询请求包含 待查询域名, type, class

 

dns 响应这边情况如下 

可以看到 dns响应 是在 dns请求 的数据基础上面扩展的, 增加了 Answer 的结构

Answer的结构 主要包含了 查询的域名, type, class, ttl, lengthOfIp, 目标ip

 

 

dns 的请求处理

这里就是查询 dns容器 维护的 hash_table, 其中维护的映射类似于 Map<String, String> hostname2Ip;

这里的查询也是类似于 java.util.HashMap 的查询, 找到匹配的记录之后, 返回该记录 

 

然后之后写出 dns 响应的数据是在这里 

header 即为一个 dns 的请求头信息, 在上面 dns 的请求的基础上面去掉了 请求体

这里传入了 nameoffset 表示域名相对于 dns 请求的偏移, ttl 等等相关信息 

传入的待写出的指针为 &ansp, 这个的处理在上面, 我们后面来看 

 

写出响应中的 nameOffset, type, class, ttl, lengthOfIp

 

写出 ip, 这个 for 之后, 会填充写出的 ip 的长度 

 

ansp 初始化的地方

首先是跳过了 dns_header 的部分, 然后接着是遍历每一个 dns请求体, 跳过该部分的 dns请求体 

这里处理完成之后, ansp 的最终的位置是在 整个dns请求的末尾

 

 

dnsmasq 中的 dns_header 结构体

id 对应于数据包中的 trxId

hb3, hb4 对应于数据包中的 flags 

qdcount 对应于 questions

ancount对应于 answterRRs

nscount对应于 AuthorityRRs

arcount对应于 AdditionalRRs

 

 

dns 配置的加载

读取 “/etc/hosts” 以及 “--addn-hosts” 的地方

如果是配置了 “--no-hosts” 则不会加载 “/etc/hosts” 文件 

 

注册 “/etc/hosts” 中的条目到 hash_table 中的过程 

 

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/80101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最优化方法Python计算:有约束优化应用——线性Lasso回归分类器

利用线性Lasso模型类LineLassoModel类&#xff08;见博文《最优化方法Python计算&#xff1a;有约束优化应用——线性Lasso回归预测器》&#xff09;及分类器类Classification&#xff08;见博文《最优化方法Python计算&#xff1a;无约束优化应用——线性回归分类器》&#xf…

Python基础学习-Day20

目录 奇异值分解&#xff08;SVD&#xff09;的输入和输出奇异值的应用实际案例1. 问题分析2. 解决方案&#xff1a;对测试集应用相同的变换3. 为什么不能对测试集单独做 SVD&#xff1f;4. 代码示例&#xff1a;训练集和测试集的 SVD 降维6. 实际操作中的注意事项 奇异值分解&…

2025年 全新 AI 编程工具 Cursor 安装使用教程

一、Cursor 软件下载 首选&#xff0c;登录Cursor官网&#xff0c;进行软件下载&#xff0c;官网下载地址如下&#xff1a; Cursor AI IDE 下载 二、Cursor软件安装配置 此处以Windows10系统安装为例&#xff0c;下载完成之后&#xff0c;右键安装包&#xff0c;以管理员身份…

[vue]error:0308010C:digital envelope routines::unsupported

npm run dev 报错&#xff1a; \node_modules\webpack\hot\dev-server.jsnode:internal/crypto/hash:71 this[kHandle] new _Hash(algorithm, xofLen); Error: error:0308010C:digital envelope routines::unsupported opensslErrorStack: [ error:03000086:digital env…

开放的力量:新零售生态的共赢密码

当某头部生鲜平台向供应商开放销售预测系统后&#xff0c;合作伙伴的库存周转率竟提升12%——这个反常识的案例&#xff0c;正在重塑商业竞争的底层逻辑。 生态共建三板斧 ▌模块化设计&#xff1a;像搭积木一样开放 • 乐高式API架构&#xff1a;30%接口支持自由组合&#xff…

深入理解Spring缓存注解:@Cacheable与@CacheEvict

在现代应用程序开发中&#xff0c;缓存是提升系统性能的重要手段。Spring框架提供了一套简洁而强大的缓存抽象&#xff0c;其中Cacheable和CacheEvict是两个最常用的注解。本文将深入探讨这两个注解的工作原理、使用场景以及最佳实践。 1. Cacheable注解 基本概念 Cacheable…

[python] 函数3-python内置函数

一 内置函数 导入:import builtins 1.1 查看内置函数 大写字母开头的一般是内置变量小写的一般是内置函数 import builtins print(dir(builtins)) 1.2 abs() 求绝对值 print(abs(-10)) 1.3 sum()求和 不能直接用纯数字,因为不是可迭代对象 运算时只要一个是浮点数,结果就…

QT异步线程通信

在使用 QThreadPool 提交任务后&#xff0c;如果你需要知道任务何时完成&#xff0c;并且需要使用任务的执行结果&#xff0c;可以通过以下几种方式来实现&#xff1a; 1. 使用信号和槽 QRunnable 提供了一个 finished() 信号&#xff0c;当任务执行完成后会发出。你可以在任…

利用并行处理提高LabVIEW程序执行速度

在 LabVIEW 编程中&#xff0c;提升程序执行速度是优化系统性能的关键&#xff0c;而并行处理技术则是实现这一目标的有力武器。通过合理运用并行处理&#xff0c;不仅能加快程序运行&#xff0c;还能增强系统的稳定性和响应能力。下面将结合实际案例&#xff0c;深入探讨如何利…

机器学习第三讲:监督学习 → 带答案的学习册,如预测房价时需要历史价格数据

机器学习第三讲&#xff1a;监督学习 → 带答案的学习册&#xff0c;如预测房价时需要历史价格数据 资料取自《零基础学机器学习》。 查看总目录&#xff1a;学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章&#xff1a;DeepSeek R1本地与线上满血版部署&#xff1…

Open CASCADE学习|实现裁剪操作

1. 引言 Open CASCADE (简称OCC) 是一个功能强大的开源几何建模内核&#xff0c;广泛应用于CAD/CAM/CAE领域。裁剪操作作为几何建模中的基础功能&#xff0c;在模型编辑、布尔运算、几何分析等方面有着重要作用。本文将全面探讨Open CASCADE中的裁剪操作实现原理、应用场景及具…

【redis】分片方案

Redis分片&#xff08;Sharding&#xff09;是解决单机性能瓶颈的核心技术&#xff0c;其本质是将数据分散存储到多个Redis节点&#xff08;实例&#xff09;中&#xff0c;每个实例将只是所有键的一个子集&#xff0c;通过水平扩展提升系统容量和性能。 分片的核心价值 性能提…

RGB矩阵照明系统详解及WS2812配置指南

RGB矩阵照明系统详解及WS2812配置指南 一、RGB矩阵照明简介 RGB矩阵照明是一种强大的功能&#xff0c;允许使用外部驱动器驱动的RGB LED矩阵为键盘增添绚丽的灯光效果。该系统与RGBLIGHT功能无缝集成&#xff0c;因此您可以使用与RGBLIGHT相同的键码来控制它&#xff0c;操作…

[250509] x-cmd 发布 v0.5.11 beta:x ping 优化、AI 模型新增支持和语言变量调整

目录 X-CMD 发布 v0.5.11 beta&#x1f4c3;Changelog&#x1f9e9; ping&#x1f9e9; openai&#x1f9e9; gemini&#x1f9e9; asdf&#x1f9e9; mac✅ 升级指南 X-CMD 发布 v0.5.11 beta &#x1f4c3;Changelog &#x1f9e9; ping 调整 x ping 默认参数为 bing.com&a…

嵌入式开发学习日志Day17

第十一章 结构体与共用体 一、结构体 1、结构体 一般形式 【struct 标识符】 结构体中的标识符一般首字母大写&#xff1b; 【.】结构体成员运算符&#xff1b; 优先级 1 级 结合方向&#xff1a;从左至右&#xff1b; 【->】:指向结构体成员运算符&#x…

发那科机器人5(异常事件和程序备份加载+ROBOGUIDE离线仿真)

发那科机器人5(异常事件和程序备份加载+ROBOGUIDE离线仿真) 一,异常事件和程序备份加载1,常见异常事件2,零点复归介绍3,程序备份-加载(未整理)二,`ROBOGUIDE`离线仿真1,仿真软件简介及安装步骤(未整理)2,机器人==导入与工具==与==工件添加==2.1,机器人导入(未整…

青少年编程与数学 02-019 Rust 编程基础 01课题、环境准备

青少年编程与数学 02-019 Rust 编程基础 01课题、环境准备 一、Rust核心特性应用场景开发工具社区与生态 二、Rust 和 Python 比较1. **内存安全与并发编程**2. **性能**3. **零成本抽象**4. **跨平台支持**5. **社区与生态系统**6. **错误处理**7. **安全性**适用场景总结 三、…

Java反射 八股版

目录 一、核心概念阐释 1. Class类 2. Constructor类 3. Method类 4. Field类 二、典型应用场景 1. 框架开发 2. 单元测试 3. JSON序列化/反序列化 三、性能考量 四、安全与访问控制 1. 安全管理器限制 2. 打破封装性 3. 安全风险 五、版本兼容性问题 六、最佳…

操作系统的初步了解

目录 引言&#xff1a;什么是操作系统&#xff1f; 一、设计操作系统的目的 二、操作系统是做什么的&#xff1a; 操作系统主要有四大核心任务&#xff1a; 1. 管理硬件 2. 运行软件 3. 存储数据 4. 提供用户界面 如何理解操作系统的管理呢&#xff1f; 1. 什么是操作…

Mkdocs页面如何嵌入PDF

嵌入PDF 嵌入PDF代码 &#xff0c;注意PDF的相对地址 <iframe src"../个人简历.pdf (相对地址)" width"100%" height"800px" style"border: 1px solid #ccc; overflow: auto;"></iframe>我的完整代码&#xff1a; <d…