文章目录
- DNS提供的服务
- DNS的工作机理
- DNS查询过程
- DNS缓存
- DNS记录和报文
- DNS记录
- DNS报文
- 针对DNS服务的攻击
DNS提供的服务
DNS,即域名系统(Domain Name System)
提供的服务
- 一种实现从主机名到IP地址转换的目录服务,为Internet上的用户应用程序以及其他软件而非用户提供的功能
- 存储主机别名,实现主机别名到规范主机名以及主机的IP地址之间的转换
- 存储邮件服务器别名,实现邮件服务器别名到邮件服务器的规范主机名和IP地址
- 实现负载平衡,DNS存储一个规范主机名到一个IP地址集合的映射
DNS是什么
一个由分层的DNS服务器(DNS server)实现的分布式数据库
一个使得主机能查询分布式数据库的应用层协议
DNS运行在UDP之上,使用主机的53端口
主机名和IP地址的引入
使用主机名(hostname)或IP地址(IP address)来标识因特网中众多的主机
hostname: 便于记忆,用户使用
IP address: 定长的的、有着层次结构,路由器使用
IP地址
由4个字节组成,每个字节都被句点分隔开
有着严格的层次结构,从左到右扫描时能得到主机在Internet中的位置信息
为什么说DNS协议是应用层协议
- 使用客户-服务器模式运行在通信的端系统之间
- DNS报文是通过端到端运输协议实现端系统之间的传输的
举个例子
用户在浏览器上请求URL www. someschool. edu/index. html,获得www. someschool. edu的IP地址的过程展示
术语介绍
规范主机名(canonical hostname)、主机别名(host aliasing)、邮件服务器别名(mail server aliasing)、负载平衡(load distribution)
host aliasing相较于canonical hostname方便了用户的记忆,mail server aliasing也是同样的道理
负载平衡的实现
繁忙的站点会被冗余地分布在多台服务器上,每台服务器都会有不同的IP地址。于是一个站点会对应到一个IP地址集合,这个IP地址集合存储在DNS数据库中,在用户访问站点时,DNS客户端发出DNS请求,对应的整个IP地址集合进行响应,而在回答中DNS会循环集合中的IP地址次序。而客户只向IP地址排在最前面的服务器发送请求。从而实现了服务器的负载分配平衡
DNS的工作机理
使用带有层级结构的分布式的数据库存储主机名到IP地址的映射
集中式设计DNS的问题
DNS的集中式设计:在因特网上只使用一个DNS服务器,该服务器包含所有的映射。客户直接将所有查询直接发往单一的DNS服务器,同时该DNS服务器直接对所有的查询客户做出响应。
- 单点故障(a single point of failure):该DNS服务器的崩溃将带来整个Internet的瘫痪
- 通信容量(traffic volume):该DNS服务器的负载很重
- 远距离的集中式数据库(distant centralized database):距离远的网络将有巨大的时延
- 维护(maintenance):一个服务器需要为所有的Internet主机保留记录
DNS服务器的层次结构
没有一台DNS服务器拥有Internet上所有主机的映射
3种类型的DNS服务器:根DNS服务器、顶级域(Top-Level Domain, TLD) DNS服务器和权威DNS服务器。
- 根DNS服务器:提供TLD服务器的IP地址
- 顶级域服务器:TLD服务器提供了权威DNS服务器的IP地址。分为通用顶级域服务器和国家的顶级域服务器
- 权威DNS服务器:存储主机名与IP地址之间的映射记录
本地DNS服务器
local DNS server
每个ISP有一台本地DNS服务器(默认名字服务器)
主机与DNS服务器关系:当主机与某个ISP连接时,该ISP提供一台主机的IP地址(ISP给该主机分配地址),该主机具有一台或多台其本地DNS服务器的IP地址(客户端-服务器架构)
作用:本地DNS服务器可以视作一个代理,当host发起DNS请求某一域名对应IP地址时,该DNS请求将首先被发往本地DNS服务器,本地DNS服务器再将其转发到DNS服务器层次结构中
DNS查询过程
递归查询(recursive query):所有查询都以自己的名义来请求,在查询的传递过程中,本地DNS服务器、根DNS服务器、顶级域服务器、权威DNS服务器都是在做同样的事情,即查询指定域名对应的IP地址
迭代查询(iterative query):在查询过程中,每一级的服务器都在做自己所能做的,即缩小查询的范围,根DNS服务器返回查询域名对应的顶级域IP,顶级域服务器返回查询结果对应的权威域IP
举个例子
需求:主机cse. nyu. edu 想知道主机 gaia. cs. umass. edu的IP地址——共需要发送4份查询报文,4份回答报文
- 主机cse. nyu. edu向它的本地DNS服务器dns. nyu. edu发送一个包含被转换主机名的DNS查询报文
- 本地DNS服务器将该报文转发到根DNS服务器。根DNS服务器注意到其edu前缀并向本地DNS服务器返回负责edu的TLD的IP地址列表
- 本地DNS服务器则向这些TLD服务器之一发送查询报文。该TLD服务器注意到umass. edu前缀,并用权威DNS服务器的IP地址进行响应
- 本地DNS服务器直接向dns. umass. edu重发查询报文,dns. umass. edu用gaia. cs. umass. edu的IP地址进行响应
从cse.nyu.edu到dns.nyu.edu为递归查询,后续的三个查询均为迭代查询
展示一个查询链中所有查询均为递归查询的例子
DNS缓存
DNS caching
目的:改善时延性能、减少Internet中的DNS报文数量
原理:当某DNS服务器接收到一个DNS回答时,该映射将被此DNS服务器缓存
作用:当对某主机名的查询在本地DNS服务器中已经缓存了对应的主机名/IP地址对时,则该本地DNS服务器能直接提供要求的IP地址,而不必进行任何查询。此外,本地DNS服务器也能缓存TLD服务器的IP地址,使得在大多数查询中根DNS服务器都被绕过了
DNS记录和报文
DNS记录
资源记录
Resource Record, RR
主机名到IP地址映射的存储形式
一条RR是一个四元组,形式化为(Name, Value, Type, TTL)
其中TTL是该RR的生存时间,即其多久之后会被删除
RR有四种类型,Type决定了Name和Value的值,进而决定该种RR记录的功能
- 若Type=A,则Name为hostname,Value为对应的IP address,即标准的hostname到IP address的映射
- 若Type=NS,则Name为一个域,Value为知道如何获得该域中主机IP地址的权威DNS服务器的hostname(这里的域并不局限于最小的权威域,可以是顶级域,子顶级域等等,在迭代查询的过程中,如根DNS服务器、TLD服务器返回的均一条NS RR+一条A RR)
- 若Type=CNAME,则Name为aliasing,Value为该主机的规范主机名
- 若Type=MX,则Name为邮件服务器的aliasing,Value为该邮件服务器的规范主机名。通过使用MX记录,一个公司的邮件服务器和其他服务器(如它的Web服务器)可以使用相同的别名
DNS报文
DNS中仅有查询和回答两种报文,且两种报文格式相同
手动发送DNS查询报文:在终端使用nslookup程序
在DNS数据库中插入记录
在注册登记机构(registrar)注册域名,如networkutopia. com,注册者需要提供基本和辅助权威DNS服务器的名字和IP地址。registrar则会把一条NS RR和一条A RR输入TLD com服务器中,将一条对应web服务的A RR和一条对应邮件服务的MX RR输入注册者的权威DNS服务器中
针对DNS服务的攻击
分布式拒绝服务(DDoS)
带宽洪泛攻击,攻击root DNS服务器,攻击TLD服务器
实现Web用户重定向到攻击者的Web站点
中间人攻击,攻击者截获来自主机的请求并返回伪造的回答
DNS毒害攻击,,攻击者向一台DNS服务器发送伪造的回答,诱使服务器在它的缓存中接收伪造的记录