DNS协议(DNS规范、DNS报文、DNS智能选路)
目录
DNS协议基本概念
DNS相关规范
DNS服务器的记录
DNS报文
DNS域名查询的两种方式
DNS工作过程
DNS智能选路
DNS协议基本概念
DNS的背景
我们知道主机通信需要依靠IP地址,但是每次通过输入对方的IP地址和对端通信不够方便,IP地址不好记忆
因此提出了通过主机名(也就是后面定义的域名中的某个部分)来和IP地址对应,通过访问主机名来实现访问IP地址,达到通信的效果;由于最开始网络上的主机比较少,通过使用本地的HOSTS.TXT文件来记录域名和IP地址之间的关系,并定期手动更新(Windows下的Host主机文件在:C:\Windows\System32\drivers\etc\hosts)
但是后来随着主机数量的增加,人工更新HOSTS.TXT文件不再适用,因此后面就提出了DNS规范
DNS协议的作用
DNS是一种具有层次结构的将域名和IP地址互相映射的分布式数据库(分布式:可以理解为通过大量的服务器来实现DNS解析—因为域名越来越多,少量服务器不够用)
其中记录了各种主机域名与IP地址的对应关系,能够使得用户更加方便的访问网站
即:
用户直接输入域名登录网站,通过DNS服务器将域名解析为IP地址,然后用户根据该IP地址进行报文封装和传输
DNS协议端口号
DNS端口号为53,支持TCP和UDP(TCP能够提供可靠的连接,并且可以处理更大的数据量)
使用UDP情况:
一般普通DNS查询为UDP协议
使用TCP情况:
区域传输的时候会使用TCP(即DNS服务器之间迁移记录的时候会使用到TCP协议)
在DNS记录的TTL为0时,服务器重新请求该记录也会使用到TCP
当DNS的响应报文大于512字节而使得TC标志位置位(表示被截断)时,会使用TCP重新查询
DNS相关规范
域名的分类
根域名
. 就是根域(不过一般在书写时省略)
顶级域名(又分为国家顶级域名和国际顶级域名)
国家顶级域名
中国cn
美国us等
国际顶级域名
.com 表示网络提供商提供的域名
.net 表示非盈利组织
.org等
二级域名(又分为国际域名下的二级域名和国家域名下的二级域名)
国际顶级域名下的二级域名
一般指域名注册人的网上名称(一般为企业名称);、
例如ibm、yahoo、microsoft、sangfor等
国家顶级域名下的二级域名(以下针对中国来说)
我国二级域名又分为类别域名和行政区域名两大类
类别域名6个
ac 用于科研机构
edu 用于教育机构
gov 用于政府部分
net 用于互联网信息中心
org 用于非盈利组织
com 工商金融企业
行政区域有34个,分别对应我国各省、自治区、直辖市
三级域名
使用字母、数字、连接符组成(各级域名之间用实点.连接)
DNS服务器类型
按照地域性划分
根域名服务器:最高层次的域名服务器(每一个根域名副武器都要存储所有顶级域名服务器的IP地址和域名)
顶级域名服务器:顶级域名服务器负责管理在本顶级域名服务器上注册的所有二级域名
权威域名服务器:负责将区域管辖内的主机域名转换为该主机的IP地址
本地域名服务器:默认域名服务器,离用户较近
根据工作性质划分
主域名服务器:负责维护某一个特定DNS区域的所有域名信息(对其中的解析记录具有自主控制权);是指定区域中唯一存在的权威服务器
辅助域名服务器:作为主域名服务器的备份,自动同步主域名服务器的域名信息(即从域名服务器提供的解析结果来自于主域名服务器—一般辅助服务器会定时向主域服务器进行查询-来了解记录是否发生变化通过TCP协议)
缓存域名服务器:没有自己的域名数据库,只提供域名解析结果的缓存功能;它从某个远程服务器取得每次域名服务器的查询回答(因此需要设置根域或其他DNS服务器作为解析来源),并将答案放在高速缓存中;以后查询相同的信息就会从缓存中的信息进行回答,提高查询速度和效率
转发域名服务器:负责所有非区域的本地查询;接到查询请求后,在本地缓存中查找,如找不到就将请求依次转发到指定的域名服务器,直到查找到结果为止
常用DNS服务器地址
114.114.114.114 国内通用DNS服务器地址
223.5.5.5 阿里云服务器
8.8.8.8 美国谷歌
DNS服务器的记录
DNS相关记录
记录名称
记录内容
补充说明
SOA(Start of Authority)记录
是授权机构起使记录(记录有关区域的重要信息)
例如:管理员相关信息、上次更新时间参数等信息
所有的DNS区域都需要一个SOA记录A(Address)记录
主机记录(将DNS域名解析为IPv4地址)
--------------------
AAAA记录
主机记录(将DNS域名解析为IPv6地址)
--------------------
NS(Name Server)记录
域名服务器记录(记录域名和DNS服务器的关系,一般为DNS服务器为权限域名服务器;表示想要查询该域名,你需要去找这个DNS服务器来查询对应域名的IP地址)
该记录只能设置为域名(即:记录的DNS服务器是以域名的形式显示的,不能通过IP地址的形式显示)
因此,该记录一般会结合A记录使用(通过A记录来指明该DNS服务器域名对应的IP地址)PTR(Pointer Record)记录
逆向查询记录(将IP地址解析成域名,主要用于判断垃圾邮件)
具体判断垃圾邮件的原理:垃圾邮件一般是伪造邮件头部的'From'字段(邮件的From字段有IP地址、域名等信息);当发送方发送邮件过来时,服务器通过PTR记录将IP地址解析为该IP地址对应的邮件域名,如果该邮件域名与发送方的邮件头中的'From'字段不一致(或者将邮件域名通过MX记录或A记录解析为IP地址,该IP地址与'From'字段不一致),则认为该邮件为垃圾邮件
MX(Mail eXchange)记录
邮件交换机器(告诉用户哪个邮件服务器负责接收特定域名的电子邮件,用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器)
例子:当某用户要发送邮件到12313@qq.com时,该用户的邮件系统就会通过DNS查找qq.com这个邮件后缀的MX记录;如果MX记录存在则用户将邮件发送到该邮件后缀所对应的邮件服务器上(可以是IP地址,也可以是域名--如果是域名则需要A记录来记录域名对应的IP地址)
CNAME(Canonical Name)记录
别名记录(将一个域名指向另一个域名,然后再解析关于另一个域名的IP地址)
多个域名可以对应相同的IP地址(可以减少A记录条数)
SPF记录
用于防范垃圾邮件而提出来的一种DNS记录类型,是一种TXT类型的记录(记录了一个域名所拥有的用来发送邮件的所有IP地址)
通过IP地址来进行邮件的身份认证(如果发件人的IP地址被包含在SPF记录里面,就认为是正确的邮件)
记录域名映射信息的格式
记录一般为以下格式
Name(域名或IP地址等)、TTL(生存周期)、Class(网路协议类型)、Type(资源记录类型)、Data(记录包含的数据)
TTL:将该DNS记录缓存在DNS服务器的时间(以s为单位),当TTL为0时,该记录会被认为过期,服务器会重新查询该记录的并进行更新(重新查询时使用的TCP协议)
以CNMA记录为例
DNS报文
DNS Query DNS请求
包含域名、DNS服务器地址
Transaction ID:事务ID(DNS报文的ID标识)
Flags:标志位
Questions:DNS请求的记录数量
Answer RRs:DNS响应的记录数量
Authority RRs:权威名称服务器的数量
Additional RRs:额外的记录数目(指的是权威名称服务器对应的IP地址的数目)
Queries:请求的记录信息以及请求的记录类型
DNS Response DSN应答
包含域名对应的1个或多个地址(也有可能是DNS服务器地址)
Transaction ID:事务ID(DNS报文的ID标识)
Flags:标志位
Questions:DNS请求的记录数量
Answer RRs:DNS响应的记录数量
Authority RRs:权威名称服务器的数量
Additional RRs:额外的记录数目(指的是权威名称服务器对应的IP地址的数目)
Queries:请求的记录信息以及请求的记录类型
Answers:响应的记录信息以及响应的记录类型
具体的标志位讲解
Response(QR):查询响应标志位(1为响应,0为查询)
Opcode:操作码(0标识标准查询、1标识方向查询、2表示服务器状态请求)
Authoritative(AA):授权应答,在响应报文有效(1表示位权威服务器的回应,0表示不是)
Thruncated(TC):表示是否被截断(1表示响应超过512字节被截断,此时使用TCP重新查询)
Recursion desired(RD):期望递归(为1表示请求为递归查询、需要返回结果;为0表示请求为迭代查询,可以返回能够查询的DNS服务器)
Recursion available(RA):可用递归,在响应报文有效(1表示服务器支持递归查询)
Authenticated:身份认证和认证数据
Reply code(rcode):表示响应的差错状态(0表示没有错误、1表示报文格式错误、2表示域名服务器失败、3表示域名错误、4表示查询类型不支持、5表示拒绝响应)
DNS域名查询的两种方式
递归查询(客户端只需要发送一次DNS请求就可以得到结果)
主要用于主机向本地域名服务器请求时使用(要求本地域名服务器返回给主机结果,本地域名服务器如何获得该结果主机不需要知道---即要返回给主机域名对应的IP地址)
迭代查询(服务器只需要查询自己本地的数据库)
主要用于DNS服务器和DNS服务器之间的请求(要求服务器返回可以返回域名对应结果,也可以返回能够解析该域名的域名服务器地址)
如果主机所询问的本地域名服务器不知道被查询的域名的IP地址,则本地域名服务器以DNS客户端的身份向其它根域名服务器继续发出查询请求报文(替主机查询)
根域名服务器收到本地域名服务器发出的迭代查询请求时,要么给出所查询域名的IP地址,要么告诉本地服务器下一步应该向哪一个域名服务器进行查询;就这样本地服务器依次发送DNS请求;最后本地域名服务将结果返回给主机
DNS工作过程
本地DNS服务器收到用户发来的DNS递归请求后具体如何工作
服务器收到DNS请求报文后,查看该域名自己是否能够解析
如果可以解析,查找对应记录返回结果给请求方
如果无法解析,则进行DNS请求(选择递归或者迭代—不过一般是迭代)
- 如果选择迭代,则发送DNS请求给其它服务器;其它服务器收到后,可以回应能够解析该域名的域名服务器地址,也可以回应结果(如果服务器回应能够解析该域名的域名服务器地址,则自身需要再发送DNS去请求—再此选择是迭代还是递归)
- 最后将得到的结果返回给主机
- 如果选择递归,则发送DNS请求给其它服务器;需要其它服务器回应具体的结果给自己(至于其它服务器如何获得结果自己不管)
DNS查询过程
- 当在浏览器中输入URL时,浏览器会先检查自己的缓存是否有域名IP的映射关系,有则直接使用IP进行通信;如浏览器没有缓存,则操作系统检查本地Hosts文件是否有域名IP的映射关系,有则使用IP进行通信;如果hosts没有这个域名的映射,则查找本地DNS解析器缓存是否有映射关系,有则直接返回完成域名解析;
- 如果还未找到映射关系,首先会找本地DNS服务器,如果服务器已缓存了映射关系,则使用这个IP地址映射返回完成域名解析(此解析不具有权威性)
- 如果本地DNS服务器缓存已经失效,进行递归查询,然后将结果返回给主机
DNS智能选路
如何实现DNS的智能选路
一个域名可能对应多个IP地址(每个运营商都有),正常情况下DNS服务器会随机选择一个给主机,这时主机访问就是随机访问,可能会出现跨运营商访问的问题,造成体验较差
此时就可以通过应用交付来实现DNS的智能选路
应用交付AD在DNS解析中的作用
AD可以解决DNS域名解析跨运营商访问的问题(通过智能选路选择对应的运营商地址--通过AD产品结合NS记录实现);在该场景下,AD其实是作为一个域名解析服务器,提供最终的域名到IP地址的解析
具体步骤
需要先将权威服务器中关于网站的A记录改为NS记录,并指向AD的域名(然后再通过A记录来记录AD域名对应的IP地址),最后将AD地址发给用户
此时用户主机向此AD发送DNS请求,AD根据主机的源IP地址,判断其所属的运营商;然后进行域名解析时,就解析该运营商对应域名的IP地址,将其返回给主机
访问网站全过程(通过AD智能选路)
相关文章:

