DNS完整解析流程_dns流程-程序员宅基地

技术标签: CDN基础知识  网络  http  网络协议  dns服务器  

一、DNS介绍

  域名(Domain Name)是一个标记主机或主机组的名称,相当于IP地址的别名。

  域名系统(Domain Name Server)是将域名解析成IP地址的互联网基础服务,提供该服务的服务器成为域名解析服务器。

二、域名结构

域名系统是一个分布式系统,Internat采用树状结构命名,结构如下图所示:
在这里插入图片描述

三、DNS解析过程

在这里插入图片描述

1、DNS域名解析服务器分类
  • 本地域名服务器(Local DNS)

    如果通过DHCP配置,Local DNS由ISP提供

  • 根域名服务器(Root DNS)

    当Local DNS解析不到时,第一步向Root DNS查询,并获得顶级域名服务器的IP地址。Root DNS本身并不直接用于域名解析,仅用于返回可供查询的顶级域名服务器IP地址。

  • 顶级域名服务器(Top Level DNS)

    负责管理在该顶级域名服务器下注册的二级域名

  • 权威域名服务器(Authoritative DNS)

    在特定区域内具有唯一性,负责维护该区域内的域名和IP地址映射关系,在DNS应答报文中,标识为AA标识本次DNS记录是否来自于权威域名服务器,否则可能来自于缓存。

2、DNS域名解析中添加的各项解析记录

​ DNS服务器会把一个域名解析到一个IP地址,然后在此IP地址的主机上将一个子目录与域名绑定。域名解析时会添加解析记录,包括:A记录、AAAA记录、CNAME记录、MX记录、NS记录、TXT记录、SRV记录、URL转发。

  • A记录:将域名指向一个IPv4地址,需要增加A记录
  • CNAME记录:如果将一个域名指向一个域名,实现与被指向域名相同的访问效果,需要增加CNAME记录。这个域名一般是主机服务提供商提供的一个域名。
  • MX记录:建立电子邮箱服务,将指向电子邮箱服务器地址,需要设置MX记录。建立邮箱时,一般会根据邮箱服务商提供的MX记录填写改记录。
  • NS记录:域名解析服务器记录,如果要将子域名指定某个域名服务器来解析,需要设置NS记录。
  • AAAA记录:将主机名或域名指向一个IPv6地址,需要添加AAAA记录
  • SRV记录:添加服务器记录服务器服务器记录时会添加此项,SRV记录了那台计算机提供了那哪个服务,格式为:服务的名字.协议的类型
  • SOA记录:SOA叫做起始授权机构记录,NS用于标识多台域名解析服务器,SOA记录用于在众多NS记录中那一台是主服务器
  • DS记录:委托签发者,此记录用于鉴定DNSSEC已授权区域的签名密钥
  • RRSIG记录:DNSSEC 证书,DNSSEC 安全记录集证书,与 SIG 记录使用相同的格式
  • PTR记录:PTR记录是A记录的逆向记录,又称做IP反查记录或指针记录,负责将IP反向解析为域名
  • 现实URL转发记录:将域名指向一个http(s)协议地址,访问域名时,直接跳转至目标地址。
  • 隐士URL转发记录:将域名指向一个http(s)协议地址,访问域名时,直接跳转至目标地址,隐性转发会隐藏真实的目标地址(浏览器显示源域名)。

​ A记录是把域名解析到IP地址,二CNAME是把域名解析到另一个域名,而这个域名最终会指向一个A记录,在实现功能上A记录和CNAME没有区别。

​ CNAME记录在做IP变更时要比A记录方便。CNAME允许将多个域名映射到一台机器,当有多个域名需要指向同一服务器IP,此时可以将一个域名做A记录指向服务器IP,然后将其他的域名做别名(即:CNAME)到A记录的域名上。当服务器IP地址变更时,只需要更改A记录的那个域名到新IP上,其它做别名的域名会自动更改到新的IP地址上,而不必对每个域名做更改。

