通解DNS(上)

简介:

DNS作为一门基础的计算机网络基础架构应用已经有很多年了,今天我来向大家总结和梳理一下关于DNS中的一些知识。

本文阐述的:DNS用的一些原理和数据流

本文不阐述的:DNS服务器的部署和配置

     在我撰写这篇文章特意参考了一下鸟哥的私房菜《LINUX服务器架设篇-DNS服务器》和戴有炜的《WINDOWS SERVER 2008 网络专业指南-解析DNS主机名》发现了一个特别有意思的现场,在LINUX平台下的DNS更多描述的是公网的DNS,在WINDOWS平台下更多描述的是基于私网的DNS,为了在后面做更好的诠释,我在文中可能会结合LINUX平台&WINDOWS平台,可能对于一些常年在一个平台中而很少使用另一个平台的朋友优点不适应,但是为了更好的描述一些知识,只能牺牲少部分人的习惯了。


一、C/S模式的DNS


对于计算机网络应用,一般都会有三种模式进行通信,一种是无服务器概念的对等模式 (图1.1)(如WINDOWS下的工作站模式)一种是基于B/S(浏览器/服务器端)的应用模式(图1.2),而最后一种就是基于C/S (图1.3)(客户端/服务器端)的应用模式了。

wKiom1OUR0iCeawqAADyNHU8wzw607.jpg

(图1.1 对等模式)

 

wKioL1OURxvD9IwDAACww8BsR0k773.jpg

(图1.2 B/S模式)

 

wKiom1OUR0mjTUEYAADTdHtr7QY575.jpg

(图1.3 C/S模式)

 无疑,DNS服务属于第三种模式。只是为了方便广大用户,无论是WIN还是LINUX,DNS的CLIENT(客户端)都已经默认安装到操作系统中了,我们只需要进行设置即可。而DNS的SERVER端需要单独安装。

       之所以强调DNS的C/S模式,是为了让大家有这个概念,在排查DNS问题的时候除了考虑到DNS SERVER的问题时,也需要考虑DNS的CLIENT是否有问题(尽管根据我的个人经验,CLIENT端出现问题多半是配置的错误)另外DNS的S端也有些情况下也会转变成C端(这个在后面进行阐述)


提供查询请求的DNS客户端被称为解析器(resolver),而提供数据的DNS服务器称为名称服务器(name server)


这个时候你是不是突然明白了为什么LINUX的DNS客户端配置文件是/etc/resolv.conf了吧。


二、内部DNS和公网DNS

 其实刚才已经在文中开头说了一个有意思的现象,在很多WINDOWS平台的书籍和文章中更多的会描述的是内部的DNS,而LINUX平台的相关数据和文章搭建的更多的是公网的DNS。其中使用哪个平台下的DNS服务器都可以搭建内网和公网的DNS,但是你必须有内部DNS和公网DNS的概念,见下图2.1

wKiom1OUSDWCJX8TAAGO6DLese8869.jpg

(图2.1)

      内部DNS主要解析内部网络的主机地址,关于此处内网的定义就是计算机网络中的局域网,而公网DNS主要解析公网上的服务器的主机地址,公网我们可以理解为INTERNET网。在这里着重强调区别内公网的DNS是建议不要将公网和内网的DNS放在一起。无论是从安全的角度还是从业务逻辑上。内部的DNS尽量只解析内网的主机地址,如果有解析公网主机地址的需求,可以使用转发、唯缓存的方法。公网的DNS是面向所有解析公网主机地址的请求,一般用于作为权威应答的服务器。关于上文提到的几个概念,我会在下面陆续阐述。内部的DNS的实例很多人经常使用,就是作为活动目录域的基础架构。因为我们不是在阐述DNS与ADDS的关系,所以在并不会在此方面做过多的讨论。但是只要安装和部署过ADDS的人就会知道,ADDS需要DNS来定位域控和域成员主机。


三、DNS递归查询和迭代查询

关于DNS的这两种查询,网上已经有很多类似的文章了,我也找了一篇解释的相对比较全面的文章:http://zhumeng8337797.blog.163.com/blog/static/10076891420110694312990/

在这里我想补充2点:


1、关于本地DNS 我不知道有没有人会误解,文中提到的本地DNS其实就是你在DNS客户端配置的DNS,如果它在公网,那么就是一台公网DNS,如果他是你在内部部署一台DNS服务器,那么它就是一台内部DNS