DNS协议(DNS规范、DNS报文、DNS智能选路)
目录 DNS协议基本概念 DNS相关规范 DNS服务器的记录 DNS报文 DNS域名查询的两种方式 DNS工作过程 DNS智能选路 DNS协议基本概念 DNS的背景 我们知道主机通信需要依靠IP地址,但是每次通过输入对方的IP地址和对端通信不够方便,IP地址不好记忆 因此提…...

Python基础知识-变量、数据类型(整型、浮点型、字符类型、布尔类型)详解
1、基本的输出和计算表达式: prinit(12-3) printf(12*3) printf(12/3) prinit(12-3) printf(12*3) printf(12/3) 形如12-3称为表达式 这个表达式的运算结果称为 表达式的返回值 1 2 3 这样的数字,叫做 字面值常量 - * /称为 运算符或者操作符 在C和j…...

信息化,数字化,智能化是3种不同概念吗?与机械化,自动化矛盾吗?
先说结论: 1、信息化、数字化、智能化确实是3种不同的概念! 2、这3种概念与机械化、自动化并不矛盾,它们是制造业中不同发展阶段和不同层次的概念。 机械化:是指在生产过程中使用机械技术来辅助人工完成一些重复性、单一性、劳…...

C# WPF上位机开发(倒计时软件)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 生活当中,我们经常会遇到倒计时的场景,比如体育运动的时候、考试的时候等等。正好最近我们学习了c# wpf开发,完…...
Mysql timestamp和datetime区别
文章目录 一、存储范围和精度二、默认值和自动更新三、时区处理四、索引和性能五、存储空间和数据复制六、使用场景和注意事项七、时区转换 MySQL是一个常用的关系型数据库管理系统,其内置了多种数据类型用于存储和操作数据。其中,timestamp和datetime是…...

