在上一篇《DNS 系列(一):为什么更新了 DNS 记录不生效?》中,我们主要讲解了 DNS 和 DNS 传播,知道了网络通信主要通过 IP 地址来进行,而域名系统(DNS)则是保证用户在浏览器中输入域名之后,可以访问到对应的网站服务器。那这个过程到底是如何进行的呢?

DNS记录

DNS 记录是位于权威 DNS 服务器中的指令,提供域和主机名相关的详细信息,包括哪些 IP 地址与该域关联,以及如何处理对该域的请求。

当我们在浏览器中输入网站地址时,浏览器首先要会在计算机内部缓存中查找属于该域名的 IP 地址,如果没有再到网络提供商的数据库或其他 DNS 服务器中查找。

DNS 记录由一系列 DNS 语法编写的文本文件组成。每个 DNS 记录都有一个单独的行。记录通常遵循以下格式:

<name> <ttl> <class> <type> <rdlength> <radata>
  • < name >:指域,即用户在浏览器中输入的名称

  • < ttl >:TTL 代表“生存时间”,表示记录可以临时存储在缓存中的时间(以秒为单位)

  • < class >:理论上,DNS 记录有不同的类别。然而实际中,记录常是 Internet(即 IN),

  • < type >:不同的记录类型

  • < rdlength >:指定后续数据字段的大小(可选值)

  • < rdata >:解析出的域名信息(例如 IP 地址)

我们可以使用 Dig 命令查询 DNS 记录信息,例如:www.example.com

www.example.com.  69288  IN  A  93.184.216.34

这代表着该条记录可以在缓存中存储 69288 秒,它涉及 Internet 上的 DNS 记录(IN),并指向了 A 类记录,同时域名被解析为 IP 地址(93.184.216.34)。

DNS 记录类型

上面我们提到了 DNS 记录有不同的类型,这其实是指记录中的信息类型,比较常见的有以下几种:

A 记录

Internet 上大部分 DNS 解析都是通过 A 类记录进行的,并指向一个 IPv4 地址。通过这个记录,用户在浏览器中输入域名后,客户端向相应的 IP 地址发送 HTTP 请求。由于 IPv4 地址的大小始终为 4 个字节,因此 rdlength 的值始终为 4。

AAAA 记录

AAAA 记录,也称为“quad A”,功能与 A 记录相同。但是,它指向的是 IPv6 地址。因为 IPv6 的长度为 128 位(16 字节),所以这里也预定义了 rdlength 为 16。

SOA 记录

SOA 记录包含区域文件或 DNS 服务器的区域信息。 因为 DNS 区域传输是将 DNS 记录数据从一个主名称服务器发送到一个辅名称服务器的过程,而 SOA 记录会首先被传输,所以每个 DNS 区域都需要一个 SOA 记录。

CNAME 记录

CNAME 记录(规范名称记录)是将记录值指向一个别名域,而不是 IP 地址。对于这种类型,rdata 字段会填充一个域名,该域名可以继续指向下一个域名或 IP 地址。

MX 记录

MX 记录是指邮件交换或 SMTP 电子邮件服务器,MX 记录可以存在多个,通过指定优先级来确定使用顺序。

PTR 记录

PTR 记录(指针)是允许反向查找的 DNS 记录。与“A”记录恰好相反,它可以通过 IP 地址来查找对应的域名。

NS 记录

NS (域名服务器)记录会明确特定区域的管辖权。一个域通常会有多个 NS 记录,这些记录可指示该域的主要和辅助域名服务器。正确配置的 NS 记录能告诉互联网可从哪里找到域的 IP 地址,从而完成加载网站或应用程序。

TXT 记录

TXT 记录包含了供用户或机器可读信息的文本。一个域可以有许多 TXT 记录。

SRV 记录

通过 SRV 记录,服务器可以为一些特定的服务提供主机和端口信息,例如即时通讯等。一些互联网协议需要使用 SRV 记录才能运作。

