浅谈DNS解析

news2024/11/28 14:48:43

DNS介绍

IP是计算机里的地址簿,但是IP是由一串数字组成,我们的大脑很难记住,所以就需要定义一个符合人类记忆规则的地址,而这就是我们现在常用的网站域名,域名就是我们和计算机作为地址沟通的桥梁, 虽然我们在浏览器里输入的是一串带有人类语义的英文字母符,但是计算机最终还是会解析成自己可识别的IP地址,而这个过程就是域名解析,而负责把域名解析成IP的就是DNS服务。

当然域名解析的功能不仅仅是方便记忆,从程序设计的角度也隔离了因为IP变化带来的不便性,避免了因为系统迁移更换网络等因素导致的IP变化。另外一方面从系统架构的角度,可以在域名上配置多个系统IP,把多个客户端的请求解析到不同的IP地址上,从而实现系统分流的目的。

我们用域名访问网站第一步要做的就是域名解析,如果全世界的域名解析都向同一个服务器请求很显然这是不现实的,因为DNS解析不仅仅是请求量大,而且如果全世界域名和IP关系数据都存在一个地方,这个数据量也是巨大的。 所以DNS解析的设计就必须考虑其本身的性能和可用性问题。

DNS解析服务的设计充分的体现了分流的思想。 首先是把域名数据进行了纵向的拆分,DNS解析服务器分为根域名服务器、顶级域名服务器、权威域名服务器多个层次,每个层次只负责自己那部分域名数据的解析,通过分层的方式把域名数据拆分出来,从而避免由一个服务器保存所有的域名数据。

然后横向层DNS服务器都做了集群,就根域名服务器就有上千台域名服务器分布在网络中,不仅把流量分摊下来,也避免了解析某一个DNS服务器出现问题而导致域名无法提供服务。

DNS分层设计

整个域名解析过程就像公司岗位的等级分工,总经理知道有哪些经理分别负责那一块,经理只知道自己部门的员工分别负责那一块,根域名服务器就是总经理,它只知道所有顶级域名(经理)的服务器地址,而顶级域名则只知道域名对应的权威域名服务器(员工)地址,在公司里我们都知道,最终负责做事的都是员工,所以每一个域名解析请求其实最终都会落到权威服务器上。

分层后的域名解析过程

第一步:域名请求首先会请求根域名服务器,根域名服务器会根据域名的后缀(.com,.org,.cn)返回对应的顶级域名服务器地址。

第二步:得到顶级域名服务器地址后,然后向该地址发出域名解析请求,顶级域名服务器再返回该域名对应的权威域名服务器地址。

第三步: 得到权威域名解析服务器地址后,再向该地址发出域名解析请求,权威服务器最终响应对应域名的IP地址。

本地DNS缓存(Host)

域名解析服务经过分层分流后,可用性和可靠性都很高了,但是作为客户端来说如果我每一个请求,都要向域名服务器去请求解析IP地址,那也太影响网站访问性能了,所以就在客户端就在自己的本地加了一层缓存,每次域名请求都会先从自己的本地缓存查询有没有该域名的缓存,有的话直接从缓存中获取,没有的话再从DNS服务器请求。

DNS代理缓存(本地DNS服务器)

客户端本地缓存只能作用于一台计算机,这些缓存数据是无法共享的,那么有没有一种更大范围的缓存呢,所以就有了本地DNS服务器,本地DNS服务器作为客户端与DNS服务器中间的一层代理,同一个网络运行商的域名解析请求都会发向本地DNS服务器,然后由本地DNS服务器与 全球的DNS域名解析服务器去交互,本地DNS服务器会把解析到的域名对应IP缓存起来,当下次有同样的域名解析请求时则世界返回缓存里的数据。

如上图,现在我们已经得到了DNS域名解析的最总流程了,这个解析过程会经过了本地缓存、本地DNS服务器、根域名服务器、顶级域名服务器、权威域名服务器。从DNS的解析原理和流程中我们也可以学习到一个高性能高可用的系统的设计思想,从DNS设计我们可以学习到如何通过多级分流、多级缓存的系统设计来提升系统的性能和可用性。

DNS实现负载均衡

