DNS 如何工作

简介: 在 TCP/IP 协议套件 中, DNS 是一个应用层协议。 DNS 协议默认基于用户数据电报协议(UDP, User Datagram, Protocol),但是也可以工作于传输控制协议(TCP, Transmission Control Protocol),当防火墙禁用 UDP 时作为备用方案。

在之前的文章,我们讨论了 递归查询过程概述,在我们进一步讨论 DNS 如何影响性能之前,我们需要理解 DNS 协议如何工作。

在 TCP/IP 协议套件 中, DNS 是一个应用层协议。 DNS 协议默认基于用户数据电报协议(UDP, User Datagram, Protocol),但是也可以工作于传输控制协议(TCP, Transmission Control Protocol),当防火墙禁用 UDP 时作为备用方案。

UDP 和 TCP 都是传输层协议。UDP 是轻量协议,它不要握手来建立连接或传输确认,因此减少了需要传输的数据包数量,时间流逝,来回往返。UDP 协议最大的骗局是,它不保证另一方能收到数据包,因此,应用程序必须处理没有收到响应的情况。

另一方面,TCP 需要通过三次握手建立连接 并且有传输错误检测,但是需要更多的数据往返次数,当然也需要更多时间。

因为我们正在讨论 TCP/IP 协议,我们将在某些领域深入到比特级别。但是不用担心 - 你不需要学习如何处理标志位来理解 DNS。在 Catchpoint 我们使用并强烈建议使用抓包工具,比如:WireShark 来提高数据包的可读性以及更方便调试。

协议

DNS 协议有 3 种类型的信息组成:请求,响应,更新。我们将不会讨论 “更新”,因为它不会影响最终用户。DNS 信息有 5 个部分: DNS 头,Question, 应答资源记录,权威资源记录,额外资源记录。

DNS 头

包头包含识别信息,以及关于消息其余部分包含什么的提示(摘要)。包头由 6 个字段组成,每个字段 16 位,一共 12 个字节。最前的 16 是传输 ID,用于匹配查询和响应,由客户端创建于查询信息,服务端在响应中返回。

下一个字段是标记。这是 DNS 数据包最重要的部分,因为这些标记用于区分请求和响应,以及迭代查询和递归查询。他们按以下顺序排列:

Bit 1: QR, 请求/响应标记(query/response),为 0 时信息为请求,为 1 时信息为响应。
Bits 2-5: Opcode,操作代码(operation code),告知接收主机消息意图。通常 0 意味着普通请求, 1 为反向请求,2 为 服务器状态。
Bit 6: AA,权威应答(authoritative answer)。只有响应主机是请求域名的权威名称服务器时设置该标记。
Bit 7: TC,截断(truncated)。如果数据包超出 UDP 最大 512 字节限制,则设置该标记。
Bit 8: RD,预期递归(recursion desired),若为 0 则为迭代查询,为 1 则为递归查询。更多递归内容见 文章。
Bit 9: RA,递归可用,若服务器支持递归时设置。
Bit 10: Z,保留为未来使用,所有的请求和响应中都必须设置为 0。
Bit 11: AD,真实数据(authentic data)。在域名系统安全扩展(DNSSEC)中使用,在老机器中被认为是 Z 的一部分。
Bit 12: CD,检测可用(checking disabled)。在域名系统安全扩展(DNSSEC)中使用。在老机器中被认为是 Z 的一部分。
Bit 13-16: Rcode 反馈代码(return code)。通常情况下,没有错误为 0 ,名称不存在则为 3。
头部保留的 4 个字段为问询数,应答资源记录,权威资源记录,和额外的资源记录。这些数字取决于是查询还是响应,以及响应类型。通常情况下,至少有一个请求。

查询

查询在请求和响应里都会展示,并且应该是完全相同的。有些工具,比如 WireShark 管他叫做请求,如上图。

