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.pswp.cn/pingmian/80101.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/80101.shtml
英文地址,請注明出處:http://en.pswp.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…