阶段1--域名服务器
目录
一、域名服务器
1.1.背景及由来
思考1:为什么不使用IP?
1.2.域名的分类
思考2:为什么上面举的例子中,华为、百度、腾讯的域名都是.com结尾?
国际通用顶级域名
国家顶级域名
1.3.域名的命名空间
1.4.域名服务器的种类
1.5.域名解析的流程
1.2.1.递归式
1.2.2.迭代式
类比:点外卖 vs 自己做饭(烧脑ing)
二、DNS解析示例
2.1.环境准备,准备两台同网段的设备
2.2.客户机DNS本地缓存记录
一、域名服务器
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,不再进行任何搜索域后缀的添加。理论上,这应该是最直接、最正确的查询方式。
2. 问题核心:证书不匹配和连接失败
虽然 www.baidu.com. 理论上能正确解析到 IP 地址(DNS 层面),但问题通常发生在建立连接之后。SSL/TLS 证书问题: 现代网站几乎都使用 HTTPS。服务器的 SSL/TLS 证书是为了保护一个特定的域名(如 www.baidu.com)颁发的。证书的 Common Name 或 Subject Alternative Names 中注册的是 www.baidu.com 或 baidu.com,而不是 www.baidu.com.。
当你访问 https://www.baidu.com. 时,浏览器会检查服务器提供的证书。浏览器期望证书是为它正在访问的主机名(www.baidu.com.)颁发的。但服务器证书上的名字是 www.baidu.com(没有末尾的点)。这两个名字在严格的证书验证规则下被认为是不同的。
因此,浏览器会触发一个严重的安全警告(NET::ERR_CERT_COMMON_NAME_INVALID),认为连接不安全(因为域名不匹配),并阻止你继续访问,以防范潜在的“中间人攻击”。用户通常看到的是“您的连接不是私密连接”或类似错误,而不是简单的“找不到页面”。
3. Web 服务器配置:
即使证书问题不存在(比如是 HTTP 网站,但这在主流网站中很少见了),Web 服务器(如 Nginx, Apache)通常配置为监听特定的主机名 www.baidu.com。
当请求到达服务器时,服务器检查请求头中的 Host 字段。对于 www.baidu.com. 的请求,Host 头通常是 www.baidu.com.(带点)。服务器配置中定义的虚拟主机通常是 www.baidu.com(不带点)。
服务器可能找不到一个精确匹配 www.baidu.com. 的虚拟主机配置,导致它无法正确处理请求,可能返回 404(未找到)错误或者默认主机的页面(如果配置了默认主机)。
4. 本地 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服务器发送查询请求后,该服务器必须将最终结果(IP地址)返回给客户端,期间若自身无缓存,会主动向其他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服务器(需全程处理查询逻辑)来做。常用于“客户端->本地DNS服务器”的场景。
1.2.2.迭代式
DNS服务器收到查询请求后,若自身无结果,仅返回下一级DNS服务器的地址,由发起查询的一方(如本地DNS服务器)自行继续查询,直至获取最终结果。
1)本地DNS服务器发起迭代查询:假设本地DNS服务器无缓存,向根DNS服务器发送迭代查询请求“www.baidu.com的IP是什么?如果不知道,请告诉我下一步该问谁?”
2)根服务器返回指引:根服务器返回.com顶级域DNS服务器的地址:“我无法直接回答,但你可以查询.com域的服务器,地址为:x.x.x.x”。
3)本地DNS服务器继续迭代。
1.向.com顶级域服务器查询,得到baidu.com权威DNS服务器的地址
2.向baidu.com权威DNS服务器查询,最终获取www.baidu.com的ip地址
4)本地DNS服务器返回结果:将IP地址返回给客户端(此时客户端与本地DNS服务器之间任为递归查询关系)。
特点:
查询责任由发起方承担(如本地DNS服务器需主动发起多次查询),但减轻了上级DNS服务器的负担。
常见于“本地DNS服务器->根/顶级域/权威DNS服务器”的场景。
类比:点外卖 vs 自己做饭(烧脑ing)
递归式(客户端→本地DNS):相当于你(客户端)点外卖,告诉外卖员(本地DNS)“我要吃宫保鸡丁,你给我送来就行”,至于外卖员是自己做、去餐馆买,还是让其他店代送(迭代查询),你完全不管,只要结果。
迭代式(本地DNS→上级服务器):相当于外卖员(本地DNS)不知道宫保鸡丁在哪买,问路人(根服务器)“哪有卖宫保鸡丁的?”,路人说“前面路口左转有个川菜馆(顶级域服务器),你去问他们”,外卖员再自己去川菜馆问,直到找到具体卖家(权威服务器)。
二、DNS解析示例
2.1.环境准备,准备两台同网段的设备
服务器:192.168.75.210
客户机:192.168.75.147