【白话科普】聊聊 DNS 的那些小知识
你是否在上网时,遇到过这样的情况:QQ 能正常发送消息,但是网页却打不开,查看网络连接又正常显示。面对这种情况很多小伙伴都感到有些无措。那究竟要怎么处理,这究竟是怎么回事呢?
上网查询得知,一般情况下电脑都是自动获取 DNS 服务器的,无需手动设置,但一些特殊情况下,没有获取到 DNS 服务器,或者服务器出现故障,那我们就需要手动更换 DNS 来保证正常访问网页。而这类无法显示的情况,恰好都是因为 DNS 配置错误导致的,可以通过修改 DNS 来解决。
那么 DNS 到底在哪里,它要如何修改呢?
什么是 DNS
DNS(Domain Name System)是域名系统的缩写。它是 Internet 的基础之一,用于将域名映射到 IP 地址,就像手机电话簿里将人的名字对应到电话号码一样。当我们在浏览器中输入 Web 地址时,就可以通过 DNS 查询将其转换为关联服务器对应的 IP 地址。如果没有 DNS,我们需要记住每个站点的 IP 地址才能访问它。

这在互联网刚兴起时,还是可以比较轻松做到的,当时人们可以轻松地将特定 IP 地址与特定计算机相对应,通过在浏览器中直接输入特定的 IP 地址以访问网站。后来,随着越来越多的设备和人们加入到这个不断发展的网络,IP 越来越多,记忆就变成了一项极大的负担,网民都想要一个更易于记忆的单词组成的地址,因此诞生了域名。
在 70 年代和 80 年代初,这些名称和地址是由一个人(斯坦福大学的 Elizabeth Feinler)分配的,此人在名为 HOSTS.TXT 的文本文件中维护了所有与互联网连接的计算机的主列表。
显而易见随着 Internet 的发展,这是站不住脚的局面,越来越多的地址不可能由一个人维护。所以 1983 年,南加州大学的研究人员 Paul Mockapetris 因此开发了最初的域名系统,并命名为 DNS。尽管此后 DNS 发生了很大变化,但从根本上讲,它的工作方式仍与 40 年前一样。
在具体了解 DNS 在网络中的作用于工作原理前,我们先来看一下 DNS 的类别。
DNS 服务器类别
所有 DNS 服务器都属于以下四个类别之一:递归解析器、根域名服务器、TLD 域名服务器和权威性域名服务器。在典型的 DNS 查找中,这四种 DNS 服务器通过协同工作来完成将指定域的 IP 地址提供给客户端的任务。
DNS 递归解析器
递归解析器(也称为 DNS 解析器)是 DNS 查询中的第一站。它属于客户端与 DNS 域名服务器的中间人。从 Web 客户端收到 DNS 查询的请求后,递归解析器将使用缓存的数据进行响应,或者向根域名服务器发送请求,接着向 TLD 域名服务器发送另一个请求,然后向权威性域名服务器发送最后一个请求。收到来自包含已请求 IP 地址的权威性域名服务器的响应后,递归解析器将向客户端发送响应。
在此过程中,递归解析器将缓存住从权威性域名服务器收到的信息。当一个客户端请求的域名 IP 地址是另一个客户端最近请求的 IP 地址时,解析器可绕过与域名服务器进行通信的过程,并从缓存中为客户端提供所请求的记录。
DNS 根域名服务器
每个递归解析器都知道 13 个 DNS 根域名服务器,它们是递归解析器搜寻 DNS 记录的第一站。根服务器接受包含域名的递归解析器的查询,根域名服务器根据该域的扩展名(.com、.net、.org 等),通过将递归解析器定向到 TLD 域名服务器进行响应。根域名服务器由一家名为 Internet 名称与数字地址分配机构(ICANN)的非营利组织进行监督。
TLD 域名服务器
顶级域名服务器(Top Level Domain)维护共享通用域扩展名的所有域名的信息,例如 .com、.net 等。例如,.com TLD 域名服务器包含以“.com”结尾的每个网站的信息。如果用户正在搜索 upyun.com,那么在收到来自根域名服务器的响应后,递归解析器将向 .com TLD 域名服务器发送查询,后者将通过针对该域的权威性域名服务器进行响应。
权威性域名服务器
当递归解析器收到来自 TLD 域名服务器的响应时,该响应会将解析器定向到权威性域名服务器。权威性域名服务器通常是解析器查找 IP 地址过程中的最后一步。权威名称服务器包含特定域名的信息(例如,upyun.com),并且它可为递归解析器提供在 DNS A 记录中找到的服务器 IP 地址。或者如果该域具有 CNAME (别名)记录,它将为递归解析器提供一个别名域,这时递归解析器将必须执行全新的 DNS 查找,以便从权威性域名服务器获取记录(通常为包含 IP 地址的 A 记录)。
DNS 记录
在权威性域名服务器中,DNS 记录是不可或缺的存在。
DNS 记录(又名区域文件)是位于权威 DNS 服务器中的指令,它提供了一个域的相关信息,包括哪些 IP 地址与该域关联,以及如何处理对该域的请求。此外,所有 DNS 记录都有一个 “TTL”,代表生存时间,指 DNS 服务器多久刷新一次该记录。

