通过DNS服务器架构解释DNS请求过程

news2024/11/27 3:39:41

在前面的章节,这里,基于PCAP数据包和RFC文档详细介绍了DNS请求和响应的每个字段的含义。但是在现实的网络世界中,DNS请求和响应的数据包是怎么流动的,会经过哪些设备。本文将着重说明一下目前网络空间中DNS请求和响应的流动过程。

当前网络空间中比较常见DNS请求的流程如下:
在这里插入图片描述
图1

  • 当一个域名需要解析的时候,会首先查看本机的DNS缓存,寻找对应的记录。
  • 本机缓存没有记录的时候,会向本地DNS服务器发送请求。在企业级网络架构中,本地服务器往往在企业的内网中。在家庭宽带用户网络中,本地DNS服务器往往是在接入侧网络中。
  • 本地DNS服务器没有记录的时候,会向本地DNS服务器中配置的首选DNS服务器发送请求。在企业级架构中,首选服务器往往是公开的DNS服务器或者一些DNS供应商提供的DNS服务器。在家庭用户网络中,首选服务器往往是不同省份运营商运营的DNS服务器。
  • 当首选DNS服务器没有记录的时候,首选DNS服务器便会向根DNS服务器,顶级的DNS服务器,和权威的DNS服务器发起迭代的查询。也就是轮询这些DNS服务器,直到权威DNS给出最终结果为止。

DNS本机查找

DNS在经过解析之后,会在本地缓存域名和IP的映射关系,当该请求在短期内再次发生的时候,可以直接使用本机DNS缓存记录从而省去一次外部请求的过程。在windows机器上可以通过如下命令查看本地的缓存:

ipconfig /displaydns

在这里插入图片描述
图2
上图可以看到本机DNS记录中存储着 v20.events.data.microsoft.com域名的CNAME和A记录的对应关系,生存时间为437秒。本机缓存最大的问题是DNS记录会快速的过期,因此DNS缓存记录解决的是短期内同样域名再次请求解析问题。

本地DNS请求

家庭宽带用户和企业级用户的本地DNS在没有显示指定的情况下,会像IP地址一样,由运营商或者企业的DHCP服务器进行自动的分配。Windows查看本机DNS服务器配置情况的命令为ipconfig /all,如下:

在这里插入图片描述
图3
因此在本机不存在对应缓存记录的情况下,会像192.168.1.1本地DNS服务器发送DNS请求数据包。上图中子网掩码为255.255.255.0,因此DNS服务器和该主机并不在同一个子网内部,因此DNS数据包会先到达192.168.2.1的默认网关,由默认网关完成对于数据包的转发。

首选DNS请求

本地DNS存储的记录有限,从全网的角度来看,DNS和IP的对应关系也是在时时刻刻的变化。尤其是对于企业级的用户来说,本地的DNS服务器往往只负责公司内部域名的解析,对于外部公共域名的解析往往会由本地的DNS服务器转发到配置好的首选外部DNS服务器进行解析。对于宽带用户,同样的本地DNS服务器会转发到当地运营商指定的首选DNS服务器进行解析。

对于没有预算购买DNS服务的企业来说,往往会选择公开的DNS解析服务器,常见的知名DNS公开服务器为:

  • 国内:114.114.114.114, 114.114.115.115
  • 国外:8.8.8.8,8.8.4.4

更多的关于DNS服务器的列表,详见这里。

当然对于个人用户,也可以不使用默认本地的DNS服务器,直接配置首选的DNS服务器,那么上图中的就不存在本地默认服务器这一环了。

首选DNS服务器和本地DNS服务器的区别在于处理能力,本地的DNS服务器往往负责一片区域或者一个企业内部的DNS解析,但是首选DNS往往负责一个省甚至全国的,乃至全球的DNS解析。因此首选DNS的服务器往往是任播的IP地址,任播IP地址意味着一个公网IP地址会对应多个服务器主机。路由器会根据地理位置就近选择对应的物理主机。关于任播IP地址,详见这里。

迭代查询

迭代查询很简单,以csdn.net为例,对图1中迭代查询解释如下:

  • 如果首选的DNS服务器没有csdn.net对应的IP地址的话,则会向根域名服务器询问能够解析.net顶级域名的IP地址。像com,org,top,edu,gov都是顶级域名,目前顶级域名超过1500个,详见这里。
  • 首选服务器向上一步返回的IP地址,也就是向顶级域名net对应服务器请求返回析csdn.net一级域名对应的DNS服务器,这时候顶级域名服务器net就会返回负责管理csdn.net这个一级域名的权威DNS服务器的IP地址
  • 首选服务器向上一步返回的IP地址,也就是向权威DNS服务器请求解析csdn.net的地址。建立过网站的的小伙伴应该知道,在绑定csdn.net域名对应的IP地址的时候,会选择一个权威的DNS服务器进行DNS解析,这个操作的含义就是将域名和IP地址的关系存储在该权威域名服务器中,这也是为什么权威服务器会有该IP地址的原因。当然对于拥有比较多子域名的企业来说,也可能会建立二级域名DNS服务器来管理自身的域名。

