DNS介绍与实现方法

news/2025/1/12 16:09:30/文章来源:https://www.cnblogs.com/llidd/p/18521014

简介:域名系统(Domain Name System,缩写:DNS)是互联网的一项服务。是一种可以将域名和IP地址相互映射的以层次结构分布的数据库系,允许终端用户设备将给定的人类可读URL转换为网络可以理解的机器可用IP地址。

工作原理:DNS是一种基于TCP/UDP可以将域名和IP地址相互映射的层次结构的分布式数据库系统,主要包括如下3个组成部分:

(1)域名空间(domain name space)和资源记录(resource record);

(2)域名服务器(name server);

(3)解析器(resolver)。

DNS系统采用递归查询请求的方式来响应用户的查询,其一般过程如下:

(1)客户端首先向首选域名服务器查询。

(2)首选域名服务器检查本地资源记录,如果存在则作权威回答,如果不存在,则检查本地缓存,如果有记录则直接返回结果。若本地资源记录和缓存记录都不存在,则向根域名服务器查询。

(3)根域名服务器返回相应顶级域的权威域名服务器的地址,首选域名服务器继续向该顶级权威域名服务器查询。

(4)顶级权威域名服务器返回次级域的权威域名服务器地址,首选域名服务器如此迭代查询,直到得到对查询域名的权威回答,保存在本地缓存中并返回给客户端,完成此次查询。目前绝大多数的网络都会开放DNS服务,DNS数据包不会被防火墙等网络安全防护设备拦截,因此,可以基于DNS协议建立隐蔽通道,从而顺利穿过防火墙,在客户端和服务器之间隐蔽地传输数据。

DNS报文结构:

DNS报文结构分两部分:DNS查询报文和DNS应答报文。

DNS报文首部

  • 标识(Identification): 16位字段,用于标识报文,用于匹配查询和响应。
  • 标志(Flags): 包含多个标志位,如查询/响应标志、递归标志等。
  • 查询记录数(QDCount): 指定查询部分的问题数目。
  • 回答记录数(ANCount): 指定回答部分的记录数目。
  • 授权回答记录数(NSCount): 指定权威部分的记录数目。
  • 附加信息记录数(ARCount): 指定附加部分的记录数目

查询部分:

  • 域名(QNAME): 一个以字节为单位的域名列表,表示查询的域名。
  • 查询类型(QTYPE): 16位字段,表示查询的资源记录类型。
  • 查询类别(QCLASS): 16位字段,表示查询的资源记录类别。

回答部分:

  • 域名(NAME): 一个以字节为单位的域名列表,表示查询的域名。
  • 类型(TYPE): 16位字段,表示资源记录的类型。
  • 类别(CLASS): 16位字段,表示资源记录的类别。
  • 生存时间(TTL): 32位字段,表示资源记录的生存时间。
  • 数据长度(RDLENGTH): 16位字段,表示资源记录数据字段的长度。
  • 资源记录数据(RDATA): 实际的资源记录数据,可以是IPv4地址、IPv6地址、CNAME等。

权威部分:

  • 类似于回答部分,包含权威服务器的资源记录信息。

附加部分:

  • 类似于回答部分,包含额外的资源记录信息,通常用于提供额外的信息,如DNSSEC签名等。

基于CH394的DNS实现:

  1. 初始化CH394并创建1个UDP的socket;
  2. link成功后可通过CH394向DNS服务器发查询报文,DNS服务器ip要与路由器DNS服务器IP一致,目的端口为53.
  3. CH394发送查询报文:

Domain Name System (query)

Transaction ID: 0x1101 * 11 01

Flags: 0x0100 Standard query * 01 00

Questions: 1 * 00 01

Answer RRs: 0 * 00 00

Authority RRs: 0 * 00 00

Additional RRs: 0 * 00 00

Queries

Name: www.wch.cn * 03 77 77 77 03 77 63 68 02 63 6e 00

Type: A (1) (Host Address) * 00 01

Class: IN (0x0001) * 00 01

  1. CH394解析回答报文:

Domain Name System (response)

Transaction ID: 0x1102 * 11 02

Flags: 0x8180 Standard query response, No error * 81 80

Questions: 1 * 00 01

Answer RRs: 1 * 00 01

Authority RRs: 0 * 00 00

Additional RRs: 0 * 00 00

Queries

Name: www.wch.cn * 03 77 77 7703 77 63 68 02 63 6e 00

Type: A (1) (Host Address) * 00 01

Class: IN (0x0001) * 00 01

Answers

Name: www.wch.cn * c0 0c

Type: A (1) (Host Address) * 00 01

Class: IN (0x0001) * 00 01

Time to live: 2710 (45 minutes, 10 seconds) * 00 00 0a 96

Data length: 4 * 00 04

Address: www.wch.cn (58.213.45.186) * 3a d5 2d ba

 