通常情况下,每个数据包只有一个查询或请求。问题有 3 部分组成:请求名称,应该是一个主机名,比如:www.google.com ,查询类型和一个查询类别,对于互联网来说,几乎总是 1 或者 IN。查询类型是资源记录类型。以下列出了一些主要的类型,这里 有一个完整列表。

A, IPv4 地址:IPv4 是域名映射的类型。每个网站域名至少有 1 个 A 记录,否则最终用户将访问不到你的网站。
AAAA, Quad-A, IPv6 地址记录:IPv6 地址是域名映射的类型。由于IPv4 地址不再可用,目前正在大力支持 IPv6 -- 然而,还不是每个 网络运营商(ISP)和网站都支持它。
MX,Mail eXchange 记录:指定由那个邮件服务器代表域名拥有者接收邮件信息。
NS,Name Server 记录:映射域名到它的权威名称服务器。每个域名必须由至少 1 个 NS 记录。

目录
相关文章
反诈中心拦截网站域名措施与申诉方法
近几年随着互联网不断发展,也伴随着一些网络诈骗的问题,反诈中心打击违规诈骗网站、诈骗APP、标记诈骗手机号,这一些措施取得一定的效果,从去年开始严厉审核一些违规网站,也不排除于批量审核会出现一定的偏差,可能会出现审核不到位的情况,这里我表达自己的一些看法。
3680 0
反诈中心拦截网站域名措施与申诉方法
|
编解码 开发工具 Android开发
rtmp/rtsp直播播放器选择
相信大家在做rtmp、rtsp直播的时候,最大的困惑就是选个靠谱的播放器,直播的延迟,一定意义上说,90%的取决于播放器的好坏。
418 0
|
11月前
|
SQL NoSQL 关系型数据库
2024Mysql And Redis基础与进阶操作系列(5)作者——LJS[含MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页等详解步骤及常见报错问题所对应的解决方法]
MySQL DQL基本查询:select;简单、排序、分组、聚合、分组、分页、INSERT INTO SELECT / FROM查询结合精例等详解步骤及常见报错问题所对应的解决方法
|
开发者 C# 存储
WPF开发者必读:资源字典应用秘籍,轻松实现样式与模板共享,让你的WPF应用更上一层楼!
【8月更文挑战第31天】在WPF开发中,资源字典是一种强大的工具,用于共享样式、模板、图像等资源,提高了应用的可维护性和可扩展性。本文介绍了资源字典的基础知识、创建方法及最佳实践,并通过示例展示了如何在项目中有效利用资源字典,实现资源的重用和动态绑定。
383 0
|
网络协议 Python
python requests库如何使用http连接池降低延迟 keepalive复用连接
Python的`requests`库通过内置的连接池机制支持HTTP Keep-Alive特性,允许复用TCP连接以发送多个请求,减少连接开销。默认情况下,`requests`不显式禁用Keep-Alive,其行为取决于底层HTTP库(如urllib3)及服务器的支持。通过创建`Session`对象并自定义`HTTPAdapter`,可以调整连接池大小和重试策略,进一步优化连接复用。测试显示,使用`Session`和定制的`HTTPAdapter`比普通请求方法能显著减少连续请求间的时间消耗,体现了Keep-Alive的优势。
|
算法 安全 Linux
Ctfshow web入门 PHP特性篇 web89-web151 全(二)
Ctfshow web入门 PHP特性篇 web89-web151 全(二)
356 0
|
存储 C语言
【C语言基础篇】字符串处理函数(三)strcat的介绍及模拟实现
【C语言基础篇】字符串处理函数(三)strcat的介绍及模拟实现
手写C/C++死锁检测
手写C/C++死锁检测
234 0
|
应用服务中间件 nginx 网络协议
|
开发框架 JavaScript 前端开发
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件
727 0
ASP.NET Core WEB API 使用element-ui文件上传组件el-upload执行手动文件文件,并在文件上传后清空文件