存在的问题

根域名安全

整个IT基础设施这一套的标准发源于美国,因此在DNS这种基础早期建设也是被美国所掌握,像根域名服务器绝大多数都存在美国。因此网络上流传着如果美国切断DNS的供应,会让国家或者公司从互联网消失,也就是无法被访问到。

具体的原因就是根域名掌握着顶级域名DNS服务器的地址,对于DNS迭代查询来说,第一步就是请求根域名服务器给出顶级域名DNS服务器的IP地址,如果根域名不对顶级域名地址进行解析,那么后续的请求也是无法继续的。伊拉克战争期间,就是根域名切断了顶级国家域名的IP访问,导致无法解析对应的国家域名的IP,这是DNS存在的安全问题之一,但是如此大规模的切断顶级域名的供应是属于极端情况。

DNS劫持

除此之外由于DNS目前多为明文传输,DNS请求需要经过本地DNS以及首选DNS,数据包的转发还存在着诸多的路由节点,因此存在着被劫持的可能性,如下:

第一:可以看到一个DNS请求可能会经过本地DNS,首选DNS,根DNS,顶级DNS,权威DNS等多种类型的DNS服务器,理论上这些DNS服务器都有可能会对原始的请求进行过滤,也就是对请求的内容返回不同的DNS解析结果,这也就是通常所说的DNS劫持问题。关于DNS劫持,详见这里。历史上,多个国家都发生过DNS劫持的案例,详见wiki。

第二:除了DNS服务器劫持之外,由于目前多数的DNS请求还是以明文的方式进行传输,也就是导致了DNS存在着中间人攻击劫持的可能性。事实上中间人攻击最多的是HTTP协议,但是目前网络中多数HTTP协议都已经基于TLS进行传输,因此HTTP的中间人攻击情形大为缓解。但是对于仍然以明文传输的DNS协议来说,被中间的Router侦听,篡改的可能性比较大。

更多的关于DNS网络协议内容见在我的专栏《网络攻防协议实战分析》进行详细介绍,详见这里。

本文为CSDN村中少年原创文章,未经允许不得转载,博主链接这里。

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

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

相关文章

Netty实现WebSocket Server是否开启压缩深度分析

是否开启压缩会直接影响与客户端是否能够成功握手。 一、具体分析 通常客户端发起与Websocket连接一般是以下形式。 1)包含6个必要的Header Request Headers Sec-WebSocket-Version: 13 Sec-WebSocket-Key: Nlpc0kiHFjRom5/62lj8bA Connection: Upgrade Upgrade…

IntelliJ IDEA 2023.2——配置说明

IntelliJ IDEA 2023.2——配置说明 IntelliJ IDEA 的官方下载地址 IntelliJ IDEA 官网下载地址 一路上NEXT 到结尾: 继续NEXT 下一步: 界面如下图所示 界面如下图所示 ctrl F 查找 “码猿趣事” 查找【idea99】

算法通关(4)-- 前缀树

前缀数原理和代码 原理 前缀树(Trie树),也称为字典树,是一种用于高效存储和检索字符串的数据结构。它是一种树形结构,能够利用字符串的公共前缀来减少存储空间和查询时间。 现在有“acb”,"cba","ac…

【CSS】“flex: 1“有什么用?

flex 属性的组成 flex 属性是一个复合属性,包含以下三个子属性: flex-grow:决定元素在容器中剩余空间的分配比例。默认值为 0,表示元素不会扩展。当设置为正数时,元素会按照设定比例扩展。flex-shrink:决…

【dvwa靶场:XSS系列】XSS (Stored)低-中-高级别,通关啦

更改name的文本数量限制大小&#xff0c; 其他我们只在name中进行操作 【除了低级可以在message中进行操作】 一、低级low <script>alert("假客套")</script> 二、中级middle 过滤了小写&#xff0c;咱们可以大写 <Script>alert("假客套…

大数据-212 数据挖掘 机器学习理论 - 无监督学习算法 KMeans 基本原理 簇内误差平方和

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

神经网络基础--什么是正向传播??什么是方向传播??

前言 本专栏更新神经网络的一些基础知识&#xff1b;这个是本人初学神经网络做的笔记&#xff0c;仅仅堆正向传播、方向传播就行了了一个讲解&#xff0c;更加系统的讲解&#xff0c;本人后面会更新《李沐动手学习深度学习》&#xff0c;会更有详细讲解;案例代码基于pytorch&a…

【大模型系列】Grounded-VideoLLM(2024.10)

