阶段1--域名服务器

目录

一、域名服务器

1.1.背景及由来

思考1:为什么不使用IP?

1.2.域名的分类

思考2:为什么上面举的例子中,华为、百度、腾讯的域名都是.com结尾?

国际通用顶级域名

国家顶级域名

1.3.域名的命名空间

1.4.域名服务器的种类

1.5.域名解析的流程

1.2.1.递归式(纯理论式,不用)

1.2.2.迭代式(特殊场景使用)

1.2.3.递归+迭代(主流)

二、DNS解析示例

2.1.环境准备,准备两台同网段的设备

2.2.本地域名解析的"优先级最高规则"(hosts文件)


一、域名服务器

1.1.背景及由来

对于联网的设备,几乎每一台设备都有一个自己的IP,设备之间就可以通过TCP/IP来进行通信。

试想,一般的,我们访问一个网站,最常见的访问方式是什么,如直接在浏览器的地址栏中输入www.baidu.com就可直达百度的界面。那为什么不是IP地址的形式?并且为什么可以使用这个地址来访问对应的网站来获取服务呢?访问的www.baidu.com又是什么?

思考1:为什么不使用IP?

试想,若每一次访问一个网站,都需要输入对应的IP地址?那我问你,你记得住吗?又能记住几个?又能记住多久?

所以,针对方便人脑记忆,就诞生了将"记忆IP"向"记忆域名"的过程(但IP地址访问的方式并没有被抛弃,因为有些场景使用IP地址更方便,如对设备的带外管理系统,专网服务,这些通常还是会使用IP来进行访问,域名首先是需要申请才能进行使用,并且一般大型企业才会专门开通域名服务)。人们只需要记住,IP转换的一串地址,就能直接进行访问了,并且这串地址通常还比较见名知意。如:华为(huawei.com)、百度(baidu.com)、腾讯(tencent.com)等等。**所以域名系统DNS(Domain Name System)的诞生源于IP地址难以记忆的问题。**其作用就是为了实现名字解析(例如将主机名解析为IP)(分布式,层次性)。

1.2.域名的分类

思考2:为什么上面举的例子中,华为、百度、腾讯的域名都是.com结尾?

这就不得不提,域名(英语:Domain Name)本就是由一串用点分隔的名字组成的互联网上某一台计算机或计算机组的名称,系统中的每一层叫做一个域,每个域用一个点分开。用于在数据传输时对计算机的定位标识(有时也指地理位置)。

域名的划分层级:

|--------------------------------------|-------------------------------------------------------|
| 域名的类型 | 说明 |
| . | 被定义为根域,是一切域名的起始点 |
| .com .net .org .cn等 | 由根域引申出来的域名,又被称之为顶级域名,顶级域名代表了一个域名的目的和类型,也是识别关联网站的某个因素。 |
| .baidu.com .tencent.com .huawei.com等 | 顶级域名的基础上,再次进行引申发展出来的域名,一些域名注册机构使用二级域名来表示注册的具体实体。 |
| 主机 | 主机属于最低层域名,处于域名树的叶子端,代表各类主机提供的服务。例如:www、mail、ftp |

顶级域名的命名一样有两种方式。一是以机构命名,一样取3个字母,如com、edu等;二是以地理命名,一样取两个字母,如cn等。

国际通用顶级域名

|-------------------|--------|
| 顶级域名 | 组织 |
| com(commerce) | 商业组织 |
| edu(educate) | 教育机构 |
| gov(government) | 政府部门 |
| int(Internet) | 国际机构 |
| mil(military) | 军事部门 |
| net(network) | 网络组织 |
| org(organization) | 其他组织 |

国家顶级域名

例如:​cn(中国大陆)、de(德国)、eu(欧盟)、jp(日本)、uk(英国)、us(美国)。

1.3.域名的命名空间

DNS系统属于分层式命名系统,即采用的命名方法是层次树状结构。连接在Internets上的主机或路由器都有一个唯一的层次结构名,即域名(Domain Name)。域名可以由若干个部分组成,每个部分代表不同级别的域名并使用"."号分开。完整的结构:主机. ... .三级域名.二级域名.顶级域名.