除了这些常见的 DNS 记录,还有很多不常用的记录类型,例如:APL、CAA、DNAME 等等。了解了 DNS 记录,下一步就来详细看看 DNS 是如何请求到这些记录的。

DNS 请求

每当我们在浏览器的搜索栏中输入网址时,都会先向本地名称服务器(Local DNS)发出请求。Local DNS 是一个检查记录是否在本地缓存中的组件,它的查询是递归/迭代查询。

客户端和 Local DNS 是递归查询,这是最常见的一种查询方式。具体来说就是如果 Local DNS 不能响应请求,它会代替客户端向其他根域名服务器继续发出查询请求,即替客户端继续查询,而不是让客户端自己进行下一步查询。

而 Local DNS 和其他名称服务器之间是迭代查询。具体表现为如果 Local DNS 请求的 DNS 服务器无法回答查询,那么它会返回下一个 DNS 服务器的地址作为应答。然后 Local DNS 再向下一个 DNS 服务器发送一个新请求,继续查找直至查到记录。

所以 Local DNS 的查询总体过程是首先将之前获取过的 IP 地址记录到缓存中,并根据请求将结果传递给客户端。如果所需的记录不在 Local DNS 缓存中,则请求将转发到对应网络服务商的 DNS 服务器。如果当前 DNS 服务器无法应答本次查询,它会将请求转发到不同的 DNS 服务器。

需要注意的是递归查询通常会比迭代查询更快。因为递归 DNS 服务器会缓存它执行的每个查询结果,并将结果保存一个 TTL 时间。当递归解析器接收到其缓存中已有的 IP 地址查询时,它可以快速将结果提供给客户端,而无需与其他 DNS 服务器进行通信。但是,在开放的 DNS 服务器上允许递归查询会产生安全漏洞,这种配置容易遭到 DNS 放大攻击和 DNS 缓存中毒。

了解了DNS的记录,下次大家再遇到网站无法访问的错误信息时,就可以优先排查是不是 DNS 出现了问题。如果你是网站管理者,可以查看 DNS 记录是否配置错误,或者 DNS 服务器是否无法响应。如果你是网站访问者,可以尝试切换网络或者更换本地 DNS 来解决。

推荐阅读

又拍云 Redis 的改进之路

关于 GIN 的路由树

什么是走索引?

DNS 系列(二):DNS 记录及工作方式,你了解吗?的更多相关文章

  1. 一步一步学EF系列二【Fluent API的方式来处理实体与数据表之间的映射关系】

    EF里面的默认配置有两个方法,一个是用Data Annotations(在命名空间System.ComponentModel.DataAnnotations;),直接作用于类的属性上面,还有一个就是F ...

  2. DNS 系列(三):如何免受 DNS 欺骗的侵害

    互联网上每一台设备都会有一个 IP 地址,我们在访问网站或发送信息时,其实都是通过 IP 地址达成准确请求的.但是这个 IP 地址由很长一串数字组成,记忆起来相当困难,所以我们创造了更实用的域名来代替 ...

  3. DNS劫持和DNS污染的区别

    我们知道,某些网络运营商为了某些目的,对DNS进行了某些操作,导致使用ISP的正常上网设置无法通过域名取得正确的IP地址.常用的手段有:DNS劫持和DNS污染. 什么是DNS劫持 DNS劫持就是通过劫 ...

  4. 【转】DNS劫持和DNS污染的区别

    什么是DNS服务器? 简单来说,DNS服务器就是域名管理系统. DNS(Domain Name System)是域名解析服务器的意思. DNS服务器是干什么的? DNS服务器在互联网的作用是:把域名转 ...

  5. DNS 劫持 和 DNS 污染

    1,用户需要访问www.liusuping.com这个网站,向DNS服务器提出解析请求. 2,DNS服务器通过检查发现www.liusuping.com域名的IP地址是127.0.0.1,将结果返回给 ...

  6. <转>详解DNS的常用记录(上):DNS系列之二

    详解DNS的常用记录(上) 在上篇博文中,我们介绍了DNS服务器的体系结构,从中我们了解到如果我们希望注册一个域名,那么必须经过顶级域名服务器或其下级的域名服务器为我们申请的域名进行委派,把解析权委派 ...

  7. <转>详解DNS的常用记录(下):DNS系列之三

    在上篇博文中我们介绍了DNS服务器中几种不可或缺的记录,包括A记录,NS记录和SOA记录.本篇博文中我们将继续为大家介绍DNS的另外几种常用记录,希望能对大家了解DNS有所帮助. 四 MX记录 MX记 ...

  8. DNS 系列(一):为什么更新了 DNS 记录不生效?

    我们在上网时如果想要访问到另一台机器上的内容,通常只需要直接输入一串地址,例如:www.upyun.com,就能够准确访问到自己想要访问的网站.但是实际上这只是方便我们记忆的字符形式网络标识,真正让我 ...

  9. <转>揭秘DNS后台文件:DNS系列之五

    揭秘DNS后台文件 在前面的博文中我们介绍了DNS的体系结构,常用记录,还介绍了辅助服务器的配置,今天我们来介绍一下DNS服务器背后的几个文件.其实DNS服务器的工作完全依靠这几个文件,了解了DNS的 ...

