[计算机网络]DNS(域名系统):网络的招待员(因特网的目录服务)

域名系统(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的工作流程,回忆计算机网络中其他重要的知识。

        

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又是谁在卷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值