2、关于迭代查询,我不知道一些人有没有过如此的疑问,当本地DNS在缓存中没有记录的时候会向13台根服务器提供查询请求,那么13台根服务器及.com顶级域服务器是通过什么来定位到如163.com是被哪个DNS服务器查询并返回解析主机记录的呢?答案是通过NS记录的权威服务器来完成的。下图3.1是我虚构的IP地址和上级授权机构,但是迭代查询的基本过程是这样的

wKioL1OUSDOS_8M0AANNeslT7Vo324.jpg

(图3.1)

实际过程要比这个还要复杂,但总的来说,当公网查询解析主机记录的时候,从根服务器可以查到它向下授权服务器的主机地址通过(NS记录)并要记录知道向下授权服务器的IP地址(通过A记录)通过逐级向下查找授权,最后通过定位权威服务器查找自己正向解析记录ZONE,给出最终的IP地址。

下面我们通过DIG看一下www.51cto.com的解析过程图3.2

wKiom1OUSIrC8zapAARBf7GMCTw032.jpg

(图3.2)

3、关于递归查询 由于一般在DNS的CLIENT设置2个DNS-SERVER地址,根据递归查询的法则,名称解析服务器端要么返回正确的主机地址,要么返回错误的地址,要么说没有找到,除非在第1台DNS服务器端没有应答的时候,才会采用第2台DNS服务器做解析,见图3.3

wKioL1OUSJSC0i6bAAGaSX_zwoM059.jpg

(图3.3)

我故意写错了第1台DNS服务器的IP地址(8.8.8.9)然后使用DIG工具查询解析的时候,第二台DNS服务器(8.8.4.4)做出了应答。


四、DNS服务器三大功能:权威服务器(name server)、转发器(FORWARDING)、唯缓存服务器(CACHING-ONLY)


无论是WINDOWS平台下的DNS服务器,还是LINUX平台下的BIND,都会有这三大功能,只是在中文定义上略有差别。我们通过公网DNS和内部DNS两种情况下来阐述这三大功能。


从公网DNS服务器上来看,图3.1右下角的服务器就是一台权威服务器,权威服务器通过NS名称服务器记录资源表明z00w00.com这个区域里面的主机记录有它负责解析,当然DNS服务器需要就有正向解析的ZONE或反向解析的ZONE。而权威服务器如果想提供给解析器(DNS客户端)返回所管理域(如z00w00.com)下www.z00w00.com的IP地址,就必须得到其上级解析机构(一般是你的域名提供商)的授权(购买、域名备案)


而很多公网上的本地DNS由于并不负责管理任何区域的DNS服务器,而只是缓存DNS查询结果,所以被称为唯缓存服务器。比如很多ISP和ICP提供的DNS服务器。唯缓存服务器通过HINT或叫根提示(记录.的ZONE)像图3.1一样迭代查询返回解析记录,并在自己缓存中保存一份。在缓存中的记录失效前,再向其提交解析请求,都会从缓存中提取记录返回给客户端(解析器)而避免了以一次次迭代查询的低效率。


我们可以通过NSLOOKUP工具查看唯缓存服务器作为非权威服务器的查询结果,图4.1

wKioL1OUSN6hv2MgAACdnO0f_gA315.jpg

(图4.1)

从内网DNS服务器上看,内部DNS如果是直接负责解析自己管理的区域也就是内部的权威服务器,如果需要解析外部(公网服务器)时就需要像唯缓存服务器一样像根提示提交查询了。如图4.2


wKioL1OUSU7Suv9jAALQyU2Yyhs240.jpg

(图4.2)

当然内部DNS直接提交查询请求给根提示服务器的时候由于网络的问题,经常会较慢(毕竟根服务器都在国外),所以为了提高查询效率,会设置转发器如图4.3

wKioL1OUSY7Cl9meAANh_HhKIAs499.jpg

(图4.3)

内部DNS设置转发器地址为放置在外网的转发器,转发服务器像唯缓存服务器一样提供公网DNS解析,这样就提高了解析的效率。有时候为了安全,转发服务器可能也放置在内网。



五、DNS的TCP/UDP 53端口


当服务启动的时候,都会开一个监听端口,比如WWW开通的是TCP的80,而DNS比较有意思,它同时开启了TCP的53和UDP的53端口