常见的 DNS 记录有以下几种:
A 记录:保存域的 IP 地址的记录。
CNAME 记录:别名,将一个域或子域转发到另一个域,不提供 IP 地址。
MX 记录:将邮件定向到电子邮件服务器。
TXT 记录:可使管理员在记录中存储文本注释。
NS 记录:存储 DNS 条目的名称服务器。
SOA 记录:存储域的管理信息。
SRV 记录:指定用于特定服务的端口。
PTR 记录:在反向查询中提供域名。
其中 A 记录和 CNAME 这两个是解析域名最常用的记录。
DNS A 记录
“A”代表“地址”,这是 DNS 记录的最基本类型,它指出了域的 IP 地址。例如,提取 upyun.com 的 DNS 记录,其“A”记录目前会返回 IP 地址 115.231.97.2。“A”记录仅保存 IPv4 地址,如果站点具有 IPv6 地址,它将使用“AAAA”记录。
DNS CNAME 记录
当域或子域是另一个域的别名时,使用“规范名称”记录代替 A 记录。假设 www.example.com 有一个 CNAME 记录,其值是“example.com”。这意味着,当 DNS 服务器访问 www.example.com 的 DNS 记录时,它实际上会触发对 example.com 的另一个 DNS 查找,返回 example.com 的 IP 地址。所有 CNAME 记录都必须指向一个域,而不是 IP 地址。

对于 CDN 来说,由于 CDN 中存在着遍布各地的节点,A 记录是完全不够用的。而节点又需要根据用户本地 DNS 所在地区和运营商不断变动。所以使用 CNAME 记录进行域名解析,是一个非常方便的管理方法。做了别名记录后,就不用再去管节点的 IP 怎么变化了。
DNS 的工作方式
了解了 DNS 有几种,我们就可以来看一下 DNS 的工作方式了。
因为每一个上网设备都被分配了一个IP地址,所以当用户在 Web 浏览器中输入访问域名时,由客户端计算机发起请求,之后 DNS 在幕后通过一个名为“DNS解析”的过程,查询对应服务器IP,并进行连接。特别需要注意的是,如果你曾经访问过一次这个域名,那么你的本地会留有缓存,DNS 就会查找过程中会跳过一些步骤,从而使查找更快。
而完整的 DNS 查找则需要经历以下几个步骤:
以访问“upyun.com”为例,用户在浏览器中输入入 “upyun.com”,查询传输到 Internet 中,并被 DNS 递归解析器接收。
解析器查询 DNS 根域名服务器(.)。
根服务器使用存储其域信息的 TLD 域名服务器(.com)的地址响应该解析器。在搜索 upyun.com 时,我们的请求指向 .com TLD。
解析器向 .com TLD 发出请求。
TLD 服务器随后使用该域的域名服务器 upyun.com 的 IP 地址进行响应。
递归解析器将查询结果发送到域的域名服务器。
upyun.com 的 IP 地址之后从域名服务器返回解析器。
DNS 解析器使用最初请求的域的 IP 地址响应 Web 浏览器。