eg:https://www.baidu.com

https://:协议

www:主机

.baidu:二级域名

.com:顶级域名

.:根域名

理论上这个www.baidu.com.这个是能被访问的,如下:

但是当直接使用浏览器进行访问的时候,却报出此站点的连接不安全,这是为啥?

把根域.取消了之后,又能进行访问了

在域名末尾加上根域点 " . " 理论能访问,但浏览器不能访问。主要有以下几个关键原因:

  1. 浏览器和操作系统的自动处理:

当你输入 www.baidu.com(没有点)时,浏览器和操作系统知道这不是一个完全合格域名------全称(FULL Qulified Domain Name) 。它们会自动尝试为你"补全"这个域名。它们会在后面添加本地配置的搜索域后缀。

例如,你的网络设置可能指定了搜索域后缀 example.com。当你输入 www.baidu.com 时,系统可能会先尝试查找 www.baidu.com.example.com.(当然这个不存在),然后尝试查找 www.baidu.com.(真正的 FQDN)。最终,它成功解析到正确的 FQDN www.baidu.com. 并连接。

当你直接输入 www.baidu.com.(有点)时,浏览器和操作系统会认为这是一个已经完整的 FQDN,不再进行任何搜索域后缀的添加。理论上,这应该是最直接、最正确的查询方式。

  1. 问题核心:证书不匹配和连接失败

虽然 www.baidu.com. 理论上能正确解析到 IP 地址(DNS 层面),但问题通常发生在建立连接之后。SSL/TLS 证书问题: 现代网站几乎都使用 HTTPS。服务器的 SSL/TLS 证书是为了保护一个特定的域名(如 www.baidu.com)颁发的。证书的 Common Name 或 Subject Alternative Names 中注册的是 www.baidu.combaidu.com,而不是 www.baidu.com.。

当你访问 https://www.baidu.com. 时,浏览器会检查服务器提供的证书。浏览器期望证书是为它正在访问的主机名(www.baidu.com.)颁发的。但服务器证书上的名字是 www.baidu.com(没有末尾的点)。这两个名字在严格的证书验证规则下被认为是不同的。

因此,浏览器会触发一个严重的安全警告(NET::ERR_CERT_COMMON_NAME_INVALID),认为连接不安全(因为域名不匹配),并阻止你继续访问,以防范潜在的"中间人攻击"。用户通常看到的是"您的连接不是私密连接"或类似错误,而不是简单的"找不到页面"。

  1. Web 服务器配置:

即使证书问题不存在(比如是 HTTP 网站,但这在主流网站中很少见了),Web 服务器(如 Nginx, Apache)通常配置为监听特定的主机名 www.baidu.com

当请求到达服务器时,服务器检查请求头中的 Host 字段。对于 www.baidu.com. 的请求,Host 头通常是 www.baidu.com.(带点)。服务器配置中定义的虚拟主机通常是 www.baidu.com(不带点)。

服务器可能找不到一个精确匹配 www.baidu.com. 的虚拟主机配置,导致它无法正确处理请求,可能返回 404(未找到)错误或者默认主机的页面(如果配置了默认主机)。

  1. 本地 DNS 解析器或代理的潜在问题:

虽然比较少见,但一些本地的 DNS 解析器库、防火墙或网络代理可能在处理显式以根点结尾的 FQDN 时存在 Bug 或非标准行为,导致解析失败或连接建立异常。

1.4.域名服务器的种类

域名服务器运行模式为客户机/服务器模式(C/S 模式)。

(1)按域名空间层次,可以分为根域名服务器、顶级域名服务器、权限域名服务器、本地域名服务器。具体功能如表所示。