3、DNS解析流程
  • 查询本地hosts文件映射

    手动设置IP与域名的映射关系,保存在hosts文件中

    • windows:C:\Windows\System32\drivers\etc\hosts
    • linux:/etc/hosts
  • 查询浏览器或本地DNS缓存

    浏览器或本机都会对DNS进行缓存

  • 委托LSP-DNS查询(递归查询)

    本机向LDNS查询一般都是采用递归查询:如果本机所询问的本地域名服务器不知道查询的IP地址,那么本地域名服务器就以DNS客户的身份,想其他根域名服务器继续发出查询请求报文,而不是让该主机自己进行下一步查询。因此递归查询的结果或者是所要查询的IP,或者报错。

  • LSP-DNS做迭代查询

    本地域名服务器向根域名服务器查询通常采用迭代查询:当跟服务器收到本地域名服务器发出的迭代查询请求报文时,要么给出查询对应的IP地址,要么告诉本地域名服务器下一步应该向哪个域名服务器查询。

    然后本地域名服务器进行后续查询,根域名服务器通常把自己知道的顶级域名服务器告诉本地域名服务器,本地域名服务器再去顶级域名服务器查询。

  • LSP-DNS将查询结果返回到本机

4、DNS解析步骤

在这里插入图片描述

  • 首先检查DNS缓存,如果缓存过期或未命中,客户端需要向Local DNS发起查询请求报文
  • 客户端向 Local DNS 发送查询报文 query www.baidu.com,Local DNS 首先检查自身缓存,如果存在记录则直接返回结果,查询结束;如果缓存老化或未命中,则下一步
  • Local DNS 向根域名服务器发送查询报文 query www.baidu.com,返回 .com 顶级域名服务器的地址
  • Local DNS 向 .com 顶级域名服务器发送查询报文 query www.baidu.com,返回baidu.com所在的权威域名服务器的地址
  • Local DNS 向 baidu.com 权威域名服务器发送查询报文 query www.baidu.com,得到 IP地址,存入自身缓存并返回给客户端
5、实时跟踪解析过程
  • 查询域名对应的IP地址
Nikolai:~ cow$ nslookup www.baidu.com
Server:		114.114.114.114			//本地设置的Local DNS服务器
Address:	114.114.114.114#53	//本地设置的Local DNS服务器

Non-authoritative answer:			// 非权威解答,即从上连DNS服务器的本地缓存中读取出的值,而非实际去查询到的值
www.baidu.com	canonical name = www.a.shifen.com. #canonical name为CNAME
Name:	www.a.shifen.com
Address: 36.152.44.96
Name:	www.a.shifen.com
Address: 36.152.44.95
  • 追踪解析过程