新手村之SQL——分组与子查询
1.GROUP BY GROUP BY 函数就是 SQL 中用来实现分组的函数,其用于结合聚合函数,能根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表。 mysql> SELECT country, COUNT(country) AS teacher_count-> FROM teacher…...

【hacker送书第9期】算法训练营(入门篇)
第9期图书推荐 内容简介作者简介精彩书评图书目录概述参与方式 内容简介 本书以海量图解的形式,详细讲解常用的数据结构与算法,又融入大量的竞赛实例和解题技巧。通过对本书的学习,读者可掌握12种初级数据结构、15种常用STL函数、10种二叉树和…...

微服务链路追踪组件SkyWalking实战
概述 微服务调用存在的问题 串联调用链路,快速定位问题;理清服务之间的依赖关系;微服务接口性能分析;业务流程调用处理顺序; 全链路追踪:对请求源头到底层服务的调用链路中间的所有环节进行监控。 链路…...
ubuntu 更换国内镜像
备份 cd /etc/aptcp sources.list sources.list.bakup修改源为清华源 sed -i s/archive.ubuntu.com/mirrors.aliyun.com/g sources.list更新软件源 apt-get update其他源如下: mirrors.ustc.edu.cn 中科大 mirrors.163.com 163 mirrors.aliyun.com 阿里云...
树模型与深度模型对比
表格型数据为什么那么神奇,能让树模型在各种真实场景的表格数据中都战胜深度学习呢?作者认为有以下三种可能: 神经网络倾向于得到过于平滑的解冗余无信息的特征更容易影响神经网络 所以一定程度的特征交叉是不是必要的,因为one-ho…...
测试类运行失败:TestEngine with ID ‘junit-jupiter‘ failed to discover tests
背景:原本我的项目是可以运行的,然后我用另外一台电脑拉了下来,也是可以用的,但是很奇怪,用着用着就不能用了。报了以下错误: /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home/bin/java …...
nodejs使用node-cron实现定时任务功能
ChatGPT国内站点:海鲸AI 在Node.js中,node-cron是一个轻量级的任务调度库,它允许你根据类似于Cron的时间表来安排任务的执行。如果你想要每十分钟执行一次任务,你可以按照以下步骤来设置: 安装node-cron: 如…...
【1day】蓝凌OA 系统datajson.js接口远程命令执行漏洞学习
注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞概述 二、影响版本 三、资产测绘 四、漏洞复现...

