DNS详解

article/2025/11/5 13:38:05

前言:
前面讲了域名、IP,那么还缺少一个主角—DNS。这些都是网络中最最最基础的,也是最重要的概念,很有必要深入学习下。

网站打开的原理
我们在通过网站网址打开网站的过程中,其实就是浏览器获取到了隐藏在网址背后的网站服务器的IP地址,通过访问这个IP地址的网站服务器来打开网站。也就是说所有的域名,真正起作用的是它背后的服务器的IP地址。那浏览器之所以知道每一个域名背后对应的网站服务器的IP地址,靠的就是DNS。
在这里插入图片描述

正文

NDS全称Domain Name System,翻译过来就是域名系统。 在我看来它是一种机制,是管理和查询世界上所有域名,所对应的IP地址的一种非常高效的一种机制。而实现这个机制,主要靠的就是专门的DNS服务器注意,我这里说的是们 。互联网世界中有很多的NDS服务器,它们到底是如何协作,实现域名和IP地址的高效查询和管理的呢?本文章我们来了解一下DNS背后的工作原理。
DNS的服务器,它有一个分层协作的机制 ,这个分层机制和我们了解过的域名的层级有非常大的关系。 eg:b站的域名(www.bilibili.com),最右边的com是顶级域名(世界顶级域名,cn是国内顶级域名),往左的bilibili是一级域名,再往左的是二级域名www,如果往左还有的话,那等级就依次递减。不过其实还有一个根域名.root,应该写在域名的最右侧,也就是等级最高的域名 ,所以b站完整的域名是www.bilibili.com.root。但是这个根域名,因为它是唯一的,你写了跟没写没差,写了反而显得多余,因此我们在日常使用过程中,基本上都不会去写根域名,只不过在有些场景,或者是有些域名的写法会带上这个点root或者是只有一个点,eg:www.bilibili.com.这样的一个简化的写法。那么根域名和域名的层级与我们这个DNS服务器有什么关系呢?
假如现在有一个人,想要在浏览器里面打开b站,他在浏览器里面输入的是www.bilibili.com,然后回车,然后浏览器会通过网络去向某台DNS服务器查询www.bilibili.com这个域名背后对应的IP地址。每台联网的设备,都会有一台指定的DNS服务器来帮助自己去完成查询的过程。这里就好比,我是负责查询任务的NDS服务器,我的查找的过程会先从DNS服务器们中的一种叫做Root DNS Server,就是根DNS服务器开始找起,这种服务器是专门用来,只负责记录com、net、org等等这些顶级域名的DNS服务器的网络地址的。那也就是说,Root DNS服务器收到域名的查询请求之后,它只看你要查询的域名的顶级域名是什么,它一看这个是com顶级域名,它就会回复:“好的,这里是负责管理com顶级域名的DNS服务器的网络地址,你去这些服务器那里问问看吧”我这台DNS服务器收到这些从根DNS服务器发回的消息之后,又马不停蹄的去找负责com顶级域名的DNS服务器了(Top Level Server),而负责com顶级域名的服务器,在了解到我的查询请求之后,它帮我查查bilibili.com域名的信息,然后发现专门负责bilibili.com域名的DNS服务器的网络地址,这种NDS服务器一般被称为Name Server。然后它就把这个DNS服务器的网络地址发给了我,然后我就继续去找这个专门的Name Server,从它那里,我终于找到了,www.bilibili.com这个域名(对应)的IP地址。然后我再把IP地址信息回传给浏览器,这样浏览器就可以通过访问这个(网站服务器)IP地址来打开b站了。
在这里插入图片描述
这种分层的协作机制,是不是和域名的层级很相似 。根域名、顶级域名、一级域名和根DNS服务器、顶级域名DNS服务器、Name Server DNS服务器,每一层服务器,只负责记录下一层域名的NDS服务器的信息
在这里插入图片描述
大概的查询机制就是这样。