Nikolai:~ cow$ dig +trace www.baidu.com
# 第一步:请求 . 的IP,向Local DNS获取Root-DNS的13个NS的IP和名称[a-m].root-servers.net
; <<>> DiG 9.10.6 <<>> +trace www.baidu.com
;; global options: +cmd
.			1308	IN	NS	k.root-servers.net.
.			1308	IN	NS	c.root-servers.net.
.			1308	IN	NS	g.root-servers.net.
.			1308	IN	NS	b.root-servers.net.
.			1308	IN	NS	a.root-servers.net.
.			1308	IN	NS	f.root-servers.net.
.			1308	IN	NS	l.root-servers.net.
.			1308	IN	NS	h.root-servers.net.
.			1308	IN	NS	m.root-servers.net.
.			1308	IN	NS	e.root-servers.net.
.			1308	IN	NS	i.root-servers.net.
.			1308	IN	NS	d.root-servers.net.
.			1308	IN	NS	j.root-servers.net.
;; Received 239 bytes from 114.114.114.114#53(114.114.114.114) in 43 ms	#Local DNS返回
# 第二步:向某一台Root-DNS(h.root-servers.net)发送www.baidu.com域名解析请求,返回顶级域名.com的NS:IP(未显示)和名称
com.			172800	IN	NS	a.gtld-servers.net.
com.			172800	IN	NS	b.gtld-servers.net.
com.			172800	IN	NS	c.gtld-servers.net.
com.			172800	IN	NS	d.gtld-servers.net.
com.			172800	IN	NS	e.gtld-servers.net.
com.			172800	IN	NS	f.gtld-servers.net.
com.			172800	IN	NS	g.gtld-servers.net.
com.			172800	IN	NS	h.gtld-servers.net.
com.			172800	IN	NS	i.gtld-servers.net.
com.			172800	IN	NS	j.gtld-servers.net.
com.			172800	IN	NS	k.gtld-servers.net.
com.			172800	IN	NS	l.gtld-servers.net.
com.			172800	IN	NS	m.gtld-servers.net.
com.			86400	IN	DS	30909 8 2 E2D3C916F6DEEAC73294E8268FB5885044A833FC5459588F4A9184CF C41A5766
com.			86400	IN	RRSIG	DS 8 1 86400 20210407050000 20210325040000 42351 . da9V1INes+/W51QLFwPi2KH4XxaNMsPxAJyDz1OucQPGYvqrtZOIg+/U se7ZNL44AzRNOWayiGQa2WENkdhHP//RfmORPtU0lJ5xL61Fk5J4Ufqg qLxm0ff1vq9IvJHDhDRpQc9Z8HHMexs9OgGnNUvw4ZIqZmh4J1ybkYFV gAK7H/WeBuIRvxrsoAvBaG21QARgYwnsML1JE5nlU0qaQYKXBA0pU8di LvfbM5XWPdZ1+mXvM0cI/5GY0lljsDE0IcrGQqV0kx+kb/COh0D2zQ4e IYJn2iwfqMcFqr0y9tdGR/LCX2Xn2I398fzkBo7EEg/RclMVldwOuyPT C4g8jg==
;; Received 1173 bytes from 198.97.190.53#53(h.root-servers.net) in 248 ms
# 第三步:想某一台顶级域名服务器(e.gtld-servers.net)发送www.baidu.com域名解析请求,返回baidu.com的NS(IP和名称),这里可以看到有5台服务器
baidu.com.		172800	IN	NS	ns2.baidu.com.
baidu.com.		172800	IN	NS	ns3.baidu.com.
baidu.com.		172800	IN	NS	ns4.baidu.com.
baidu.com.		172800	IN	NS	ns1.baidu.com.
baidu.com.		172800	IN	NS	ns7.baidu.com.
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN NSEC3 1 1 0 - CK0Q1GIN43N1ARRC9OSM6QPQR81H5M9A  NS SOA RRSIG DNSKEY NSEC3PARAM
CK0POJMG874LJREF7EFN8430QVIT8BSM.com. 86400 IN RRSIG NSEC3 8 2 86400 20210329044039 20210322033039 58540 com. u/fG/22hCyr5d7plovuOVw4cBVYARC3TpYD+/BFVwV/G9t3LsW2mCEza 2gNH2YWAPeaA5wA1K9Ma8C5SYDEvAm/G3EB7zwVjYFGJK2JshioJjK6Z OyryobM7iVOzOQdj1jljwoGkP9h0XD76dGedJ2+XTuYmmBunq2TbTsEp yK4YWPyxXit+kcwqslrTY6aZUeUaG8fL2FNdF++pOJwUWQ==
HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN NSEC3 1 1 0 - HPVVN3Q5E5GOQP2QFE2LEM4SVB9C0SJ6  NS DS RRSIG
HPVUSBDNI26UDNIV6R0SV14GC3KGR4JP.com. 86400 IN RRSIG NSEC3 8 2 86400 20210329061254 20210322050254 58540 com. DOFFQBEbHI3eie9mCVlBPLgouYOOy/U3Z6sPH/9WxtcuXXVxo0VgY0qC tA3Bnn+5VXb++NKcTl3NMbDRYL9nA1xWFEK/DFl18NIATp4t99FxJ7m2 CevCNOse6Znj+BwY4poNesVvLfA+njx0l8nI79tUPnYRde8E/Zjx0GaN UrK1mAISiqivR/m5+sN26+KFJkA3llX7WdnmwPjegxf+Zg==
;; Received 761 bytes from 192.12.94.30#53(e.gtld-servers.net) in 300 ms
# 第四步:向其中一台百度权威域名服务器(ns2.baidu.com)发送www.baidu.com域名解析请求,返回a.shifen.com.和CNAME www.a.shifen.com.、IP和名称
www.baidu.com.		1200	IN	CNAME	www.a.shifen.com.
a.shifen.com.		1200	IN	NS	ns4.a.shifen.com.
a.shifen.com.		1200	IN	NS	ns3.a.shifen.com.
a.shifen.com.		1200	IN	NS	ns2.a.shifen.com.
a.shifen.com.		1200	IN	NS	ns1.a.shifen.com.
a.shifen.com.		1200	IN	NS	ns5.a.shifen.com.
;; Received 239 bytes from 220.181.33.31#53(ns2.baidu.com) in 40 ms