通过 DNS 查找的这几步返回 upyun.com 的 IP 地址后,浏览器便能发出对该网页的请求:
浏览器向该 IP 地址发起 HTTP 请求。
位于该 IP 的服务器返回网页到浏览器(第 10 步)。
看完了 DNS 的介绍,你是不是已经对 DNS 有所了解了呢,了解了 DNS,再遇到无法访问网页的情况,就可以通过修改 DNS 来解决了。是不是简单又方便呢?
推荐阅读
【白话科普】聊聊 DNS 的那些小知识的更多相关文章
- 【白话科普】聊聊网络架构变革的关键——SDN
最近二狗子在网上冲浪的时候,不小心将 CDN 搜索成了 SDN,结果跳出来了一大堆相关的知识点. 好学的二狗子当然不会随随便便糊弄过去,于是认认真真学习了好久,终于了解了 SDN 是什么. 原来,SD ...
- 【DNS】简单聊聊DNS如何工作
随便聊聊 我们知道,网络上传输的数据包是一层一层的包起来的,典型的是mac地址层,ip层,tcp/udp层,应用层数据 这么几个层,那用户在浏览器中打开www.baidu.com数据包如何传到baid ...
- 简述Python入门小知识
如今的Python开发工程师很受企业和朋友们的青睐,现在学习Python开发的小伙伴也很多,本篇文章就和大家探讨一下Python入门小知识都有哪些. 扣丁学堂简述Python入门小知识Python培训 ...
- 【白话科普】CDN & 游戏加速器,两者是一个原理吗?
说起加速,大家可能就会联想到"游戏加速"之类的场景,而说到现在流行的云服务加速,则离不开 CDN 这个词.那么 CDN 和游戏加速器是同一种东西么?从效果上看两者都是为了" ...
- 蓝牙Bluetooth技术小知识
蓝牙Bluetooth技术以及广泛的应用于各种设备,并将继续在物联网IoT领域担任重要角色.下面搜集整理了一些关于蓝牙技术的小知识,以备参考. 蓝牙Bluetooth技术始创于1994年,其名字来源于 ...
- HTML+CSS中的一些小知识
今天分享一些HTML.CSS的小知识,希望能够对大家有所帮助! 1.解决网页乱码的问题:最重要的是要保证各个环节的字符编码一致! (1)编辑器的编辑环境的字符集(默认字符集):Crtl+U 常见的编码 ...
- iOS APP开发的小知识(分享)
亿合科技小编发现从2007年第一款智能手机横空出世,由此开启了人们的移动智能时代.我们从一开始对APP的陌生,到现在的爱不释手,可见APP开发的出现对我们的生活改变有多巨大.而iOS AP ...
- Unix系统小知识(转)
Unix操作系统的小知识 2.VI添加行号/翻页/清屏 .在对话模式时(即输完Esc再输入: ),输入“:set number”可以将编辑的文本加上行号.跟玩俄罗斯方块一样方便的上下左右移动箭头的快捷 ...
- salesforce 零基础开发入门学习(十)IDE便捷小知识
在这里介绍两个IDE的便捷开发的小知识. 一) 本地调试 由于salesforce代码只能提交以后才能调试,所以很多时候调试代码很麻烦.新版增加了一个特性:即可以在本地调试相关的代码或者查看相关代码运 ...
- Jquery:小知识;
Jquery:小知识: jQuery学习笔记(二):this相关问题及选择器 上一节的遗留问题,关于this的相关问题,先来解决一下. this的相关问题 this指代的是什么 这个应该是比较好理 ...
随机推荐
- vue通过地址下载文件
通过a标签 // 创建a标签 const link = document.createElement('a') // download属性 link.setAttribute('download', ...
- 如何给el-table中某一列加指定内容和点击事件
背景: 小颖最近在写项目时遇到了要给 element-ui 中的 el-table 在 v-for el-table-column 标签时给某列加内容和点击事件,项目忙完了想着总结一下,下面一起 ...
- markdown文字与图片对齐方式
markdown文字与图片对齐方式 一.图片文字左右对齐 //如图所示,左文字,右图片 <div align="center"> <table rules=&qu ...
- Python 潮流周刊第一季完结(1~30)
你好,我是猫哥.庆祝 Python 潮流周刊在几天前顺利更新到了第 30 期! 我觉得这是一个很有意义的时间节点,不太短也不漫长,很适合作一个小小的总结. 我打算今后每 30 期作为一季,都给大家做一 ...
- 笔记3:Tensorflow2.0实战之MNSIT数据集
最近Tensorflow相继推出了alpha和beta两个版本,这两个都属于tensorflow2.0版本:早听说新版做了很大的革新,今天就来用一下看看 这里还是使用MNSIT数据集进行测试 导入必要 ...
- linux没有ifconfig命令
直接控制台安装(输入下面对应的tools命令就好了) ifconfig yum install -y net-tools.x86_64 vim yum -y install vim*
- 关于SpringBoot中出现的循环依赖问题
环境: SpringBoot2.7.8 背景: 在增加出库订单时需要对物品表的的数量进行修改 因此我在OutboundController中创建了几个公共方法,并将其注入到Spring中,结果给我报了 ...
- nginx-下载安装与配置
nginx下载 从官网下载,使用命令在linux下载即可,这个是目前稳定版最新的1.24.0版本,如果想要用旧版本直接修改版本号即可(旧版本我用的是1.12.2) 下载需要使用wget命令,默认是没有 ...
- 获取微信的token工具类
import cn.hutool.extra.spring.SpringUtil; import cn.hutool.http.HttpUtil; import cn.RedisUtil; impor ...
- 神经网络优化篇:详解梯度的数值逼近(Numerical approximation of gradients)
在实施backprop时,有一个测试叫做梯度检验,它的作用是确保backprop正确实施.因为有时候,虽然写下了这些方程式,却不能100%确定,执行backprop的所有细节都是正确的.为了逐渐实现梯 ...