默认情况下:从C端到S端的查询使用UDP的53,但是有一种情况下会使用TCP的53端口。由于UDP模式下报文长度被限制在512个字节以下,如果DNS报文首部中的标志字段TC为1时([QR][opcode][AA][TC][RD][RA][(zone)][rcode])表示超过512字节,然后DNS 客户端会使用TCP重发原来的查询请求TCP允许报文长度超过512字节。既然TCP能将data stream分成多个segment,它就能用更多的segment来传送任意长度的数据。那为什么DNS的回应报文会那么长呢?有一种情况是:返回的域名对应了十几条A记录(一个域名绑定多个IP)另一个情况是主/辅DNS之间的区域传送会使用TCP,因为传输的是一个地域的数据,所以数据量要大的多。关于区域复制,我们下文继续描述

 



本文转自 z00w00 51CTO博客,原文链接:http://blog.51cto.com/z00w00/1423708,如需转载请自行联系原作者

相关文章
|
前端开发
webpack如何设置devServer启动项目为https协议
webpack如何设置devServer启动项目为https协议
2051 0
|
数据可视化 测试技术
一文了解软件测试规范
软件测试规范是测试工作的依据和准则,在进行软件测试时,应在相关国标文件的要求和指导下完成测试工作,这样可以从根本上保证软件测试工作的质量,进而提升软件产品的质量。 一个完整的软件测试规范应该包括对规范本身的详细说明,例如规范的目的、范围、文档结构、词汇表、参考信息、可追溯性、方针、过程/规范、指南、模板、检查表、培训、工具、参考资料等。
1533 0
一文了解软件测试规范
|
存储 监控 druid
Druid、ClickHouse、Doris、StarRocks 的区别与分析
本文对比了 Druid、ClickHouse、Doris 和 StarRocks 四款大数据分析引擎。它们均为 OLAP 引擎,采用列式存储和分布式架构,适用于海量数据分析。Druid 擅长实时分析与高并发查询;ClickHouse 以超高性能著称,适合复杂查询;Doris 提供易用的 SQL 接口,性能均衡;StarRocks 则以其极速查询和实时更新能力脱颖而出。各引擎在数据模型、查询性能、数据更新和存储方面存在差异,适用于不同的业务场景。选择时需根据具体需求综合考虑。
6459 20
|
Web App开发 数据可视化 前端开发
Pixi入门第一章:绘制一个小精灵
这篇文章是关于Pixi.js的入门教程第一部分,指导读者如何创建并显示一个基本的2D精灵,适用于开始学习Pixi.js进行2D图形开发的初学者。
451 0
Pixi入门第一章:绘制一个小精灵
|
敏捷开发 数据可视化 数据挖掘
高效的投标工作计划管理:五大看板工具使用技巧与推荐
随着全球竞争加剧,投标工作变得愈发复杂。传统方法难以满足现代需求,看板工具因此应运而生,通过可视化管理、任务分配和协作功能,显著提升工作效率和管理水平。本文推荐2024年几款优秀看板工具,如板栗看板、Taiga、Targetprocess、ZenHub和Miro,分别从软件简介、功能亮点、适用行业等方面进行了全面评测,旨在帮助企业高效完成投标工作。
高效的投标工作计划管理:五大看板工具使用技巧与推荐
|
存储 Java 数据库
Spring Boot 优雅实现多租户架构
本文详细介绍如何使用Spring Boot和Spring Cloud实现多租户架构。多租户架构允许多个租户共用一个应用,各自拥有独立资源和数据。其优势包括满足个性化需求、降低成本、复用代码以及增强可扩展性。文中探讨了架构选型、数据库设计、应用部署及租户管理等内容,并提供了具体实现步骤和技术细节。适用于SaaS应用和多租户云服务等场景。
|
网络协议 JavaScript 数据安全/隐私保护
深入浅出:使用WebSocket打造实时Web应用
【10月更文挑战第2天】本文介绍了WebSocket的基本概念、工作原理以及如何在项目中实现WebSocket通信。希望通过本文,读者能够掌握WebSocket,并考虑在自己的项目中实现实时功能。
|
存储 弹性计算 运维
阿里云容器服务Kubernetes版(ACK)部署与管理体验评测
阿里云容器服务Kubernetes版(ACK)是一个功能全面的托管Kubernetes服务,它为企业提供了快速、灵活的云上应用管理能力。
493 2
|
JSON API 数据格式
如何利用API接口获取电商平台数据?
作为产品经理,我们需要了解电商平台的数据情况,以便更好地制定产品策略和优化用户体验。而利用API接口获取电商平台数据是一种高效、便捷的方式。本文将从以下几个方面介绍如何利用API接口获取电商平台数据。