|---------|-----------------------------------------------|------------------------------------|
| 名称 | 定义 | 作用 |
| 根域名服务器 | 最高层次域名服务器,该服务器保存了全球所有顶级域名服务器的P地址和域名。全球有100多个。 | 本地域名无法解析域名时,直接向根域名服务器请求。 |
| 顶级域名服务器 | 管理本级域名(如.cn)上注册的所有二级域名。 | 可以解析本级域名下的二级域名的P地址;提交下一步所寻域名服务器地址。 |
| 权限域名服务器 | 一个域可以分为多个区,每一个区都设置服务器,即权限域名服务器。 | 该区域管理主机的域名和IP地址的映射、解析。 |
| 本地域名服务器 | 主机发出的DNS查询报文最初送到的服务器。 | 查询本地域名和P地址的映射、解析。向上级域名服务器进行域名查询。 |

(2)按域名服务器的作用,可以分为主域名服务器、辅域名服务器、缓存域名服务器、转发域名服务器。具体功能如表所示。

|---------|-------------------------------------------------------------|-----------------------------------------------------------------|
| 名称 | 定义 | 作用 |
| 主域名服务器 | 维护本区所有域名信息,信息存于磁盘文件和数据库中。 | 提供本区域名解析,区内域名信息的权威。具有域名数据库。一个域有且只有一个主域名服务器。 |
| 辅域名服务器 | 主域名服务器的备份服务器提供域名解析服务,信息存于磁盘文件和数据库中。 | 主域名服务器备份,可进行域名解析的负载均衡。具有域名数据库。 |
| 缓存域名服务器 | 向其他域名服务器进行域名查询,将查询结果保存在缓存中的域名服务器。 | 改善网络中DNS 服务器的性能,减少反复查询相同域名的时间,提高解析速度,节约出口带宽。获取解析结果耗时最短,没有域名数据库。 |
| 转发域名服务器 | 负责非本地和缓存中无法查到的域名。接收域名查询请求,首先查询自身缓存,如果找不到对应的,则转发到指定的域名服务器查询。 | 负责域名转发,由于转发域名服务器同样可以有缓存,因此可以减少流量和查询次数。具有域名数据库。 |

1.5.域名解析的流程

1.2.1.递归式(纯理论式,不用)

递归的思想:

递归的思想是由栈的思想引申出来。

纯递归的方式要求所有DNS服务器均支持递归:本地DNS → 根DNS → 顶级DNS → 权威DNS,每一级服务器都"主动替下一级查询",直至返回最终IP。

示例:

1)客户端 → 本地DNS:"查www.baidu.com的IP"(递归请求)。

2)本地DNS → 根DNS:"帮我查www.baidu.com的IP,你全权处理"(递归请求)。

3)根DNS → 顶级DNS:"帮我查www.baidu.com的IP,你全权处理"(递归请求)。

4)顶级DNS → 权威DNS:"帮我查www.baidu.com的IP,你全权处理"(递归请求)。

5)权威DNS返回IP → 顶级DNS → 根DNS → 本地DNS → 客户端。

为何现实中不使用?

1)性能与安全风险:根/顶级DNS服务器若支持递归,会因全球海量请求导致负载爆炸,且易被DDoS攻击利用(通过递归查询放大流量)。

2)标准限制:互联网根DNS服务器默认禁用递归功能,仅允许迭代查询(这是DNS协议的硬性规定)。

1.2.2.迭代式(特殊场景使用)

客户端直接参与所有迭代步骤:不通过本地DNS,客户端自行向根DNS、顶级DNS、权威DNS逐级查询,全程手动"问路"。

1)客户端 → 根DNS:"www.baidu.com的IP在哪?" → 根DNS:"问.com顶级DNS(IP:x.x.x.x)。"

2)客户端 → 顶级DNS:"www.baidu.com的IP在哪?" → 顶级DNS:"问baidu.com权威DNS(IP:y.y.y.y)。"

3)客户端 → 权威DNS:"www.baidu.com的IP是?" → 权威DNS:"180.101.50.242。"

现实应用场景:

1)仅用于网络诊断工具(如dig命令的"追踪查询"模式:dig +trace www.baidu.com),模拟客户端直接迭代查询过程,用于排查DNS故障。