​ 事实上,返回CNAME的同一个包中,也返回了www.a.shifen.com. 对应的NS列表,之后www.a.shifen.com.的解析流程没有跟踪到。
在这里插入图片描述

  • 本机向Local DNS请求查询www.baidu.com
  • Local DNS向根域名服务器Root-DNS请求查询www.baidu.com,根域名服务器返回com.域的顶级域名服务器GTLS-DNS
  • 向com.域GTLS-DNS请求查询,com. 域返回baidu.com域的服务器IP名称列表(通过NS的方式)
  • 向baidu的权威域名解析服务器请求查询www.baidu.com,返回A记录a.shifen.com和CNAMEwww.a.shifen.com
  • 向Root-DNS请求www.a.shifen.com
  • 向com.域GTLS-DNS请求查询www.a.shifen.com
  • 向shifen.com域DNS查询
  • 向a.shifen.com域查询
  • 拿到www.a.shifen.com的A记录
  • Local DNS返回www.baidu.com的CNAMEwww.a.shifen.com以及www.a.shifen.com的IP
6、DNS缓存

​ 一次完整的 DNS 查询过程需要访问多台 DNS 服务器才能得到最终的结果,这肯定会带来一定的时延。为了改善时延,DNS 服务并不是每次请求都要去访问 DNS 服务器,而是访问过一次后将 DNS 记录缓存在本地。具体来说,DNS 服务是一个多级的缓存:

​ 浏览器缓存 -> 操作系统缓存 -> 路由器缓存 -> Local DNS 缓存 -> DNS 查询

​ 缓存并不是永久有效的,前面提到过 DNS 应答报文中的 TTL(Time to Live)值,它决定了 DNS 记录在缓存中的有效时间。需要注意的是,TTL 只是一个参考值,实际使用的缓存有效时间不一定等于该值,甚至是固定值。

四、DNS存在的问题
1、DNS查询时延

​ 一次完整的 DNS 查询过程需要访问多台 DNS 服务器才能得到最终的结果,这肯定会带来一定的时延。从实践来看,这个时间还不容小觑。

2、缓存一致性

​ DNS 缓存的存在虽然减少了时延,却是以牺牲一致性(consistency)为代价的。具体来说:Local DNS 是分地区、分运营商的,在域名解析缓存的处理上,实现策略就不统一了。有时候 Local DNS 的解析结果可能不是最近、最优的节点,有的时候并不会遵从 TTL 的限制,而是设置一个固定时间。这就会导致域名指向新的 IP 地址后,一些客户端依然访问了缓存中 旧的 IP 地址。

