DNS介绍与实现方法
简介:域名系统(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实现:
- 初始化CH394并创建1个UDP的socket;
- link成功后可通过CH394向DNS服务器发查询报文,DNS服务器ip要与路由器DNS服务器IP一致,目的端口为53.
- 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
- 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介绍与实现方法的更多相关文章
- 手动修复OneDrive的DNS污染屏蔽的方法
随着云计算的发展和微软云战略的持续推进,使用网盘进行文档存储.协同编辑与共享已成为文档操作的新流程.而Office.Office 365和OneDrive等微软产品是Windows用户的首选.但由于国 ...
- block(代码块)的介绍以及使用方法和变量之间的关系
http://blog.csdn.net/menxu_work/article/details/8762848 block(代码块)的介绍以及使用方法和变量之间的关系 block(代码块)的介绍以及使 ...
- 保护DNS服务器3大方法
保护DNS服务器3大方法 DNS全称DomainNameSystem域名解析系统,通俗地说,DNS就是帮助用户在Internet上寻找名称与IP对应的解析服务.为了更方便使用网络资源,DN ...
- 【转】【Android UI设计与开发】第07期:底部菜单栏(二)Fragment的详细介绍和使用方法
原始地址:http://blog.csdn.net/yangyu20121224/article/category/1431917/1 由于TabActivity在Android4.0以后已经被完全弃 ...
- react-native热更新之CodePush详细介绍及使用方法
react-native热更新之CodePush详细介绍及使用方法 2018年03月04日 17:03:21 clf_programing 阅读数:7979 标签: react native热更新co ...
- DNS 介绍
DNS 介绍 DNS 为 Domain Name System (域名系统的缩写),它是一种将ip地址转换为对应的主机名或将主机名转换成与之对应的ip地址的一种服务机制.DNS使用TCP和UDP,端口 ...
- I.MX6 DNS 查看、修改方法
/************************************************************************** * I.MX6 DNS 查看.修改方法 * 说明 ...
- DELPHI中枚举类型数据的介绍和使用方法
在看delphi程序的时候看到aa=(a,b,c,d);这样的东西,还以为是数组,同事说是函数,呵呵,当然这两个都不屑一击,原来这样式子是在声明并付值一个枚举类型的数据.下边写下来DELPHI中枚举类 ...
- DNS介绍
DNS出现及演化 网络出现的早期 是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和w ...
- JQuery onload、ready概念介绍及使用方法
页面加载完成有两种事件,一是ready,表示文档结构已经加载完成,onload,ready概念容易混淆,下面为大家详细介绍下 页面加载完成有两种事件,一是ready,表示文档结构已经加载完成(不包 ...
随机推荐
- superset 图表加水印
转载wenqiang1208的文章 superset 作为一个数据可视化的工具,其中的图表,报表数据是非常敏感的,为了防止数据外泄,大部分公司需要在敏感图表上加上水印. 本篇文章有2种方式去介绍如何在 ...
- 《Linux shell 脚本攻略》第1章——读书笔记
目录 文件描述符及重定向 函数和参数 迭代器 算术比较 文件系统相关测试 字符串进行比较 文件描述符及重定向 echo "This is a sample text 1" > ...
- 转换流:InputStreamReader、OutputStreamWriter
1.转换流涉及到的类:属于字符流InputStreamReader:将一个字节的输入流转换为字符的输入流解码:字节.字节数组 --->字符数组.字符串 OutputStreamWriter:将一 ...
- 分布式事务之2PC两阶段提交
1. 分布式事务概述 1.1 问题背景 在分布式系统中,业务操作可能跨越多个服务或数据库(如订单服务.库存服务.支付服务),传统单机事务(ACID)无法满足跨网络节点的数据一致性需求. 网络不可靠:服 ...
- 玩转云端|天翼云边缘安全加速平台AccessOne实用窍门之让办公访问安全、高效又稳定
本文分享自天翼云开发者社区<玩转云端|天翼云边缘安全加速平台AccessOne实用窍门之让办公访问安全.高效又稳定>,作者:天翼云社区官方账号 随着社会信息化程度不断提高,远程办公已经成为 ...
- kafka的基本使用(更新中)
kafka的安装路径:/usr/local/Cellar/kafka/3.2.0 kafka的配置路径:/usr/local/etc/kafka 开启zookeeper cd /usr/local/C ...
- kickstart和PXE安装
Kickstart安装Kickstart是一种无人值守的安装方式如果在安装过程中出现要填写参数的情况,安装程序首先会去查找Kickstart生成的文件,如果找到合适的参数,就采用所找到的参数:如果没有 ...
- CF607B Zuma 题解
CF607B Zuma 不知道为什么你谷会评蓝,这不是很基础的区间DP吗. Problem - 607B - Codeforces 题意简述 消除回文子串的最小次数. 思路 对于区间\([i,j]\) ...
- 如何配置支付宝密钥之如何配置普通 RSA2 密钥|保姆级教学(一)
进行支付宝开发的第一步就是:配置密钥. 但是有很多小伙伴都不知道怎么配置,这篇文章将手把手帮你从头开始捋清如何配置支付宝密钥- 这次首先放一下官方文档:[如何生成及配置 RSA2 密钥],大佬们也可以 ...
- DevExpress MVVM Framework. Interaction of ViewModels. Messenger
学习记录: 学习地址:https://community.devexpress.com/blogs/wpf/archive/2013/12/13/devexpress-mvvm-framework-i ...