随机推荐

  1. 技术分享 | WEB 端常见 Bug 解析

    对于 WEB 产品来说,有一些常见的 Bug,本章节挑选一些比较典型的 Bug 进行举例介绍. UI Bug 页面展示的时候,需要根据长度的边界值去设计用例进行验证.   一般来说都会有超长内容的验证 ...

  2. wireshark、tcpdump使用笔记

    最近使用wireshark抓包icmp协议,过滤的命令如下所示: ip.addr eq 192.168.20.54 and ip.addr eq 192.168.50.131 and (icmp) 如 ...

  3. [洛谷] P2241 统计方形(数据加强版)

    点击查看代码 #include<bits/stdc++.h> using namespace std; long long n, m, total, sum1, sum2; int mai ...

  4. 基于SqlSugar的数据库访问处理的封装,支持.net FrameWork和.net core的项目调用

    由于我们有时候需要在基于.net framework的项目上使用(如Winform端应用),有时候有需要在.net core的项目上使用(如.net core的WebAPI),那么我们把基于SQLSu ...

  5. 【ACM程序设计】最小生成树 Prim算法

    最小生成树 ● 最小生成树的定义是给定一个无向图,如果它任意两个顶点都联通并且是一棵树,那么我们就称之为生成树(Spanning Tree).如果是带权值的无向图,那么权值之和最小的生成树,我们就称之 ...

  6. 论文解读(NGCF)《LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation》

    论文信息 论文标题:LightGCN: Simplifying and Powering Graph Convolution Network for Recommendation论文作者:Xiangn ...

  7. WinUI迁移到即将"过时"的.NET MAUI个人体验

    迁移的初衷 本人平时是做.net相关的工作,对于.net技术栈也有一些了解,自从新的.net能够跨平台之后,之前也有跨平台的ui框架Xamarin,现在微软推出了.NET MAUI这个说是 统一了开发 ...

  8. 771. Jewels and Stones - LeetCode

    Question 771. Jewels and Stones Solution 题目大意:两个字符串J和S,其中J中每个字符不同,求S中包含有J中字符的个数,重复的也算 思路:Set记录字符串J中的 ...

  9. linux篇-centos7安装DHCP服务器

    1检查防火墙和selinux(关闭) 关闭防火墙和selinux,这边不多说 2检查DHCP状态 3安装DHCP软件包 4把系统默认的样例复制 5修改配置文件 option domain-name & ...

  10. 一个 "开箱即用" 个人博客全栈系统项目!vue+node+express+mysql+sequlize+uniapp

    " MG'Blog " 一个 "开箱即用" 个人博客全栈系统项目! 探索本项目的源码 » 前台预览 · 管理端预览 v1.0.2 小程序预览 v1.0.2 介绍 ...