3、DNS劫持

​ 由于 DNS 缺乏加密、认证、完整性保护的安全机制,容易引发网络完全问题。最常见的域名劫持攻击是针对 DNS 报文首部的事务 ID进行欺骗,由于事务 ID 在查询报文和应答报文中是匹配的,因此伪装 DNS 服务器可以提前将事务 ID 相同的伪造报文发送到客户端,以实现域名劫持(前提是合法的报文还未到达),把目标网站域名解析到错误的 IP 地址。

4、调度不精确

​ 由于存在缓存、转发、NAT 等问题,权威的 DNS 服务器可能会误判客户端所在的位置和运营商,从而导致解析出跨运营商访问的 IP 地址,用户的访问速度降低。

在这里插入图片描述
在这里插入图片描述
公众号:编程之蝉 专注后台开发、CDN、算法、大数据,欢迎关注,阅读最新更新
公众号:编程之蝉

五、参考
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_43710037/article/details/115386472

智能推荐

2022黑龙江最新建筑八大员(材料员)模拟考试试题及答案_料账的试题-程序员宅基地

文章浏览阅读529次。百分百题库提供建筑八大员(材料员)考试试题、建筑八大员(材料员)考试预测题、建筑八大员(材料员)考试真题、建筑八大员(材料员)证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。310项目经理部应编制机械设备使用计划并报()审批。A监理单位B企业C建设单位D租赁单位答案:B311对技术开发、新技术和新工艺应用等情况进行的分析和评价属于()。A人力资源管理考核B材料管理考核C机械设备管理考核D技术管理考核答案:D312建筑垃圾和渣土._料账的试题

chatgpt赋能python:Python自动打开浏览器的技巧-程序员宅基地

文章浏览阅读614次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python自动打开浏览器

Linux中安装JDK-RPM_linux 安装jdk rpm-程序员宅基地

文章浏览阅读545次。Linux中安装JDK-RPM方式_linux 安装jdk rpm

net高校志愿者管理系统-73371,计算机毕业设计(上万套实战教程,赠送源码)-程序员宅基地

文章浏览阅读25次。免费领取项目源码,请关注赞收藏并私信博主,谢谢-高校志愿者管理系统主要功能模块包括页、个人资料(个人信息。修改密码)、公共管理(轮播图、系统公告)、用户管理(管理员、志愿用户)、信息管理(志愿资讯、资讯分类)、活动分类、志愿活动、报名信息、活动心得、留言反馈,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采取SQL Server 作为后台数据的主要存储单元,采用Asp.Net技术进行业务系统的编码及其开发,实现了本系统的全部功能。

小米宣布用鸿蒙了吗,小米OV对于是否采用鸿蒙保持沉默,原因是中国制造需要它们...-程序员宅基地

文章浏览阅读122次。原标题:小米OV对于是否采用鸿蒙保持沉默,原因是中国制造需要它们目前华为已开始对鸿蒙系统大规模宣传,不过中国手机四强中的另外三家小米、OPPO、vivo对于是否采用鸿蒙系统保持沉默,甚至OPPO还因此而闹出了一些风波,对此柏铭科技认为这是因为中国制造当下需要小米OV几家继续将手机出口至海外市场。 2020年中国制造支持中国经济渡过了艰难的一年,这一年中国进出口贸易额保持稳步增长的势头,成为全球唯一..._小米宣布用鸿蒙系统

Kafka Eagle_kafka eagle git-程序员宅基地

文章浏览阅读1.3k次。1.Kafka Eagle实现kafka消息监控的代码细节是什么?2.Kafka owner的组成规则是什么?3.怎样使用SQL进行kafka数据预览?4.Kafka Eagle是否支持多集群监控?1.概述在《Kafka 消息监控 - Kafka Eagle》一文中,简单的介绍了 Kafka Eagle这款监控工具的作用,截图预览,以及使用详情。今天_kafka eagle git