附工程:https://files.cnblogs.com/files/blogs/745523/CH394_DNS.zip?t=1730456830&download=true

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

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

相关文章

采集电力 IEC104 转 profinet IO 项目案例

VFBOX协议转换网关支持PLC,modbus,EthernetIP,Profinet,CCLink,EtherCAT,IEC61850,IEC104,bacnet,DLT645,HJ212,opc ua,opc da,DNP3。目录 1 案例说明 1 2 VFBOX网关工作原理 1 3 准备工作 2 4 配置VFBOX网关采集IEC104设备数据 2 5 用PROFINET IO协议转发数据 4 …

一个简单的 ASP.NET Core 依赖注入例子,提高代码的可维护性和可扩展性

依赖注入可以提高代码的可维护性、可测试性、可替换性和可扩展性,降低组件之间的耦合度,使得代码更加清晰和灵活,ASP.NET Core 提供了内置的依赖注入容器,可以帮助我们轻松地将服务注册到容器中前言:什么是依赖注入 依赖注入可以提高代码的可维护性、可测试性、可替换性和…

protobuf json

为什么大厂这么爱用protobuf? https://mp.weixin.qq.com/s/COQu3rckfZJUelSVBV6IMA 为什么大厂这么爱用protobuf? 原创 腾讯技术工程 腾讯技术工程 2024年10月30日 17:34 广东 话题背景 在protobuf在国内兴起的时候,json over http 的 RESTful ,api也在国内同步兴起了。司…

MS Projcet 和 Redmine 在进行项目管理的时候有什么区别

在进行项目管理的时候,MS Project和Redmine有以下主要的区别:1.平台属性不同;2.功能侧重点不同;3.使用者不同;4.兼容性不同;5.成本差异。总的来说,MS Project适用于规模较大、复杂度较高的项目管理,而Redmine适用于小型团队、开源社区以及迭代开发速度较快的项目管理。…

恶意 Prompt 攻击

黑掉大模型?恶意 Prompt 攻击成无解之谜? https://mp.weixin.qq.com/s/vliCct-0PwEdaGFSpYt9tQ 黑掉大模型?恶意 Prompt 攻击成无解之谜? 原创 Atone 腾讯技术工程 2024年11月01日 17:35 广东作者:Atone,混元安全防守团队成员 随着大模型应用的逐步发展,出现了一种新型的…

『模拟赛』多校A层冲刺NOIP2024模拟赛17

『模拟赛记录』多校A层冲刺NOIP2024模拟赛17Rank 一般A. 网络 签不上的签到题。 首先考虑枚举路径的做法,如果先枚举再计算的话复杂度会是 \(\mathcal{O(\binom{n+m-2}{n-1}(n+m))}\) 的,稍微优化一点的过程中可以去掉后面的 \((n+m)\)。考虑此时我们要记什么,首先遇到加号其…

rust学习五、认识所有权

在<<The rust programming language>>的中译版<<rust权威指南>>中,作者用了30页的篇幅来阐述这个问题。 如作者所言,所有权是学习rust语言的基础,不掌握这个,无需继续往下,所以,这是初学rust就必须会的。正是所有权概念和相关工具的引入,Rust才…

给予爱快路由器使用阿里云DDNS远程访问家庭网络

一、阿里云域名准备1、首先需要购买一个阿里云域名,选简短好记性价比高的即可,如果域名只是用来解析路由器IP地址,不做服务器类应用,则不需要备案。 2、想做动态域名解析,光有域名还不行,还需要在阿里云控制台建立一个访问授权,路由器才能动态同步远营商的IP地址到DNS服…

KingbaseES V8R6集群备份恢复案例之---主库single-pro备份恢复

KingbaseES、repmgr、sys_rman案例说明: KingbaseES V8R6集群物理备份支持single-pro方式,本案例在集群执行single-pro方式备份并多次切换集群后,对集群执行了恢复测试,文档记录了恢复的详细过程。 适用版本: KingbaseES V8R6 集群架构:ID | Name | Role | Status …

号码变换配置对接运营商IMS

概述 freeswitch是一款简单好用的VOIP开源软交换平台。 fs直接对接运营商,调试过程中的号码变换规则比较容易出问题。 本文档记录一个较为通用的对接IMS配置方案。 环境 CentOS 7.9 freeswitch 1.10.7 模块配置 号码变换主要使用mod_translate模块和dialplan拨号计划实现。 确…

Idea上Git仓库不见了是什么原因

在使用IntelliJ IDEA进行项目开发时,Git仓库突然消失是开发者常遇到的问题。该问题可能由多个因素引起,包括:1.环境配置问题;2.软件或插件更新;3.目录结构变更;4.用户权限问题;5.其他软件干扰。理解这些因素并采取相应的解决措施,不仅能快速恢复Git仓库,还能避免类似问…