DNS域名解析过程

news/2025/2/10 7:55:01/

目录

    • DNS域名解析的过程
      • 什么是DNS解析
      • 解析过程
      • 递归查询和迭代查询

DNS域名解析的过程

什么是DNS解析

在学习DNS域名解析之前,我们先要弄懂几个前提概念。

  • DNS是一个应用层的协议,和HTTP、SMTP、FTP等这些协议同属于一个级别
  • DNS协议要依赖的传输层协议是UDP,其使用UDP的53号端口。

现在我们明白了DNS协议是在哪一层,有哪些层间依赖,下面我们来粗略了解一下IP地址概念。

IP地址是互联网上每一台计算机唯一的逻辑地址,通过IP地址我们可以实现不同计算机之间的互相通信,每台联网计算机都需要通过IP地址来互相联系和分别。

但是由于IP地址是由一串容易混淆的数字串构成(例如192.168.45.128),人们很难记忆所有计算机的IP地址,这样对于我们日常工作生活访问不同网站是很困难的。

基于这种背景,人们在IP地址的基础上又发展出了一种更容易识别的符号化标识,这种标识由人们自行选择的字母和数字构成,相比IP地址更容易被识别和记忆,逐渐代替IP地址成为互联网用户进行访问互联的主要入口。这种符号化标识就是域名。(例如www.baidu.com)

域名虽然更容易被用户所接受和使用,但是计算机只能识别纯数字构成的IP地址,不能直接读取域名。因此想要达到访问效果,就需要将域名翻译成IP地址。

DNS协议承担了这个翻译责任,这个翻译过程,叫做DNS域名解析

解析过程

当我们在浏览器中输入www.bilibili.com时,DNS解析将会有10个步骤,具体的步骤过程如下

  • 浏览器缓存

首先,浏览器会检查自己的缓存中是否有目标域名对应的IP地址,如果有,解析过程结束,直接使用缓存中的IP地址访问目标网站。

浏览器缓存域名是有限制的,不仅浏览器缓存的大小有限制,而且缓存的时间也有限制,通常情况下为几分钟到几小时不等,域名被缓存的时间限制可以通过TTL属性来设置。这个缓存时间太长或太短都不好,如果时间太长,一旦域名被解析到的IP有变化,会导致被客户端缓存的域名无法解析到变化后的IP地址,以致该域名不能正常解析,这段时间有内有一部分用户无法访问网站;如果设置时间太短,会导致用户每次访问网站都要重新解析一次域名。

  • 操作系统缓存

如果浏览器中没有缓存,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果。

  • 本地DNS服务器查询

前两个过程无法解析的时候,就要用到我们网络配置中的”DNS服务器地址“了。

操作系统会把这个域名发送给这个本地DNS服务器。

大约百分之八十的域名解析到此就结束了,后续的DNS迭代和递归也是由本地DNS服务器负责。

  • 迭代查询
    • 如果本地DNS服务器仍然没有命中,就直接到根DNS服务器请求解析。
    • 根DNS服务器返回给本地DNS域名服务器一个顶级DNS服务器地址,它是国际顶级域名服务器,如.com、.cn、.org等。
    • 本地DNS服务器再向上一步获得的顶级DNS服务器发送解析请求。
    • 接受请求的顶级DNS服务器查找并返回此域名对应的Name Server域名服务器的地址,这个Name Server服务器就是我要访问的网站域名提供商3的服务器,其实该域名解析任务就是由域名提供商的服务器来完成。比如我现在要访问www.bilibili.com,这个域名是从A公司注册获取的,那么A公司上的服务器就保存有这个域名的信息,可以获取到IP地址。
    • Name Server服务器会查询存储的域名和IP的映射关系表,再把查询出来的域名和IP地址等信息,连同一个TTL值返回给本地DNS服务器。
    • 返回该域名对应的IP和TTL值,本地DNS服务器会缓存这个域名和IP的对应关系,缓存时间由TTL控制。
  • 返回结果

本地DNS服务器把解析的结果返回给本地电脑,本地电脑根据TTL值缓存在本地系统缓存中。

域名解析过程结束在实际的DNS解析过程中,可能不止这么多,如Name Server可能有很多级,或者有一个GTM来负载均衡控制,这都有可能影响域名解析过程。

递归查询和迭代查询

从请求主机到本地DNS服务器的查询是递归的,其余的查询是迭代的。


http://www.ppmy.cn/news/1295590.html

相关文章

STM32的在线升级(IAP)实现方法:BOOT+APP原理详解

0 工具准备 Keil uVision5 Cortex M3权威指南(中文) STM32参考手册 1 在线升级(IAP)设计思路 为了实现STM32的在线升级(IAP)功能,通常会将STM32的FLASH划分为BOOT和APP两个部分,BOO…

【通义千问】大模型Qwen GitHub开源工程学习笔记(5)-- 模型的微调【全参数微调】【LoRA方法】【Q-LoRA方法】

摘要: 训练数据的准备 你需要将所有样本放到一个列表中并存入json文件中。每个样本对应一个字典,包含id和conversation,其中后者为一个列表。示例如下所示: [{"id": "identity_0","conversations": [{"from": "user",…

用通俗易懂的方式讲解:使用 Mistral-7B 和 Langchain 搭建基于PDF文件的聊天机器人

在本文中,使用LangChain、HuggingFaceEmbeddings和HuggingFace的Mistral-7B LLM创建一个简单的Python程序,可以从任何pdf文件中回答问题。 一、LangChain简介 LangChain是一个在语言模型之上开发上下文感知应用程序的框架。LangChain使用带prompt和few…

华为端口隔离高级用法经典案例

最终效果: pc4不能ping通pc5,pc5能ping通pc4 pc1不能和pc2、pc3通,但pc2和pc3能互通 vlan batch 2 interface Vlanif1 ip address 10.0.0.254 255.255.255.0 interface Vlanif2 ip address 192.168.2.1 255.255.255.0 interface MEth0/0/1 i…

Vue中Vuex的环境搭建和原理分析及使用

Vuex的环境搭建 Vuex是Vue实现集中式数据管理的Vue的一个插件,集中式可以理解为一个老师给多个学生讲课。 Vue2.0版本的安装: npm i vuex3 使用Vuex需要在store中的index.js引入Vuex和main.js中引入store,目的是让vm和vc都能看到$store。实现多个组件…

Vue知识总结-中

VUE-生命周期 生命周期概述 生命周期也常常被称为生命周期回调函数/生命周期函数/生命周期钩子生命周期是Vue在关键时刻帮我们调用的一些特殊名称的函数生命周期函数的名字不能更改,但函数的具体内容是由我们程序员自己编写的生命周期函数中的this指向是vm或组件实例对象 生命周…

GO语言笔记1-安装与hello world

SDK开发工具包下载 Go语言官网地址:golang.org,无法访问Golang中文社区:首页 - Go语言中文网 - Golang中文社区下载地址:Go下载 - Go语言中文网 - Golang中文社区 尽量去下载稳定版本,根据使用系统下载压缩包格式的安装…

React组件中如何通讯

在React组件中,可以通过props和state来实现组件之间的通信。 父组件向子组件传递数据:父组件可以通过props将数据传递给子组件,在子组件中通过this.props来获取传递的数据。 子组件向父组件传递数据:子组件可以通过props中的一个…