接下来,我们举例子从头再捋一遍整个过程,让大家清楚的了解更多的细节
比如我住在深圳的某个小区,假如,今天是我有生以来第一次在主机的电脑上,想看看b站,于是我小心翼翼的在我电脑的浏览器里面,输入了www.bilibili.com,然后敲了一下回车。 这时浏览器会先查找,它自己的DNS缓存,如果我之前在电脑上,访问过b站,那里面有可能就有这个域名的记录,那就有相应的网址的IP地址的信息,那就可以直接访问了,但是因为我这里说的是第一次访问,所以它就在缓存里面找不到。接着浏览器会先在本地电脑上,一个叫hosts文件中,查找相应的域名和IP的对应记录,如果没有的话,它就会把查询请求,发送到你电脑网络设置中设置好的NDS服务器上。一般我们的电脑和手机连上网络的时候,这个都是自动设置好的,当然,如果你知道,某个公开的DNS服务器的地址,也可以自己手动,直接在网络设置管理里面进行设置(然后就会由这DNS服务器负责你域名背后的IP地址的查询的工作,而要是自动设置的则会先向路由器发送DNS查询请求->路由器->光猫->运营商DNS服务器)。eg:比较有名的,像谷歌的DNS—8.8.8.8。自动设置的DNS服务器的IP地址,一般都是管理WiFi的路由器的IP地址,eg:像192.168.0.1。
在这里插入图片描述
而路由器收到DNS查询请求之后,它会把它转发到光猫,也就是宽带盒子(也就是光猫再转给运营商DNS服务器)上面设置好(IP地址)的相应的宽带服务商提供的(各自的)DNS服务器上,
在这里插入图片描述
电信、联通、移动,它们都有各自很多这样的DNS服务器,这种DNS服务器,会负责各自区域内的联网设备的DNS请求的查询 ,eg:我家电脑被自动分配的,它可能只负责我家附近几个小区所有的DNS请求的处理,这种DNS服务器,一般被称为Local DNS Server。那么这个Local DNS Server或者你自己手动设置的DNS服务器,就会负责你域名背后的IP地址的查询的工作,当负责我设备的Local DNS Server收到我这台电脑的浏览器发送的域名查询请求,它会先在它自己服务器本地查询,看看有没有已经查询过的记录,如果有别的设备,刚好在不久前,已经通过这台DNS服务器,查询过www.bilibili.com这个域名,该服务器上是会有缓存的,有的话直接返回相应的IP地址到我电脑的浏览器上,如果它在服务器里面的缓存中找了一圈,并没有发现www.bilibili.com网址的信息,那么这个Local DNS Server会向Root DNS Server,也就是根NDS服务器发送查询请求—咦,可能有人会问,为什么宽带运营商的DNS服务器会知道根NDS服务器的IP地址呢?因为根DNS服务器,在全球只有13台,而且基本是固定不变的,所以在所有的DNS服务器当中,它们的信息都是内置的接着的过程就是,按照我之前给大家介绍过的,分层查询机制进行查询 。先向根DNS服务器查询,获取负责com顶级域名的DNS服务器的地址,然后负责帮你查询的DNS服务器(Local DNS Server)接着会向负责com顶级域名的DNS服务器查询负责bilibili.com这个一级域名的DNS服务器的信息,查询到之后,再向负责bilibili.com域名的DNS服务器,也就是Name Server。查询www.bilibili.com这个二级域名(指向)的服务器的IP地址信息,查到之后,就返回给电脑上的浏览器,这样,浏览器就能访问这个IP地址来打开网站了。
在这里插入图片描述
其实除了根DNS服务器,是固定的13台,每一层查询回来的服务器信息数量,一般都不止一台,而Local DNS Server,也会向查询回来的,每一台服务器都发送查询请求,那哪台返回的信息快,就用哪台返回的信息,
在这里插入图片描述这样就是一个比较完整的流程了。


http://chatgpt.dhexx.cn/article/br2VdpTX.shtml

相关文章

一文读懂物联网 MQTT 协议之实战篇

一、前言 上一篇我们介绍了 MQTT 协议格式以及相关的特性:一文读懂物联网 MQTT 协议之基础特性篇,这一篇我们就来实战一番,理论得与实践结合,方能吃透 MQTT。 我的那个读者还提到了讲一下 Mosquitto,这是一款开源消息…

基于光流传感器定位和导航的自主飞行无人机

基于光流传感器定位和导航的自主飞行无人机 An Autonomous UAV with an Optical Flow Sensor for Positioning and Navigation 注:翻译水平有限,错误之处,敬请指正! 原文链接:http://cdn.intechopen.com/pdfs/45731.p…

Kubernetes NetworkPolicy:打造更安全的容器运行环境

常见的应用可以分为两大类:Job和Service。Job比较简单,就是一个普通的任务,完成之后就退出,一般不需要暴露对外服务的网络监听端口。Service是指长期运行的进程,监听某个网络端口,其他服务可以通过网络连过…

Drupal远程代码执行漏洞(CVE-2018-7600)