在DNS服务器里,我们配置的域名和IP映射关系是可以随便修改的,从这个角度来看,域名不仅仅有便于记忆的作用,而且它隔离对用户也隔离了变化,因为服务器IP有可能经常变动,而有了域名之后如果服务器变化了就只需要修改域名对应IP的映射即可。

另外一个方面,一个域名也可以配置多个IP, 不同的客户端请求DNS服务器可以解析到不同的IP,那从这个方面来看,那这就可以作为一种负载均衡机制,可以通过域名映射来实现流量分发,另外当一个IP对应的服务器故障时,我们可以通过删除对应的IP映射即可,新的域名解析就获取不到发生故障的IP了,从这个角度来看也保证了系统的可用性。

还有一种更智能的映射方式,我们可以在本地DNS服务器实现一些特殊的程序功能(内部负载均衡 SLB),通过SLB处理一些智能化的功能,在SLB里通过识别客户端的一些特性,实现智能的域名解析,比如不同地区的客户端,我们就返回给离客户端最近的IP。


参考文档:

分流篇-DNS分流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/166505.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

物流企业如何确保网络安全?

随着网上购物的发展,人们的日常生活越来越离不开物流企业的服务了。而且在一些企业的供应链中,物流运输也是非常重要的一环节。与此同时,伴随着供应链数字化,透明度、速度和成本优势增加了公司对技术的兴趣。物流企业也更喜欢使用…

开放式基金净值实时数据 API 数据接口

开放式基金净值实时数据 API 数据接口 实时净值,全量实时数据,包含净值与增长率。 1. 产品功能 支持所有开放式基金净值数据查询;实时数据,包含实时净值与增长率信息,16:00 ~ 23:00 更新当日数据;包含前一…

C语言模拟实现库函数strstr

传入两个地址,第一个是母串首地址,第二个是子串首地址,判断是否是子串,如果不是,返回NULL,如果是,返回母串中第一次出现子串的首地址。 代码如下: #define _CRT_SECURE_NO_WARNING…

Android | Activity

Android Activity Activity 概念 Activity 是一种包含用户界面、主要用于与用户进行交互的Android应用组件。一个应用程序可以包含零个或多个 Activity 。 Activity 生命周期 Activity 类中定义了7个回调方法,覆盖了 Activity 生命周期的每一个环节。 onCreate(…

力扣sql基础篇(九)

力扣sql基础篇(九) 1 每位经理的下属员工数量 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # 如果是得出来每组都是一个值,就可以在SELECT子句中写非分组字段 # e1.reports_to IS NOT NULL是为了确保是员工,通过员工去找经理 SELECT e2.employee_…

第二章.线性回归以及非线性回归—标准方程法

第二章.线性回归以及非线性回归 2.8 标准方程法 1.公式 1).代价函数: 2).累加平方和用矩阵表示: 2.对(𝑦 − 𝑋𝑤)𝑇(𝑦 − 𝑋𝑤)求导的两种布局方式: 1).分子…

【初阶数据结构】——写了将近 5 万字,终于把 二叉树 初阶的内容讲清楚了

文章目录前言1. 树的概念及结构1.1 树的概念1.2 树与非树1.3 树的相关概念1.4 树的表示1.5 树在实际中的运用(表示文件系统的目录树结构)2. 二叉树概念及结构2.1 概念2.2 现实中的二叉树2.3 特殊的二叉树2.3.1 满二叉树2.3.1 完全二叉树2.4 二叉树的性质…

2022年Tesla技术分享

Autopilot:允许车辆保持车道,跟随前车,弯道减速,等等,处理从停车场到城市街道,再到高速公路的所有驾驶过程。 一、硬件: 8个120W像素的摄像头,每秒36帧,360度空间&#…

牛客竞赛每日俩题 - 动态规划4

