DNS域名解析自制笔记

DNS域名解析自制笔记,第1张

DNS域名解析自制笔记

本文作于2022.1.22,用于个人加深印象

一、DNS的引出

识别主机的两种方式:

①主机名 hostname(如www.baidu.com)优点:可读性高,便于记忆
②IP地址 IP address(如114.114.114.114)优点:定长,有层次结构

为了实现两种标识方式的转换,需要一种能够进行主机名到IP地址转换的目录服务(即将用户提供的主机名解析为IP地址),于是域名系统(Domain Name System,DNS)应运而生

DNS是一个:

①由分层的DNS服务器实现的分布式数据库
②使得主机能够查询分布式数据库的应用层协议

注意:
①DNS协议运行于UDP之上,使用53号端口
②DNS协议尽管是应用层协议,但他并不直接与用户进行交互,通常是为其他应用层协议使用

DNS基本工作原理

二、DNS提供的服务 ①主机名到IP地址的转换

举一个书上的例子便于理解:一个人使用浏览器请求URL:www.baidu.com/index.html页面的过程
1.同一台用户主机上运行着DNS应用的客户端
2.浏览器从上述URL中提取出主机名www.baidu.com,并将主机名传给DNS应用客户端
3.DNS客户向DNS服务器发送一个包含主机名的请求
4.DNS客户端收到一份回答报文,其中含有对应于主机名的IP地址
5.浏览器接收到IP地址就能够向位于该IP地址80号端口的HTTP服务器进程发起一个TCP连接

不难发现,DNS为应用带来了额外时延,如果中转的DNS服务器过多的话时延相当可观,因此我们考虑使用DNS缓存来减少时延(基本思想即将IP地址储存在附近的DNS服务器中,减少获取时间)

②其他重要服务

此外DNS还提供了:主机别名(host aliasing)、邮件服务器别名(mail server aliasing)、负载分配(load distribution)等服务

三、DNS工作机理概述

以下讨论均集中在主机名到IP地址转换服务方面

1.DNS的设计: Ⅰ 集中式设计的缺点:

①单点故障(a single point of failure):一旦DNS服务器宕机,整个因特网随之瘫痪
②通信容量(traffic volume):单个DNS服务器无法处理上亿台主机的所有DNS查询
③远距离的集中式数据库(distant centralized database):地理距离将导致查询的严重时延
④维护(maintenance):中央数据库过于庞大且为了解决每个新添加的主机不得不频繁更新
总而言之,单一DNS服务器上运行集中式数据库完全没有可扩展能力,因此采用了分布式、层次式数据库的设计方式

Ⅱ 分布式、层次数据库

 ①根DNS服务器
作用:记录所有顶级域服务器的域名和IP地址。比如它们只记录.edu .com .org等这些顶级域名的服务器的解析。
②顶级域服务器(Top-Level Domain,TLD)
作用:记录顶级域名下的所有二级域名和地址(可以理解成提供权威DNS服务器的IP地址)。比如.cn的顶级域名,它只解析和.cn相关的域名,并且只解析到xxx.cn
③权威DNS服务器
作用:只负责被授权的具体的域名解析。
④本地DNS服务器
作用:不属于层次结构,但分担了整个DNS系统的压力。每个ISP都有一台本地DNS服务器(也叫默认名字服务器)
例子:假设主机cse.nyu.edu想知道gaia.cs.umass.edu的IP地址。同时假设NYU的cse.nyu.edu的本地DNS服务器为dns.nyu.edu,待查询的gaia.cs.umass.edu的权威DNS为dns.umass.edu。如下

 主机cse. nyu. edu首先向本地DNS服务器dns. nyu. edu发送一个DNS查询报文。该查询报文含有被转换的主机名 gaia. cs. umass. edu。本地DNS服务器将该报文转发到根DNS服务器。该根DNS服务器注意到其edu前缀并向本地DNS服务器返回负责edu的TLD的IP地址列表。该本地DNS服务器则再次向这些TLD服务器之一发送查询报文。该TLD服务器注意到 umass. edu前缀,并用权威DNS服务器的IP地址进行响应,该权威DNS服务器是负责马萨诸塞大学的dns. umass. edu。最后,本地DNS服务器直接向dns. umass.edu重发查询报文,dns. umass. edu用gaia. cs. umass. edu的IP地址进行响应。

注意:在实际过程中TLD服务器并不总是知道用于目标主机的权威DNS服务器的IP地址,而是知道中间的某个DNS服务器,因此还需要继续向更低级的DNS服务器依次发送查询报文最终找到目标主机的权威DNS服务器

Ⅲ 递归查询(recursive query)和迭代查询(iterative query)

首先,一般的查询模式都按照:请求主机到本地DNS服务器的查询是递归的,其余的查询是迭代的。
而关于两种查询的区别,笔者觉得有篇csdn讲的很好就直接搬运过来了

所谓 递归查询过程 就是 “查询的递交者” 更替, 而 迭代查询过程 则是 “查询的递交者”不变。

举个例子来说,你想知道某个一起上法律课的女孩的电话,并且你偷偷拍了她的照片,回到寝室告诉一个很仗义的哥们儿,这个哥们儿二话没说,拍着胸脯告诉你,甭急,我替你查(此处完成了一次递归查询,即,问询者的角色更替)。然后他拿着照片问了学院大四学长,学长告诉他,这姑娘是xx系的;然后这哥们儿马不停蹄又问了xx系的办公室主任助理同学,助理同学说是xx系yy班的,然后很仗义的哥们儿去xx系yy班的班长那里取到了该女孩儿电话。(此处完成若干次迭代查询,即,问询者角色不变,但反复更替问询对象)最后,他把号码交到了你手里。完成整个查询过程。

