DNS协议详解

一:DNS协议简介

        当我们想要访问百度的时候,我们会输入网址www.baidu.com,而不是直接输入百度的服务器的IP地址去访问,而且我们也不知道百度的服务器的IP地址是多少。为什么我们输入百度的网址就能自动去找到百度的服务器地址呢。这背后就有DNS的功劳。

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

        DNS作为互联网的一个基础协议,其设计之初就考虑到了高效简单可用的原则,采用了协议设计中场景的分层架构。就像一个数据包有网络层,传输层,应用层。DNS本身也有自己独特的分层设计。

        Domain 分层架构呈现为树形结构,最顶上的为根服务器,然后为顶级域名(常见的如aliyun.com,sina.com.net,zte.com.cn)。目前,已经有超过 250 个顶级域名,每个顶级域名又可以进一步的划分出二级域名,二级域名又可以再划分出三级域名。依此类推,最终形成了我们现在见到的 www.baidu.com. 此类形式。(注:最后一个点表示根服务器,默认可忽略。)

        Domain 的分层架构设计体现了高效简单可用,如下:

  • 层级清晰:每一级域名代表一个层级,整个域名系统具有清晰的层次结构,简化每一层的管理和维护。
  • 分布式管理:DNS 是一个分布式数据库,不同的域名由不同的 DNS 服务器管理。分布式管理的最大优点就是提高整个集群的健壮性,单点故障不会影响整个DNS系统。
  • 易于扩展:可以根据需要简易的在树形结构上添加新的域名节点,而不会影响到整个系统的稳定性和性能。
  • 易于解析:使得域名更容易被解析,有助于搜索和查找。也方便进行域名解析的缓存,提高了域名解析的效率。

二:DNS协议字段解析

        DNS协议的层级在传输层之上,常见的是用UDP作为传输层,用的是知名端口53,当然也有TCP的DNS。

1,标识(identifier)

        标识占16 位,标识用于DNS的请求和响应是不是一对。对于一对的请求和响应,标识字段是一样的。

2,标志(flags )

标志占 16 位,其包含8个标志字段,其含义分别如下

  • QR 查询应答标志,0表示这是查询报文,1表示这是应答报文。
  • opcode 查询应答类型,0表示标准查询,1表示反向查询,2表示请求服务器状态。
  • AA 表示权威回答( authoritative answer ),意味着当前查询结果是由域名的权威服务器给出的,仅由应答报文使用。
  • TC 位表示截断( truncated ),使用 UDP 时,如果应答超过 512 字节,只返回前 512 个字节,仅当DNS报文使用UDP服务时使用。DNS 协议使用UDP服务,但也明确了 『当 DNS 查询被截断时,应该使用 TCP 协议进行重试』 这一规范。
  • RD 表示递归查询标志 ( recursion desired ),在请求中设置,并在应答中返回。
    • 该位为 1 时,服务器必须处理这个请求:如果服务器没有授权回答,它必须替客户端请求其他 DNS 服务器,这也是所谓的 递归查询;
    • 该位为 0 时,如果服务器没有授权回答,它就返回一个能够处理该查询的服务器列表给客户端,由客户端自己进行 迭代查询。
  • RA 位表示可递归 ( recursion available ),如果服务器支持递归查询,就会在应答中设置该位,以告知客户端。仅由应答报文使用。
  • zero 这三位未使用,固定为0。
  • rcode 表示返回码(reply code),用来返回应答状态,常用返回码:0表示无错误,2表示格式错误,3表示域名不存在。

3,问题数(question count )

占16位,表示后面问题节中的记录个数

4,应答资源记录数(answer count)

占16 位,表示答案节中的记录个数

5,授权资源记录数(authority record count)

占16 位,表示授权信息节中的记录个数

6,额外资源记录数(additional record count)

占16 位,表示额外信息节中的记录个数

7,查询问题

询问题部分由多个(question count)问题构成,每个问题的格式都相同,分为3个段:

  1. 查询名,以example.com为例,将被编码为7example3com0这13个字节。数字7表示后面example的长度,最后0则表示后面没跟任何字符,相当于一个结束符。单个字节最长可表示255大小,因此每一级域名的最大长度也是255。
  2. 查询类型(type)
  3. 查询类(class),通常为 1 ,表示 TCP/IP 互联网地址;

常用的查询类型如下:

查询类型名称代码含义
1A将域名解析到一个指定的IPV4的IP上。
2NS用来指定该域名由哪个DNS服务器来进行解析,类似于托管,将子域名交给其他DNS服务器解析。
5CNAME规范名称,可以将注册的不同域名都转到同一个规范名称上,由这个规范名称统一解析IP地址
15MX电子邮件交互
16TXT文本信息
28AAAA将域名解析到一个指定的IPV6的IP上。