ABCDE类网络的划分及保留网段
根据IP地址的分类,IP地址被分为A、B、C、D和E五类。下面是对ABCDE类网络的划分及保留网段的详细描述: A类网络:范围从1.0.0.0到127.0.0.0,网络地址的最高位必须是“0”,可用的A类网络有127个,每个网络能容…...
营销系统规则引擎
一、系统介绍 规则引擎是一个用于执行营销规则的模块,其包括营销规则配置、规则校验等功能。规则引擎可以根据预先设定的条件和逻辑,自动化地执行特点的营销策略,帮助企业更好地吸引客户,增加销售和提高客户满意度。 规则引擎功能…...

【Linux】命令行参数
文章目录 前言一、C语言main函数的参数二、环境变量总结 前言 我们在Linux命令行输入命令的时候,一般都会跟上一些参数选项,比如l命令,ls -a -l。以前我总是觉得这是理所当然的,没深究其本质究竟是什么,今天才终于知道…...

【信息安全】-个人敏感信息、个人信息、个人金融信息
文章目录 个人敏感信息个人敏感信息判定举例 个人信息个人信息判定举例 个人金融信息内容a) 账户信息指账户及账户相关信息b) 鉴别信息c) 金融交易信息d) 个人身份信息e) 财产信息f) 借贷信息g) 其他信息: 出处 个人敏感信息 个人敏感信息判定 个人敏感信息是指一旦泄露、非法…...

