一、DNS提供的服务

  • DNS是:
    • (1)一个由分层的DNS服务器(DNS server)实现的分布式数据库;
    • (2)一个使得主机能够查询分布式数据库的应用层协议。
  • DNS协议运行在UDP之上,使用53号端口
  • 与http,FTP,SMTP协议一样,DNS协议是应用层协议,其原因在于:
      1. 使用客户-服务器模式运行在通信的端系统之间;
      1. 在通信的端系统之间通过下面的端到端运输协议来传送DNS报文。
  • 考虑当某个用户主机上的一个浏览器(即一个HTTP客户请求URLwww.someschool.edu/index.html页面时会发生什么现象。为了使主机能够请求报文发送到web服务器www.someschool.edu,该用户需要获取其IP地址。做法如下:
    • 同一台用户主机上运行着DNS应用的客户端。
    • 浏览器从上述URL中抽取出主机名www.someschool.edu,并将这台主机名传给DNS应用的客户端。
    • DNS客户向DNS服务器发送一个包含主机名的请求
    • DNS客户最终会收到一份回答报文,其中含有对应于该主机名的IP地址。
    • 一旦浏览器接收到来自DNS的该IP地址,它能够向位于该IP地址的80端口的HTTP服务器进程发起一个TCP连接。
  • 除了进行主机名到IP地址得转换外,DNS还提供了一些重要的服务

    • 主机别名(host aliasing):规范主机名(Canonical Hostname)到主机别名的查询
    • 邮件服务器别名(mail server aliasing)
    • 负载分配(load distribution):一个域名可能对应多台IP,DNS可是实现负载分配

      二、DNS工作机理概述

  • 假设运行在用户主机上的某些应用程序需要将主机名转换为IP地址。这些应用程序将调用DNS客户端,并指明需要被转换的主机名。用户主机上的DNS接收到后,向网络中发送一个DNS查询报文。所有的DNS请求和回答报文使用UDP数据报经端口53发送。经过若干毫秒到若干秒的时延后,用户主机上的DNS接收到一个提供所希望映射的DNS回答报文。这个映射结果则被传递到调用DNS的应用程序

  • DNS服务是一个实现查询主机名对应IP地址的黑盒服务,当应用程序希望查询一个主机名对应的IP地址时,会将主机名传递给运行在端系统上的DNS客户端,由DNS客户端向DNS服务器查询,最后返回IP地址给应用程序。
  • DNS服务集中式设计的问题:

    • 单点故障(A Single Point of Failure)。如果该DNS服务器崩溃,整个因特网随之瘫痪
    • 通信容量(Traffic Volume)。单个DNS服务器不得不处理所有的DNS查询(用于为上亿台主机产生的所有HTTP请求报文和电子邮件报文服务)
    • 远距离的集中数据库(Distant Centralized Database)。单个DNS服务器不可能”邻近”所有查询客户,会导致严重时延
    • 维护(maintance)。单个DNS服务器不得不为所有的因特网主机保留记录

      1、分布式、层次数据库

  • 根DNS服务器:13个根DNS服务器,标号A-M,存在镜像

  • 顶级域DNS服务器:负责顶级域名,com、org、net、edu、gov
  • 权威DNS服务器:因特网上具有公共可访问权限的主机
  • 本地DNS服务器:每一个ISP都有一台本地DNS服务器(不属于DNS服务层次结构)

DNS:因特网的目录服务 - 图1

DNS查询

  • 迭代式查询(所问非所答):一般DNS查询方式

DNS:因特网的目录服务 - 图2

  • 递归式查询(所问即所答):

DNS:因特网的目录服务 - 图3
域名解析过程
DNS:因特网的目录服务 - 图4

2、DNS缓存

  • DNS缓存(DNS Cashing)用于改善时延性和减少因特网上传输DNS报文的数量。
  • 在一个请求链中,当某DNS服务器接收一个DNS回答时,它能将映射缓存在本地存储器中

    三、DNS记录和报文

  • 资源记录(Resource Record, RR):提供主机名到IP的映射,四个字段,Name、Value、Type和TTL,其中TTL为记录的生存时间。 | Type | Name | Value | | :—- | :—- | :—- | | A | 主机名 | IP地址 | | NS | 域 | 知道该域中主机IP的权威DNS服务器主机名 | | CNAME | 规范主机名 | 主机别名 | | MX | 邮件服务器规范主机名 | 邮件服务器别名 |

1、DNS报文

  • DNS只有查询和回答报文,且查询报文和响应报文格式相同

DNS:因特网的目录服务 - 图5

  • 前12个字节是首部区域:
    • 第一个字段(标识符)是一个16比特的数,用于标识该查询。这个标识符会被复制到对查询的回答报文中,以便让客户用它来匹配发送的请求和接收到的回答
    • 标志字段中含有若干个标志:
      • 1比特的“查询/回答”标志位指出报文是查询报文(0)还是回答报文(1)
      • 当某DNS服务器是所请求名字的权威DNS服务器时,1比特的“权威的”标志位被置在回答报文中
      • 如果客户(主机或者DNS服务器)在该DNS服务器没有某记录时希望它执行递归查询,将设置1比特的“希望递归”标志位。如果该DNS服务器支持递归查询,在它的回答报文中会有1比特的“递归可用”标志位置位
    • 4个有关数量的字段指出了在首部后的4类数据区域出现的数量
  • 问题区域包含正在进行的查询信息,该区域包括:
    • (1)名字字段,包含正在被查询的主机名字
    • (2)类型字段,指出有关该名字的正被询问的问题类型,例如主机地址是一个与名字相关联(类型A)还是与某个名字的邮件服务器相关联(类型MX)
  • 在来自DNS服务器的回答中,回答区域 包含了对最初请求的名字的资源记录。在回答报文的回答区域中可以包含多条RR,因此一个主机名能够有多个IP地址
  • 权威区域包含了其他权威服务器的记录
  • 附加区域包含了其他有帮助的记录。例如,对于一个MX请求的回答报文的回答区域包含了一条资源记录,该记录提供了邮件服务器的规范主机名。该附加区域包含一个类型A记录,该记录提供了用于该邮件服务器的规范主机名的IP地址

    2、在DNS数据库中插入记录