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 记录。

目录
相关文章
|
存储 前端开发 Java
【C++ 多线程 】C++并发编程:精细控制数据打印顺序的策略
【C++ 多线程 】C++并发编程:精细控制数据打印顺序的策略
599 1
|
网络协议
【计算机网络】为什么DNS协议采用的是UDP作为传输层协议,而不是TCP?
【1月更文挑战第10天】【计算机网络】为什么DNS协议采用的是UDP作为传输层协议,而不是TCP?
|
8月前
|
人工智能 自然语言处理 搜索推荐
2025年适合汽车行业、互联网企业与电商的智能客服系统选型指南
在数字化转型背景下,智能客服成为企业提升服务效率与用户体验的关键。本文聚焦汽车、互联网、电商等行业需求,深入解析瓴羊Quick Service、华为云、百度智能云、Salesforce、Zendesk五款主流智能客服产品,从核心功能、场景适配到实战案例,为企业选型提供全面参考,助力构建高效、智能、全渠道的客户服务新体系。
|
Java Maven
结合NBCIO-BOOT项目最新SpringToolSuite4安装配置
结合NBCIO-BOOT项目最新SpringToolSuite4安装配置
411 0
|
机器学习/深度学习 人工智能 搜索推荐
什么叫生成式人工智能?职业技能的范式转移与能力重构
生成式人工智能(Generative AI)是AI领域的重要分支,其核心在于通过学习数据分布生成新内容,如文本、图像、音乐等。与传统判别式模型不同,生成式AI基于深度学习技术(如Transformer架构),展现出“创造力”,但其本质仍是概率计算的结果。它正在重塑内容创作、编程、设计等多个职业领域,推动职业技能的范式转移。 掌握生成式AI需要理解其技术原理、能力边界及伦理挑战。职业技能培训应聚焦提示设计、结果评估和混合创作三大能力,帮助从业者在人机协作中发挥主导作用。未来,生成式AI将向多模态、个性化发展,而人类的独特价值在于为技术注入人文关怀与道德框架。
|
存储 人工智能 文字识别
VideoRAG:长视频理解的检索增强生成技术,支持多模态信息提取,能与任何 LVLM 兼容
VideoRAG 是一种用于长视频理解的检索增强生成技术,通过提取视频中的视觉对齐辅助文本,帮助大型视频语言模型更好地理解和处理长视频内容。
1210 10
VideoRAG:长视频理解的检索增强生成技术,支持多模态信息提取,能与任何 LVLM 兼容
|
网络安全 算法框架/工具 开发工具
Packer构建openStack镜像
Packer构建openStack镜像
407 13
|
JavaScript Linux Windows
【应用服务 App Service】NodeJS +Egg 发布到App Service时遇见 [ERR_SYSTEM_ERROR]: A system error occurred:uv_os_get_passwd returned ENOENT(no such file or directory)
【应用服务 App Service】NodeJS +Egg 发布到App Service时遇见 [ERR_SYSTEM_ERROR]: A system error occurred:uv_os_get_passwd returned ENOENT(no such file or directory)
565 0
|
域名解析 网络协议 Linux
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
在Linux中,我们都知道,dns采用了tcp协议,又采用了udp协议,什么时候采用tcp协议?什么 时候采用udp协议?为什么要这么设计?
|
存储 API 数据安全/隐私保护
邮箱收不到验证码邮件是什么原因
在互联网应用中,未收到验证码邮件常令人困扰。原因包括:邮件误标为垃圾、邮箱设置不当、发件服务器故障、邮箱地址输入错误,及ISP拦截。解决策略有检查垃圾邮件、清理邮箱、修正设置、确认邮箱地址无误、联系服务提供商与ISP,或尝试其他邮箱服务。使用AOKSend等可靠邮件服务可提升送达率,其优势在于高送达率、实时监测与易集成性,确保验证码邮件及时准确到达,改善用户体验。