DNS解析过程

news/2024/11/30 18:36:22/

域名解析(获取域名对应的IP的过程)

域名

维基百科解释:
在互联网上,域名是一个字符串,用于标识行政自治、权威或控制的领域。域名通常用于标识通过互联网提供的服务,例如网站、电子邮件服务等。一般来说,域名标识网络域或Internet协议(IP)资源,例如用于访问互联网的个人计算机或服务器计算机。

域名由多个部分组成,每个部分之间用点号(.)分隔。例如,www.example.com这个域名包含了三个部分:www、example和com。其中,com被称为顶级域名(TLD),example被称为二级域名(SLD),而www则是指向该域名下面的具体网络资源(通常是Web服务器)的主机名或子域名。

域名服务器

DNS服务器通常由网络服务提供商或其他组织管理,并分层次结构组织。根域(root domain)是DNS层次结构中的最高级别,下面分布着多个顶级域名(top-level domains,TLD),例如.com、.org、.net等。每个顶级域名下又有二级域名(second-level domain),例如example.com、google.com等。

  • 根域名服务器

指互联网命名系统中的最高层级的DNS服务器,其作用是指向顶级域名服务器,以便查找下一级域名服务器。根域名服务器管理所有顶级域名,如.com、.org、.net等,它们是全球统一的13个根域名服务器,分布在世界各地,并通过Anycast技术提供服务。

  • 顶级域名服务器

是DNS系统中的下一级别,包括国家顶级域名服务器和通用顶级域名服务器。国家顶级域名服务器负责解析该国家的顶级域名,如.cn、.us等;通用顶级域名服务器则负责解析通用顶级域名,例如.com、.org、.net等。每个顶级域名服务器都存储着与其相关的授权域名服务器地址信息。

  • 授权域名服务器(权限域名服务器)

负责一个区的域名服务器,用来保存该区中的所有主机的域名到IP地址的映射。

  • 本地域名服务器

是指用户所在的ISP提供的域名服务器,也称ISP域名服务器。一般默认设置情况下本地DNS为DHCP分配到的运营商的服务器地址。当用户设备发起DNS查询请求时,本地域名服务器负责查询这些请求,并从缓存中返回已缓存的结果,如果没有相关记录,将依次向根域名服务器发送请求,得到初步答案后接着向顶级域名服务器发送另一个请求,然后向权限域名服务器发送最后一个请求,最终得到IP地址作为响应返回给客户端。本地域名服务器通常会缓存最近的DNS查询结果,以便快速响应未来的查询请求。

解析过程

  • 首先,浏览器会检查自己的缓存中是否已经存在URL对应的IP地址。如果有,则跳过后续步骤并直接使用缓存中的 IP 地址。
  • 如果没有缓存,则浏览器会调用域名解析函数库对域名进行解析,以得到此域名对应的IP地址,如果有,则使用查到的IP,否则进入下一步。

Windows 下就是gethostbyname。 在Linux上,除非已安装并运行诸如systemd-resolved,dnsmasq或nscd之类的缓存服务,否则没有操作系统级DNS缓存。

  • 如果系统缓存中也没有,则会查找路由器缓存的DNS记录,没有进入下一步。
  • 如果路由器缓存中也没有该DNS记录,就会检查本地DNS服务器的缓存中是否有该记录,没有接着下一步查询。
  • 如果本地DNS缓存服务器无法找到所需的IP地址,它将根据设置(是否设置转发器)进行查询,最终将解析结果依次返回本地DNS服务器。
    • 如果未使用转发模式(迭代),本地DNS服务器将向“根DNS服务器”发送请求。收到请求后,“根DNS服务器”将确定该域名(.com)的授权管理者,并返回一个负责该顶级域名服务器的IP地址。本地DNS服务器获得IP信息后,将联系该负责域(.com)的服务器。如果该负责域(.com)的服务器无法解析,它将查找管理该域(.com)下一级DNS服务器的地址(baidu.com),并将其传递给本地DNS服务器。本地DNS服务器接收到该地址后,将查找该域(baidu.com)的服务器,重复上述过程,直至找到www.baidu.com主机对应ip。
    • 如果使用转发模式(递归),此DNS服务器将请求转发到上一级DNS服务器,由上一级服务器进行解析。如果上一级服务器无法解析,则会向根DNS发送请求,或把请求转至上上级,以此类推。

DNS查询有两种方式:递归和迭代。DNS客户端设置使用的DNS服务器一般都是递归服务器,它负责全权处理客户端的DNS查询请求,直到返回最终结果。而DNS服务器之间一般采用迭代查询方式。

  • 一旦本地DNS缓存服务器获得了URL对应的IP地址,它会将该信息保存在其缓存中,并将该IP地址返回给用户所使用的浏览器。
  • 浏览器使用该IP地址建立与Web服务器的连接。

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

相关文章

荔枝派Zero(全志V3S)开启 SSH 实现远程连接和文件传输

文章目录 前言一、配置 buildroot二、编译 buildroot三、拷贝到 SD 卡四、测试 ssh1、修改 /etc/ssh/sshd_config 文件2、运行 /usr/sbin/sshd3、使用 SecureCRT 测试4、使用 SecureFx 测试 前言 本文将在 Buildroot 根文件系统开启 ssh 功能。 一、配置 buildroot 1、在 bui…

深入浅出PyTorch:从零开始入门人工智能

一、什么是PyTorch? PyTorch是由Facebook AI研究院开发的Python深度学习框架,是目前最流行的深度学习框架之一。它通过动态计算图的方式实现了神经网络的构建和优化,同时能够高效地利用GPU进行计算加速。PyTorch具有易用、灵活和高效等特点&…

13. Pod 从入门到深入理解(二)

本章讲解知识点 Pod 容器共享 VolumeConfigMapSecretDownward APIEmptyDir VolumeHostPath Volume1. Pod 容器共享 Volume 1.1. Volume 的背景及需要解决的问题 存储是必不可少的,对于服务运行产生的日志、数据,必须有一个地方进行保存,但是我们的容器每一次重启都是“恢复…

初识vue-模板

目录 模板语法 模板插值 指令 条件渲染(v-if ;v-show) 列表循环(v-for) ref JSX(render渲染) 条件渲染 列表渲染 八皇后框架-背景格(循环) 模板语法 Vue.js使用了…

nestJS入门cli 创建项目以及集成swagger和mysql

nestJs 1. 简介 介绍 NestJS NestJS 是一个基于 TypeScript 的渐进式 Node.js 框架,它结合了 OOP、FP 和 FRP 的元素,以提供一种现代且可扩展的开发体验。NestJS 建立在 Express.js 之上,但是提供了更加抽象和模块化的方式来编写应用程序。…

为了做低代码平台,这些年我们对.NET的DataGridView做的那些扩展

我们的低代码开发平台从一开始决定做的时候,就追求未来能够支持多种类型的客户端,目前支持Winform,Web,H5,FlutterAPP,当然了,未来也有可能会随着实际的需要淘汰掉一些客户端的。 为了系统更易…

springboot+vue垃圾分类网站(源码+文档)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的垃圾分类网站。项目源码以及部署相关请联系风歌,文末附上联系信息 。 💕💕作者:风歌&a…

超细Redis(二)

五大数据类型 官方文档: 翻译: Redis 是一个开源(BSD 许可)内存数据结构存储系统,用作数据库、缓存、消息代理和流引擎。Redis 提供数据结构,例如字符串、哈希、列表、集、带有范围查询的排序集、位图、超…