简介:域名系统(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

DNS介绍与实现方法的更多相关文章

  1. 手动修复OneDrive的DNS污染屏蔽的方法

    随着云计算的发展和微软云战略的持续推进,使用网盘进行文档存储.协同编辑与共享已成为文档操作的新流程.而Office.Office 365和OneDrive等微软产品是Windows用户的首选.但由于国 ...

  2. block(代码块)的介绍以及使用方法和变量之间的关系

    http://blog.csdn.net/menxu_work/article/details/8762848 block(代码块)的介绍以及使用方法和变量之间的关系 block(代码块)的介绍以及使 ...

  3. 保护DNS服务器3大方法

    保护DNS服务器3大方法       DNS全称DomainNameSystem域名解析系统,通俗地说,DNS就是帮助用户在Internet上寻找名称与IP对应的解析服务.为了更方便使用网络资源,DN ...

  4. 【转】【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法

    原始地址:http://blog.csdn.net/yangyu20121224/article/category/1431917/1 由于TabActivity在Android4.0以后已经被完全弃 ...

  5. react-native热更新之CodePush详细介绍及使用方法

    react-native热更新之CodePush详细介绍及使用方法 2018年03月04日 17:03:21 clf_programing 阅读数:7979 标签: react native热更新co ...

  6. DNS 介绍

    DNS 介绍 DNS 为 Domain Name System (域名系统的缩写),它是一种将ip地址转换为对应的主机名或将主机名转换成与之对应的ip地址的一种服务机制.DNS使用TCP和UDP,端口 ...

  7. I.MX6 DNS 查看、修改方法

    /************************************************************************** * I.MX6 DNS 查看.修改方法 * 说明 ...

  8. DELPHI中枚举类型数据的介绍和使用方法

    在看delphi程序的时候看到aa=(a,b,c,d);这样的东西,还以为是数组,同事说是函数,呵呵,当然这两个都不屑一击,原来这样式子是在声明并付值一个枚举类型的数据.下边写下来DELPHI中枚举类 ...

  9. DNS介绍

    DNS出现及演化 网络出现的早期 是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和w ...

  10. JQuery onload、ready概念介绍及使用方法

    页面加载完成有两种事件,一是ready,表示文档结构已经加载完成,onload,ready概念容易混淆,下面为大家详细介绍下   页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包 ...

随机推荐

  1. canal源码分析简介-3

    5.0 store模块  2018-10-08 23:14:58  8,328 7 1 store模块简介 store模块用于binlog事件的存储 ,目前开源的版本中仅实现了Memory内存模式.官 ...

  2. Redisson实现分布式锁---原理

    Redisson实现分布式锁(1)---原理 有关Redisson作为实现分布式锁,总的分3大模块来讲. 1.Redisson实现分布式锁原理 2.Redisson实现分布式锁的源码解析 3.Redi ...

  3. 面试题: == 和 equals() 区别【包装类重写了object类中的equals方法】

    /* * * 面试题: == 和 equals() 区别 * * 一.回顾 == 的使用: * == :运算符 * 1. 可以使用在基本数据类型变量和引用数据类型变量中 * 2. 如果比较的是基本数据 ...

  4. 一. 初始 Redis(快速入门-00)

    一. 初始 Redis(快速入门-00) @ 目录 一. 初始 Redis(快速入门-00) Redis 概述: 关系型数据库(如 MySQL ) 问题 NoSQL 数据库(非关系性数据库) 最后: ...

  5. Java方法、方法的重载、命令行传递参数、可变参数和递归

    Java的方法 是解决一类问题的步骤的有序集合 包含于类或对象中 在程序中被创建,在其他地方被引用 一般只完成一个功能,利于后期扩展! 语法  修饰符 返回值类型 方法名(参数类型 参数名){    ...

  6. 清华大学推出第三讲普通人如何抓住 DeepSeek 红利,普通人必备的免费AI手册!

    前言 在当今这个日新月异的时代,人工智能(AI)技术正以前所未有的速度改变着我们的生活.工作和社会结构.从智能手机上的语音助手到自动驾驶汽车,从医疗诊断到学术研究,AI的应用无处不在,它如同一股不可阻 ...

  7. 面试官最想听到的Vue和React区别

    前言 欧阳最近找工作面试时总是被问到两个问题:Vue和React的区别和从编译原理的角度来聊聊Vue的template和React的jsx.面试官问这些问题一般是想了解你对这两个框架的理解,所以这是一 ...

  8. Maomi.MQ 2.0 | 功能强大的 .NET 消息队列通讯模型框架

    说明 作者:痴者工良 文档地址:https://mmq.whuanle.cn 仓库地址:https://github.com/whuanle/Maomi.MQ 作者博客: https://www.wh ...

  9. Edge、谷歌浏览器默认下载器开启多线程下载

    浏览器默认下载器开启多线程下载 Chrome 浏览器,地址栏输入并回车: chrome://flags/#enable-parallel-downloading Edge 新版浏览器,地址栏输入并回车 ...

  10. 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!

    3月6日最新消息,阿里云通义千问官方宣布推出最新推理模型 QwQ-32B,这一模型仅有 32B 参数,但在效果上与拥有 671B 参数的 DeepSeek-R1 相媲美.如果你自己部署 DeepSee ...