随便推点

Eva.js是什么(互动小游戏开发)-程序员宅基地

文章浏览阅读1.1k次,点赞29次,收藏19次。Eva.js 是一个专注于开发互动游戏项目的前端游戏引擎。:Eva.js 提供开箱即用的游戏组件供开发人员立即使用。是的,它简单而优雅!:Eva.js 由高效的运行时和渲染管道 (Pixi.JS) 提供支持,这使得释放设备的全部潜力成为可能。:得益于 ECS(实体-组件-系统)架构,你可以通过高度可定制的 API 扩展您的需求。唯一的限制是你的想象力!_eva.js

OC学习笔记-Objective-C概述和特点_objective-c特点及应用领域-程序员宅基地

文章浏览阅读1k次。Objective-C概述Objective-C是一种面向对象的计算机语言,1980年代初布莱德.考斯特在其公司Stepstone发明Objective-C,该语言是基于SmallTalk-80。1988年NeXT公司发布了OC,他的开发环境和类库叫NEXTSTEP, 1994年NExt与Sun公司发布了标准的NEXTSTEP系统,取名openStep。1996_objective-c特点及应用领域

STM32学习笔记6:TIM基本介绍_stm32 tim寄存器详解-程序员宅基地

文章浏览阅读955次,点赞20次,收藏16次。TIM(Timer)定时器定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断16位计数器、预分频器、自动重装寄存器的时基单元,在 72MHz 计数时钟下可以实现最大 59.65s 的定时,59.65s65536×65536×172MHz59.65s65536×65536×721​MHz不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、输出比较、编码器接口、主从触发模式等多种功能。_stm32 tim寄存器详解

前端基础语言HTML、CSS 和 JavaScript 学习指南_艾编程学习资料-程序员宅基地

文章浏览阅读1.5k次。对于任何有兴趣学习前端 Web 开发的人来说,了解 HTML、CSS 和JavaScript 之间的区别至关重要。这三种前端语言都是您访问过的每个网站的用户界面构建块。而且,虽然每种语言都有不同的功能重点,但它们都可以共同创建令人兴奋的交互式网站,让用户保持参与。因此,您会发现学习所有三种语言都很重要。如果您有兴趣从事前端开发工作,可以通过多种方式学习这些语言——在艾编程就可以参与到学习当中来。在本文中,我们将回顾每种语言的特征、它们如何协同工作以及您可以在哪里学习它们。HTML vs C._艾编程学习资料

三维重构(10):PCL点云配准_局部点云与全局点云配准-程序员宅基地

文章浏览阅读2.8k次。点云配准主要针对点云的:不完整、旋转错位、平移错位。因此要得到完整点云就需要对局部点云进行配准。为了得到被测物体的完整数据模型,需要确定一个合适的坐标系变换,将从各个视角得到的点集合并到一个统一的坐标系下形成一个完整的数据点云,然后就可以方便地进行可视化,这就是点云数据的配准。点云配准技术通过计算机技术和统计学规律,通过计算机计算两个点云之间的错位,也就是把在不同的坐标系下的得到的点云进行坐标变..._局部点云与全局点云配准

python零基础学习书-Python零基础到进阶必读的书藉:Python学习手册pdf免费下载-程序员宅基地

文章浏览阅读273次。提取码:0oorGoogle和YouTube由于Python的高可适应性、易于维护以及适合于快速开发而采用它。如果你想要编写高质量、高效的并且易于与其他语言和工具集成的代码,《Python学习手册:第4 版》将帮助你使用Python快速实现这一点,不管你是编程新手还是Python初学者。本书是易于掌握和自学的教程,根据作者Python专家Mark Lutz的著名培训课程编写而成。《Python学习..._零基础学pythonpdf电子书

推荐文章

热门文章

相关标签