目录 经典dp1(最长公共序列) 经典dp2(最长上升子序列 ) 经典dp(最长公共序列) 最长公共子序列__牛客网 解析: 有两个字符串T和S,S的长度为n T的长度为m 状态:f[i][j…

C# LINQ查询

一、什么是LINQ LINQ是Language-Integrated Query的缩写&#xff0c;它可以视为一组语言和框架特性的集合。LINQ可以对本地对象集合或远程数据源进行结构化的类型安全的查询操作。LINQ支持查询任何实现了IEnumerable<T>接口的集合类型&#xff0c;无论是数组、列表还是X…

oracle12c数据库安装(静默安装

写在前面 本教程是在Linux下安装oracle12c数据库&#xff0c;由于在有些情况下并没有图形化安装界面&#xff0c;所以这里介绍在linux下通用的安装方式&#xff1a;静默安装&#xff0c;通俗的说就是在linux的命令行窗口安装。 关闭防火墙 systemctl disable firewalld sy…

LeetCode 300. 最长递增子序列

&#x1f308;&#x1f308;&#x1f604;&#x1f604; 欢迎来到茶色岛独家岛屿&#xff0c;本期将为大家揭晓LeetCode 300. 最长递增子序列&#xff0c;做好准备了么&#xff0c;那么开始吧。 &#x1f332;&#x1f332;&#x1f434;&#x1f434; 一、题目名称 LeetCo…

Spring之AOP简单讲解

目录 一&#xff1a;基本概念 二&#xff1a;案例&#xff1a;模拟AOP的基础代码 三&#xff1a;AOP相关概念 四&#xff1a;AOP入门案例思路分析 五&#xff1a;AOP工作流程 六&#xff1a;AOP核心概念 七&#xff1a;AOP切入点表达式 八&#xff1a;xml方式AOP快速入门…

动态内存分配/管理

目录 1、为什么要有动态内存分配 2、动态内存函数介绍 1、malloc 2、free 3、calloc ​编辑 4、realloc 3、动态内存常见的错误 4、动态内存开辟相关好题 5、c/c程序内存开辟示意图 int a, int arr[10] 是固定地向内存申请连续的一块空间&#xff0c;但不能变长或变…

快速理解机器学习、深度学习与自然语言处理

这篇文章对机器学习、深度学习、自然语言处理进行了简单的介绍&#xff0c;适合快速学习NLP与AI、ML和DL的关系。 机器学习、深度学习、自然语言处理的关系 机器学习、深度学习、自然语言处理的关系如图所示 1 机器学习&#xff08;Machine Learning&#xff09; 机器学习…

python中的设计模式:单例模式、工厂模式

目录 一.设计模式 二.单例模式 二.工厂模式 优点: 总结 一.设计模式 设计模式是一种编程套路&#xff0c;可以极大的方便程序的开发。 最常见、最经典的设计模式,就是我们所学习的面向对象了。 除了面向对象外,在编程中也有很多既定的套路可以方便开发&#xff0c;我们称…

《Linux Shell脚本攻略》学习笔记-第三章

3.1 简介 Unix为所有的设备和系统功能提供了文件形式的借口。可以通过这些特殊文件直接访问设备以及系统功能。 3.2 生成任意大小的文件 创建特定大小的文件最简单的方法就是利用dd命令。dd命令会克隆给定的输出内容&#xff0c;然后将一模一样的一份副本写入输出。 if表示输入…

个人总结:Mysql知识图谱

使用思维导图工具对mysql使用&#xff0c;进行知识总结。着重说下explanid SELECT识别符。这是SELECT查询序列号。这个不重要,查询序号即为sql语句执行的顺序select_type select类型table 输出的行所用的表&#xff0c;这个参数显而易见&#xff0c;容易理解partitions type 连…

Android系统启动(四) — Launcher 启动过程

1 Launcher 概述 系统启动的最后一步是启动一个应用程序来显示系统中已经安装的应用程序&#xff0c;这个应用程序就叫做 Launcher。Launcher 在启动过程中会请求 PackageManagerService 返回系统中已经安装的应用程序信息&#xff0c;并将这些信息封装成一个快捷图标列表显示…

阿里系-淘宝接口抓取及相关问题

阿里系-淘宝接口抓取 一、安装charlse抓包工具 官方下载地址 安装证书 二、安装xposed hook框架 Xponsed简介 具体安装步骤 三、安装模块 关闭阿里系ssl验证 开启http模式 支持支付宝、淘宝、淘宝直播各个接口抓取 四、效果如下 接下去一段时间更新阿里系相关接口 文章目录 一、…