域名系统(Domain Name System, DNS)是计算机网络中至关重要的枢纽之一,本篇博客将带你全方位,深入浅出的了解计算机网络中的域名系统(Domain Name System, DNS)。
目录
1 文章简述
2.1DNS提供的服务
2.1.1 DNS是什么
2.1.2 为何要实现行主机名和IP地址的转换
2.1.3 DNS提供的其他重要服务
2.2 DNS的工作机理
2.2.1 分布式、层次数据库
2.2.2 DNS实现查询的两种方式
1. 递归查询
2. 迭代查询
2.2.3 DNS缓存
2.3 DNS记录
2.3.1 资源记录
2.4 DNS的脆弱性
1文章简述
为什么称DNS是招待员呢?这可以从他最关键的任务中体现。这里将直接给出DNS最为核心的任务:进行主机名到IP地址转换的目录服务。本片博客将先介绍DNS所提供的服务,再根据服务进一步解析DNS工作机理,最后介绍实现DNS机理所需的数据配置。我们将通过这三个不同又彼此相关联的视角介绍这位招待员。
2.1DNS提供的服务 2.1.1DNS是什么1.DNS是一个由分层的DNS服务器实现的分布式数据库(存放了很多主机名和对应的IP地址)。
2.DNS是一个使得主机能够查询分布式数据库的应用层协议。DNS是应用层协议,运行在UDP之上,端口号为53。它通常为其他应用层协议提供服务,如HTTP,SMTP等。
2.1.2为何要实现行主机名和IP地址的转换?简述中说到,DNS所提供最核心的任务就是:进行主机名到IP地址转换的目录服务。我们不妨先思考这样一个问题,为什么要转换?其实这就像我们编程一样,我们习惯于使用C++,Python这类语言,而计算机却只能理解二进制数。同理,我们在网络中习惯了主机名,如www.baidu.com。但是这些主机名提供的信息少之又少,而且长短不一,导致路由器难以处理。通常主机通过IP地址进行标识,如121.7.106.83(一个IP地址由4个字节组成,有着严格的层次结构),但是又不方便人们记忆。比如:你好,我是121.7.106.83,我找马冬梅(这不比夏洛难记多了哈哈哈)。所以DNS就此诞生。
2.1.3DNS提供的其他重要服务作为计算机网络中至关重要的角色,DNS还提供了以下几个关键服务。
1.获取主机别名对应的规范主机名及IP地址:一个名为realy2. west-coast.enterprise.com的主机还可能存在别名,比如www.enterprise.com。我们也能调用DNS来实现转换。
2.邮件服务器别名:显而易见,和上面的情况相似,我们也希望邮件服务器地址十分好记(Bob的邮箱:bob@yahoo.com)。
3.负载分配:既然我们通过主机名访问其他主机时都要调用DNS,那用它来调解网络的拥堵情况岂不美哉?。例如,当我们通过主机名访问一个Web网站时,DNS将可以访问这个网站并且较为空闲的Web服务器的IP地址以集合的方式返回给客户主机,这样就将可以将冗余的服务器利用起来了。
2.2DNS的工作机理这一小节将是本篇博客的重点,希望我们都有耐心(写)看完哈。上一小节介绍了DNS所提供的服务,那么这一节就将具体介绍这些服务是如何实现的。我们先来看一下最最最简单的版本流程,当客户主机上的某些系统(Web浏览器)要将主机名转化为IP地址时:
(1): 这些应用将调用DNS客户端,并指明要被转换的主机名(DNS客户端在客户主机内)。
(2):用户主机上的DNS客户端接收到之后,向DNS服务端中发送一个DNS查询报文(所有的DNS请求和回答报文都使用UDP数据报经端口53发送)。
(3):DNS服务端返回该主机名对应的IP地址。
这是通过我们客户端的视角看到的DNS简易服务流程,DNS就像一个提供简单、直接的转换服务的黑盒子。但是事实上DNS内部是非常复杂的(当然请放心,本篇博客不会研究太深,我们将有趣的走完全程)。
2.2.1分布式、层次数据库我们将通过了解DNS的结构组成为起点,进一步丰富上述简易流程的版本。DNS使用了大量的DNS服务器,它们以层次的方式组织(即存在上下级)。我们将DNS服务器划分为以下三类,这也是DNS服务器的层级结构(树状结构):
(1):根DNS服务器:提供顶级域DNS服务器(TLD)的IP地址
(2):顶级域DNS服务器(TLD):提供权威DNS服务器的IP地址
(3):权威DNS服务器:将因特网上具有公共可访问主机的主机名映射为IP地址
除此之外,我还要介绍另一类重要的DNS服务器,名为本地DNS服务器。严格来说,我们通常不将它划分为DNS服务器结构,因为它是我们与DNS服务器层次结构之间的代理(本地DNS服务器通常离本地客户相隔不超过几台路由器),本地DNS服务器先接收本地客户发出的请求,再请求传入DNS服务器层级结构中。
2.2.2DNS实现查询的两种方式接下来我们将通过两种查询方式了解各类DNS服务器之间是如何运作的。
1.递归查询 2.迭代查询理论上任何DNS查询既可以是迭代的也可以是递归的。但是实际上,网络中查询通常是如迭代查询的图解中所示。我们在客户主机与本地域名服务器之间使用递归查询(未进入DNS服务器层级结构之前)。在进入DNS服务器层级结构之后,通常使用迭代查询。
将这两种查询方式结合我们最初的DNS服务流程相结合,那么我们就会得到较为完整的DNS工作机理。当然这种流程还是存在较大的缺陷的,比如我们要实现一个主机名到IP地址的转换,竟然要发送8份报文。这是计算机网络无法接受的。
2.2.3DNS缓存学习完上一小节DNS两种查询方式之后,我们已经了解了DNS工作机理的大致流程。但是从上面的两幅图解中不难看出,如果我们要实现一个主机名到IP地址的转换,竟然要发送8份报文。这对于庞大的计算机网络来说无疑是巨大的负担。由此,我们将介绍DNS系统极为重要的特色:DNS的缓存功能。这就像Web缓存器一样,为整个计算机网络带来了极大的便利。
在一个请求链中,当某个DNS服务器收到另一个DNS服务器的回答时,我们将其中映射的IP地址缓存到本地的存储器中。这样以来,当下一个请求报文任然向该DNS服务器请求被存储的主机名的IP地址时,该DNS服务器就可以直接从存储器中提取对应IP地址进行回复,即使它不是该IP地址对应主机的权威服务器。但是需要注意的是,DNS会自动更新自己的存储库(因为主机名与IP地址之间的映射并不是永久的),所以DNS服务器会在一段时间后丢弃某些缓存的信息。事实上,因为缓存,除了少数DNS查询以外,根服务器被绕过了。
加上缓存功能,我们的大致流程就实现啦,当然这并不包括DNS服务器的内部实现,我们将在下文中简单介绍DNS内部记录数据的方式。
2.3DNS记录从DNS提供的服务,到DNS的工作机理。我们都没有提及DNS的内部实现,DNS是如何存储和构造资源记录(Resource Record,RR)的呢?DNS报文是如何确定客户的需求的呢?我们要如何存储备份来自其他DNS服务器的IP地址映射呢?我们的IP地址映射的缓存要存储多长时间呢?
对这些问题的困惑都来源于没有对NDS的内部实现进行了解。看似复杂的背后,其实可以用较为简单的四个较为关键的数值进行学习。它们其实是资源记录字段中的4元组。(Name,Value,Type,TTL)。
2.3.1资源记录TTL:该记录的生存时间。
Name和Value的值是有Type决定的
(1):Type=A:Name为主机名,Value是主机名对应的IP地址。
(2):Type=NS:Name:域名(foo.com),Value是知道如何获得该区域中主机IP地址的权威DNS服务器的主机名。
(3):Type=CNAME:Value是别名为Name的主机对应的规范主机名。
(4):Type=MX:Value是别名Name的邮件服务器的规范主机名。
接下来我们通过举例说明进行解析:
如果一台DNS服务器是某主机的权威DNS服务器,那么该DNS服务器就一定包含一条包含用于该主机名的类型A记录(但是拥有该A类型记录的不一定是该主机的权威服务器)。这样该NDS服务器就能直接找到它的本地客户。
如果一台DNS服务器不是该主机的权威服务器,那么它应该包含一条可以找到该主机权威服务器名的记录,那么就是上方对应的NS记录,和一条获得该权威服务器IP的A记录。
2.4DNS的脆弱性大致了解了DNS的工作流程,那么在现实的网络中,既然我们通过主机名获取IP地址都要通过DNS,那DNS岂不是很容易遭受到不法分子的攻击吗?接下来我们简单了解一下DNS是否真的那么脆弱。
针对DNS的攻击无非就大致的分为两种
(1):分布式拒绝攻击(DDoS),带宽洪泛攻击(说简单点就是向DNS发送大量的数据分组,导致DNS回复不过来而瘫痪)。
(2):不法分子通过截获来自主机的请求,将自己装扮成DNS服务器将带有病毒的恶意网站的IP地址返还给客户。
我们先来看看第一种。攻击者确实可以将大量的分组指向根服务器(根服务器数量最少,就像斩首行动一样),但是大多数本地DNS服务器都缓存了顶级域名服务器(TDL),就直接绕开了根服务器。而TDL的缓存技术也可以对此进行保护(就像上面学习的那样)。更为保障的是DNS根服务器有一项功能是分组过滤保护,阻挡了所有指向根服务器的ICMP ping报文。
第二种攻击其实也难以实现,因为不法分子要求截获分组或扼制住DNS服务器。这是极其困难的。
总结来说,DNS具有令人惊讶的健壮性。我们大可放心,目前为止,没有一个攻击妨碍了DNS为我们服务。可见这位招待员身体十分硬朗哈。
作为计算机网络的关键枢纽之一,DNS拥有十分重要的使命。我们通过学习了解DNS的服务流程可以发现,其实DNS的工作流程和计算机网络中的数据传输有着许多的类似之处。我们可以通过复习DNS的工作流程,回忆计算机网络中其他重要的知识。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)