原文:https://blog.csdn.net/wytheonly/article/details/37925067

2.DNS缓存(cashing)

为了改善时延性能并减少在因特网上到处传输的DNS报文数量, DNS广泛使用了缓存技术。
缓存是为了提高性能,而定期删除缓存则是为了一致性。

DNS缓存的原理非常简单。在一个请求链中,当某DNS服务器接收一个DNS回答(例如,包含某主机名到IP地址的映射)时,它能将映射缓存在本地存储器中。例如,在图2-18 中,每当本地DNS服务器dns. nyu. edu从某个DNS服务器接收到一个回答,它能够缓存包含在该回答中的任何信息。如果在DNS服务器中缓存了一台主机名/IP地址对,另一个对相同主机名的查询到达该DNS服务器时,该DNS服务器就能够提供所要求的IP地址,即使它不是该主机名的权威服务器。

四、DNS记录和报文

共同实现DNS分布式数据库的所有DNS服务器存储了资源记录(Resource Record, RR), RR提供了主机名到IP地址的映射。每个DNS回答报文包含了一条或多条资源记录。

资源记录是一个包含了下列字段的4元组:(Name,Value,Type,TTL)
①TTL(time to live,生存时间)决定了资源记录从缓存中删除的时间,在下面的讨论中我们忽略它
②Name和Value取决于Type
 

NameValue作用Type=A主机名主机名对应的IP地址指定域名对应的IP地址。Type=NS域解析该域的权威DNS服务器的主机名指定由哪个DNS服务器解析该域名Type=CNAME别名别名为Name的主机的规范主机名允许将多个名字映射到同一台计算机Type=MX别名别名为Name的邮件服务器的规范主机名允许邮件服务器主机名拥有简单别名 五、DNS解析过程

当我们去解析一个域名时,比如解析xiaoxiaoguo.cn,会经过如下步骤:
1.查看本机的缓存有无该域名记录,如果没有,查看本机的host文件有无该域名记录,如果没有,则发个请求到本地DNS服务器。
2.本地DNS服务器收到请求后,查看是否有该域名的解析,如果有,返回解析记录给主机,如果没有,则请求根域名服务器
3.根域名服务器收到请求后,返回该域名对应的顶级域名服务器,比如这次请求返回.cn的服务器地址
4.本地域名服务器接到顶级域名服务器地址后,向该顶级域名服务器请求
5.顶级域名服务器返回该域名的权威服务器地址,比如这次返回xiaoxiaoguo.cn对应的权威服务器地址
6.本地域名服务器获得该地址后,发请求到该域名的权威服务器。
7.权威服务器返回该域名对应的解析。
8.本地域名服务器获取该解析后,返回给主机,解析完成。

这里可能会有个疑问:本地服务器是怎么知道根域名服务器的地址?如果安装了bind服务,可以看到默认有个name.ca的文件,里面记录了13组根域的解析。所以本地域名服务器默认就有根域的解析。
原文:DNS全解析_小小郭-CSDN博客_dns type

六、DNS报文

 使用标识符(identification,ID)可以实现同时进行多个查询,即流水线 *** 作,并且根据它判断是查询报文还是应答报文(两种报文格式一样)

其余报文格式语段详见书的page90

七、维护DNS

在上级域的名字服务器中增加两条记录,指向这个新增的子域的域名和域名服务器的地址(分别为Type=NS、Type=A,相当于指针)
①Type=NS 在新增子域的名字服务器上运行名字服务器,负责本域的名字解析(即权威服务器)
②Type=A 权威服务器的名字与IP地址的对应

例子:在com域中建立一个“Network Utopia”,到注册登记机构注册域名networkutopia.com
需要向该机构提供权威DNS服务器(基本的、和辅助的)的名字和IP地址
登记机构在com TLD服务器中插入两条RR记录:

(networkutopia.com,dns1.networkutopia.com,NS )
(dns1.networkutopia.com,212.212.212.1,A)

此外还需要在networkutopia.com的权威服务器中确保有

    用于Web服务器的www.networkuptopia.com的类型为A的记录
    用于邮件服务器mail.networkutopia.com的类型为MX的记录

七、攻击DNS(DDoS攻击) ①对根服务器进行流量轰炸攻击:发送大量ping

没有成功的原因:
1.根目录服务器配置 了流量过滤器,防火墙
2.Local DNS 服务器 缓存了TLD服务器的IP地址, 因此无需查询根服务器

②向TLD服务器流量轰炸攻击 :发送大量查询

可能更危险,但效果一般,因为大部分DNS缓存 了TLD

③重定向攻击

Ⅰ 中间人攻击:截获查询,伪造回答,从而攻击某个(DNS回答指定的IP)站点
Ⅱ DNS中毒:发送伪造的应答给DNS服务器,希望它能够缓存这个虚假的结果
Ⅲ 技术上较困难:分布式截获和伪造

④利用DNS基础设施进行DDoS

伪造某个IP进行查询, 攻击这个目标IP
查询放大,响应报文比查询报文大
效果有限

总的说来,DNS比较健壮:流量是分布式存储,DNS查询又几乎都有缓存,无根也可正常运行工作

参考资料:

[1] DNS全解析_小小郭-CSDN博客_dns type
[2] DNS解析的工作原理及递归与迭代的区别_WytheOnly-CSDN博客_dns递归和迭代的区别
[3] DNS记录类型介绍(A记录、MX记录、NS记录等)_tvk872的博客-CSDN博客_dns ns记录
[4] 中科大郑烇、杨坚《计算机网络》课程 第二章笔记_爱好学习的青年人的博客-CSDN博客
[5] https://www.bilibili.com/video/BV1JV411t7ow?p=17&spm_id_from=pageDriver

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5712283.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存