2)普通用户无法使用:需手动配置根DNS IP(全球仅13组根服务器),且多数客户端(如浏览器)不支持手动输入每一级DNS地址。

1.2.3.递归+迭代(主流)

传统若完全采取递归或迭代的方式,弊端都很大,所以现在的主流场景中都不会单方面使用一种模式,而是使用了递归+迭代的模式

递归式(客户端→本地DNS):相当于你(客户端)点外卖,告诉外卖员(本地DNS)"我要吃宫保鸡丁,你给我送来就行",至于外卖员是自己做、去餐馆买,还是让其他店代送(迭代查询),你完全不管,只要结果。

迭代式(本地DNS→上级服务器):相当于外卖员(本地DNS)不知道宫保鸡丁在哪买,问路人(根服务器)"哪有卖宫保鸡丁的?",路人说"前面路口左转有个川菜馆(顶级域服务器),你去问他们",外卖员再自己去川菜馆问,直到找到具体卖家(权威服务器)。

详细过程:

1)客户端发起请求:用户输入www.baidu.com,浏览器向本地DNS服务器(如ISP提供的DNS)发送递归查询请求:"请帮我解析www.baidu.com的IP地址"。

2)本地DNS服务器检查缓存:若本地缓存有该域名的IP记录,直接返回结果;若无,则进入下一步。

3)本地DNS服务器迭代查询

1.向根DNS服务器查询:"www.baidu.com"的IP是什么?

2.根服务器返回.com顶级域DNS服务器的地址:"我不知道,但你可以问.com域的服务器"。

3.本地DNS服务器向.com顶级服务器查询,得到baidu.com权威DNS服务器的地址。

4.本地DNS服务器向baidu.com权威DNS服务器查询,最终获取www.baidu.com的IP地址。

4)返回结果并缓存:本地DNS服务器将IP地址返回给客户端,并缓存该记录(根据TTL值设置有效期)。

二、DNS解析示例

linux中有关DNS的配置有:/etc/resolv.conf(DNS客户端配置)、hosts文件(本地域名映射)、端口与服务关系(DNS默认使用UDP 53端口,TCP 53用于区域传输)。

2.1.环境准备,准备两台同网段的设备

服务器:192.168.75.210

客户机:192.168.75.147

2.2.本地域名解析的"优先级最高规则"(hosts文件)

操作系统中的hosts文件是一个用于本地域名解析的纯文本文件,其核心作用是绕过DNS服务器,直接将域名与IP地址进行映射。用户可通过手动编辑该文件,实现对特定域名的自定义解析,优先级高于DNS服务器查询。

相关推荐
程序员JerrySUN1 小时前
Linux系统架构核心全景详解
linux·运维·系统架构
无敌的牛1 小时前
Linux文件理解,基础IO理解
linux·运维·服务器
angushine1 小时前
鲲鹏服务器logstash采集nginx日志
运维·服务器·nginx
未来之窗软件服务1 小时前
跨平台 WebSocket 服务器的设计与实现 —— 基于.NET 8 的跨操作系统解决方案linux,macos,windows——开发工具
linux·服务器·websocket·仙盟创梦ide·东方仙盟
睿思达DBA_WGX1 小时前
由于主库切换归档路径导致的 Oracle DG 无法同步问题的解决过程
运维·数据库·oracle
XXYBMOOO2 小时前
Xilinx-FPGA-PCIe-XDMA 驱动内核兼容性问题修复方案
linux·运维·服务器
waveee1232 小时前
学习嵌入式的第三十三天-数据结构-(2025.7.25)服务器/多客户端模型
服务器·数据结构·学习
爱学习的狮王2 小时前
window10和ubuntu22.04双系统之卸载ubuntu系统
linux·运维·ubuntu
wmm_会飞的@鱼4 小时前
FlexSim-汽车零部件仓库布局优化与仿真
服务器·前端·网络·数据库·数学建模·汽车