Paper&#xff1a;https://arxiv.org/pdf/2410.03290Github&#xff1a;https://github.com/WHB139426/Grounded-Video-LLMHuggingface&#xff1a;https://huggingface.co/WHB139426/Grounded-Video-LLMAuthor&#xff1a;Haibo Wang et al. 加州大学&#xff0c;复旦 动机&a…

IDEA2024下安装kubernetes插件并配置进行使用

【1】安装插件 其实2024.2.3下默认已经安装了kubernetes插件&#xff0c;如果你发现自己IDEA中没有&#xff0c;在市场里面检索并下载即可。 【2】kubernetes配置 ① 前置工作 首先你要准备一个config文件和一个kubectl.exe 。 config文件类似如下&#xff1a; apiVersi…

onnx-web + yolov8n 在视频流里做推理

顺着我上一篇文章 使用onnxruntime-web 运行yolov8-nano推理 继续说&#xff0c;有朋友在问能不能接入 视频流动&#xff0c;实时去识别物品。 首先使用 getUserMedia 获取摄像头视频流 getUserMedia API 可以访问设备的摄像头和麦克风。你可以使用这个 API 获取视频流&#…

Python练习11

Python日常练习 题目&#xff1a; 编写一个石头剪刀布游戏&#xff0c;该程序要求完成如下功能&#xff1a; (1) 显示游戏规则&#xff0c;提醒用户输入一个1-3的整数或者直接回车。 用户输入回车时游戏结束。 用户输入不合法&#xff08;包括输入的…

航展畅想:从F35机载软件研发来看汽车车载软件研发

两款经典战机的机载软件 F-22和F-35战斗机的研制分别始于1980年代和1990年代末&#xff0c;F-22项目在1981年启动&#xff0c;主要由洛克希德马丁&#xff08;Lockheed Martin&#xff09;和波音公司&#xff08;Boeing&#xff09;合作开发&#xff0c;以满足美军“先进战术战…

实践出真知:MVEL表达式empty的坑

目录标题 背景为什么呢&#xff1f;验证下empty的含义case1case2case3 结论具体解释&#xff1a; 背景 //是否白名单 if(goodInfo.?isWhite ! empty){showList.add(["label": "是否白名单","value":["text":(goodInfo.?isWhite tr…

RPC核心实现原理

目录 一、基本原理 二、详细步骤 三、额外考虑因素 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种计算机通信协议&#xff0c;也是一种用于实现分布式系统中不同节点之间进行通信和调用的技术。其实现原理主要可以分为以下几个步骤&…

Kaggle生物信息学挑战:酶稳定性预测大赛

背景介绍 酶的稳定性是影响其实际应用的关键因素之一。通过定点突变可以改善酶的稳定性,但实验筛选稳定性突变体的成本较高。预测突变对酶稳定性的影响,加速筛选稳定性更高的酶突变体。 概念解释 X 残基&#xff1a;假设 它用 红色表示 &#xff0c; Y 残基&#xff1a;假设…

【开发工具——依赖管理工具——Maven】

1. Maven介绍 Apache Maven 的本质是一个软件项目管理和理解工具。基于项目对象模型 (Project Object Model&#xff0c;POM) 的概念&#xff0c;Maven 可以从一条中心信息管理项目的构建、报告和文档。 对于开发者来说&#xff0c;Maven 的主要作用主要有 3 个&#xff1a; …

vue3+vite搭建脚手架项目本地运行electron桌面应用

1.搭建脚手架项目 搭建Vue3ViteTs脚手架-CSDN博客 2.创建完项目后&#xff0c;安装所需依赖包 npm i vite-plugin-electron electron26.1.0 3.根目录下创建electron/main.ts electron/main.ts /** electron/main.ts */import { app, BrowserWindow } from "electron&qu…

鸿蒙ArkTS中的获取网络数据

一、通过web组件加载网页 在C/S应用程序中&#xff0c;都有网络组件用于加载网页&#xff0c;鸿蒙ArkTS中也有类似的组件。   web组件&#xff0c;用于加载指定的网页&#xff0c;里面有很多的方法可以调用&#xff0c;虽然现在用得比较少&#xff0c;了解还是必须的。   演…

无人车之路径规划篇

无人车的路径规划是指在一定的环境模型基础上&#xff0c;给定无人车起始点和目标点后&#xff0c;按照性能指标规划出一条无碰撞、能安全到达目标点的有效路径。 一、路径规划的重要性 路径规划对于无人车的安全、高效运行至关重要。它不仅能够提高交通效率&#xff0c;减少交…

C语言心型代码解析

方法一 心型极坐标方程 爱心代码你真的理解吗 笛卡尔的心型公式&#xff1a; for (y 1.5; y > -1.5; y - 0.1) for (x -1.5; x < 1.5; x 0.05) 代码里面用了二个for循环&#xff0c;第一个代表y轴&#xff0c;第二个代表x轴 二个增加的单位不同&#xff0c;能使得…