海外服务器和国内服务器有什么样的区别呢
海外服务器和国内服务器有什么样的区别呢,其实呢在外形方面是大同小异,除了外形还有一些其他方面还存在这一些差异。 一,地理位置的差异。 海外服务器——有可能在中国数据中心之外的任何国家地区,例如美国服务器,韩…...

电脑屏幕亮度怎么调?学会4个方法,轻松调节亮度!
“我总是感觉我电脑屏幕太暗了,有时候如果光线好一点,会看不清电脑屏幕。有什么可以把电脑调亮一点的简单方法吗?” 在我们的日常生活中,电脑已经成为我们工作、学习、娱乐不可或缺的工具。然而,长时间面对电脑屏幕可能…...

微信小程序之猜数字和猜拳小游戏
目录 效果图 app.json 一、首页(index3)的代码 wxml代码 wxss代码 二、猜数字页面(index)代码 wxml代码 wxss代码 js代码 三.游戏规则页面(logs)代码 wxml代码 wxss代码 四.猜拳页面ÿ…...

IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
linux 错误码总结
1,错误码的概念与作用 在Linux系统中,错误码是系统调用或库函数在执行失败时返回的特定数值,用于指示具体的错误类型。这些错误码通过全局变量errno来存储和传递,errno由操作系统维护,保存最近一次发生的错误信息。值得注意的是,errno的值在每次系统调用或函数调用失败时…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
生成 Git SSH 证书
🔑 1. 生成 SSH 密钥对 在终端(Windows 使用 Git Bash,Mac/Linux 使用 Terminal)执行命令: ssh-keygen -t rsa -b 4096 -C "your_emailexample.com" 参数说明: -t rsa&#x…...

C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...