目录 一. 漏洞原理 二. 影响版本 三. 漏洞环境搭建 四. 漏洞复现 一. 漏洞原理 Drupal是一个开源内容管理系统(CMS),全球超过100万个网站(包括政府,电子零售,企业组织,金融机构等&#xff0…

记一次从盲SSRF到RCE

公粽号:黒掌 一个专注于分享网络安全、黑客圈热点、黑客工具技术区博主! 一 前言 发现此漏洞的漏洞赏金计划不允许公开披露,因此我不会直接使用涉及的系统名称。该项目是发布在Hackerone时间最长漏洞奖金最大的项目之一, Hackerone上有很多关…

002.光流传感器(ADNS0380版)使用说明

先放广告,以下是光流传感器购买地址(全网最低价并且唯一提供代码支持的): https://item.taobao.com/item.htm?spma230r.1.14.63.j2eDn3&id541014211123&ns1&abbucket12#detail 如果模块直接使用在APM飞控上请看下文标…

003.关于光流传感器(ADNS3080)调焦问题

关于光流传感器使用官方网址如下: http://ardupilot.org/copter/docs/common-mouse-based-optical-flow-sensor-adns3080.html 微信公众号:嵌入式大玩家 更多精彩文章我将第一时间在微信公众号里面分享,如果不想错过,可以关注我的微信公众号。…

腾讯笔试题——逆序对

这题花了我非常多时间,ac率从10% --> 50% --> 60% --> 70% --> 80% --> 100% ,被这题疯狂支配几个小时! 最关键没有详细的题解可以参考,大数据…

2020秋招腾讯后台笔试题(一)

点击上方蓝字设为星标 下面开始今天的学习~ 这是2020届腾讯秋招的笔试题,其实就是19年九月份的题目,总共五道题,这篇文章写说两道题,都是有关于栈的应用的 01 压缩算法 小Q想要给他的朋友发送一个神秘字符串&#xff0…

腾讯笔试-1

1、什么是运维?什么是游戏运维?1)运维是指大型组织已经建立好的网络软硬件的维护,就是要保证业务的上线与运作的正常,在他运转的过程中,对他进行维护,他集合了网络、系统、数据库、开发、安全、…

腾讯 C++ 笔试/面试题及答案

星标/置顶 公众号👇,硬核文章第一时间送达! 链接 | https://zhuanlan.zhihu.com/p/274473971 题很多,先上题后上答案,便于大家思考 问题点: 1、C和C的特点与区别? 2、C的多态 3、虚函数实现 4、…

腾讯2020校园招聘笔试

输入1: 2 2 1 1 1 1 输出1: 0 输入2: 2 2 1 2 2 1 输出2: 2 import java.util.Scanner; public class Main { public static void main(String[] args) {// TODO Auto-generated method stubScanner scnew Scanner(Syste…

腾讯笔试题20210321

一、链表树 时间限制:C/C 1秒,其他语言 2秒 空间限制:C/C 262144K,其他语言 524288K 64bit IO Format: %lld 题目描述 在牛牛所在的世界,链表是一种二叉树。 这是牛牛第一次见到链表树,他感到十分好奇&a…

腾讯2021批笔试题解

总结:一套算是正常的笔试…算是让大家有点思考了…都没那么一眼秒(除了强烈谴责某T5最短路板子。我还差点没看到这题hhh(( (另一套题的T5) T5 题目大意:给出n个红球,n个黑球&#x…

腾讯笔试题精选一

1.32位机上根据下面的代码,问哪些说法是正确的?() signed char a 0xe0 unsigned int b a; unsigned char c a; A. a>0 && c>0 为真 B.a c 为真 C.b的十六进制表示是:0xfffffe0 D.上面都不对 sig…

腾讯笔试题_20220424

前言 笔试一共五道编程题,满分是100分,时间是两个小时,可以跳题,使用的平台是牛客网,允许跳出界面使用本地IDE。 题目一:构建数字 给定n个长度均为m的数字字符串,从上往下构建成m个新的数&am…

笔试面试(1)腾讯2014校园招聘软件开发类笔试试题

把基本经典的书籍认真看看,那些笔试面试的都不是什么问题。但是,专门的突击和训练还是很有必要的。 好的offer是可以通过充分的准备刷到的。 我们就从各大公司的套题开始刷起吧,中间再穿插一些专题。 今天先看看腾讯的2014年校招的软开笔试题。 考试时长:120分钟 一 不定项…

腾讯近三年软件测试工程师面试笔试题目精选(包含答案)

目录 1、什么是兼容性测试?兼容性测试侧重哪些方面? 2、我现在有个程序,发现在 Windows 上运行得很慢,怎么判别是程序存在问题 还是软硬件系统存在问题? 3、测试的策略有哪些? 4、正交表测试用例设计方法的特点是什么? 5、描述使用 bugzilla 缺…

Dev ChartControl 显示设置百分比

**Dev ChartControl 显示设置百分比**//Y轴设置成百分数显示((XYDiagram)Chart.Diagram).AxisY.Label.TextPattern "{V:0%}";//显示的值为百分数 for (int j 0; j < Chart.Series.Count; j){Series march Chart.Series[j];march.CrosshairLabel…