8,应答

        该部分仅在应答报文中才有,由应答资源记录(answer resource record, answer RR)、授权资源记录(authority resource record, authority RR)和额外资源记录(additional resource record, additional RR)三部分构成,当然,并非每个应答报文都同时会包含这三部分,有的报文只包含其中一部分或两部分。这三部分均使用相同的格式,以应答资源记录为例,应答资源记录内部也是由answer count 个答案组成的,每个答案可分为6个段,前三个段与请求报文中的查询问题一节中的段落完全一致。

        DNS请求

        DNS响应

三:DNS工作原理

        域名解析流程,即:DNS 系统将域名解析为 IP 地址的过程。域名递归解析流程,即:从 DNS 系统中的根服务器开始向下递归多个相关 DNS 服务器并最终完成域名解析的流程。一个相对完整的流程如下图所示:

 需要注意的是域名的查询有两种方式,一种是递归查询和迭代查询。

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

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

相关文章

SAP-部分字段变更

在SAP中部分字段是可以自行调整的,例如下图 这个字段是客户组1,已经被改成一级经理,现在来操作改回客户组1 首先选择字段点击F1-技术信息-数据元素(双击) . . 保存,返回,激活,返…

【element优化经验】怎么让element-ui中表单多语言切换排版不乱

目录 前言: 痛点: 1.左对齐,右对齐在中文和外语情况下字数不同,固定宽度会使名称换行,不在整行对齐,影响美观。 2.如果名称和输入框不在一行,会使页面越来越长 3.label-width值给变量&#…

【图论】关键路径求法c++

代码结构如下图: 其中topologicalSort(float**, int, int*, bool*, int, int)用来递归求解拓扑排序,topologicalSort(float**, int*&, int, int, int)传参图的邻接矩阵mat与结点个数n,与一个引用变量数组topo,返回一个布尔值…

C语言数组的距离(ZZULIOJ1200:数组的距离)

题目描述 已知元素从小到大排列的两个数组x[]和y[], 请写出一个程序算出两个数组彼此之间差的绝对值中最小的一个,这叫做数组的距离 。 输入:第一行为两个整数m, n(1≤m, n≤1000),分别代表数组f[], g[]的长度。第二行有m个元素&a…

为什么你的自动化测试无法落地

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

[Android]使用Git将项目提交到GitHub

如果你的Mac还没有安装Git,你可以通过Homebrew来安装它: brew install git 方式一:终端管理 1.创建本地Git仓库 在项目的根目录下,打开终端(Terminal)并执行以下命令来初始化一个新的Git仓库&#xff1…

Centos7安装Cesi(Supervisor集中管理工具)

Background CeSi 是 Supervisor 官方推荐的集中化管理 Supervisor 实例的 Web UI,该工具是用 Python 编写,基于 Flask Web 框架 。Superviosr 自带的 Web UI 不支持跨机器管理Supervisor 进程,功能比较简单,通过 CeSi 可以集中管理…

Python 如何开发出RESTful Web接口,DRF框架助力灵活实现!

Django Rest Framework(DRF)是构建强大且灵活的Web API的优秀工具。它基于Django,提供了一套用于构建Web API的组件和工具,简化了API开发过程,同时保留了Django的优雅和强大。 一、Web应用模式 在开发Web应用时&…

Jquery ajax 同步阻塞引起的UI线程阻塞的坑(loading图片显示不出来 )

Jquery ajax 同步阻塞引起的UI线程阻塞的坑(loading图片显示不出来,layer.load延迟)jax重新获取数据刷新页面功能,因为ajax属于耗时操作,想在获取数据且加载页面时显示加载遮罩层,结果发现了ajax的好多坑。…

使用Wireshark提取流量中图片方法

0.前言 记得一次CTF当中有一题是给了一个pcapng格式的流量包,flag好像在某个响应中的图片里。比较简单,后来也遇到过类似的情况,所以总结和记录一下使用Wireshark提取图片的方法。 提取的前提是HTTP协议,至于HTTPS的协议需要导入服…

随笔记录-springmvc_ResourceHandlerRegistry+ResourceHttpRequestHandler

环境:springboot-2.7.5 配置文件配置静态资源映射 springboot配置静态资源映射方式是通过 WebMvcAutoConfiguration 实现的 spring: # resources: # # 自springboot 2.5.5之后,该属性已经被废弃,使用spring.web.resources.static-locat…