应用层(四)
DNS(domain name system)
提供的服务
识别主机的方式:1)主机名;2)IP地址
人喜欢用主机名,路由器喜欢定长、有层次地IP地址,因此需要一种能map主机名和IP地服务,即域名系统(DNS)
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库地应用层协议
- DNS服务器运行在UDP之上,使用53端口
DNS通常是由其他应用层协议所使用,包括HTTP、SMTP、FTP,将用户提供的主机名解析为IP地址
提供的其他服务:
- 主机别名(host aliasing):更加容易记忆
- 邮件服务器别名
- 负载分配:冗余的web服务器,很多IP地址响应同一个名字
工作机理
集中式DNS(Internet上只使用一台DNS服务器)不好:完全无扩展性!
- 单点故障:一坏就完
- 流量规模大
- 远距离的:远的时延长
- 维护成本高:保留所有主机记录,中央数据库庞大,得持续更新
基于上述原因,采取分布式层次数据库
分布式层次数据库
假设我们访问www.xherlock.top
- 客户首先与根DNS服务器联系,返回顶级域名top的TLD服务器的IP地址
- 客户再与.top的DNS服务器之一联系,返回xherlock.top的权威服务器的IP地址
- 客户与xherlock.top的DNS服务器联系,返回主机名为www.xherlock.top的IP地址
---
- 根DNS服务器:全球13个,9个在美国,日本、英国、瑞典各一台
- 顶级域DNS服务器:com、org、net、edu、gov和其他国家级域名都有TLD服务器
- 权威DNS服务器:"这个域名我说的算"
本地DNS服务器:不属于层次结构,但对层次结构十分重要
每个ISP都有一台本地DNS服务器(也称默认名称服务器),当主机发起DNS请求,请求被送到本地DNS服务器上,此时本地上有最近的 名称-地址 翻译对(可能过期),可以充当代理,将请求发送往层次结构中
此处使用www.xherlock.top访问www.enlightener666.cn
递归查询(1、8)、迭代查询(其他三个查询)
全部采用递归查询会导致很大解析负担
DNS缓存
为了改善时延性能并减少在internet行导出传输的DNS报文数量,DNS广泛使用了缓存技术
在一个请求链中,当某DNS服务器接收一个DNS回答时,能将映射缓存在本地存储器上,这样另一个对相同主机名的查询到达本地DNS服务器后可以直接获得所需IP地址,即使它不是该主机的权威服务器(但是映射不是持久的,经过一段时间【TTL】,缓存信息会丢失)
也正因这个原因,根服务器不经常被访问
DNS记录
所有DNS服务器存储了资源记录
(Resource Record,RR),提供了主机名到IP地址的映射
RR format: (Name, Value, Type, TTL) 四元组
TTL是该记录的生存时间,决定了资源记录应当从缓存中删除的时间,Name、Value的值取决于Type
- Type=A:Name是主机名,Value是IP地址,此记录提供了标准的主机名到IP映射
eg:(www.bar.foo.com, 145.37.93.126, A)
- Type=NS:Name是域,Value是能够获得该域主机IP的权威服务器的主机名
eg:(foo.com, dns.foo.com, NS)
- Type=CNAME:Name是别名,Value是别名为Name的主机对应的规范(canonical)主机名
eg:(foo.com, relay1.bar.foo.com, CNAME)
- Type=MX:Name是别名,Value是别名为Name的邮件服务器的规范主机名
eg:(foo.com, mail.bar.foo.com, MX)
DNS报文
查询和回答报文格式一样
首部区域:前12字节
- 标识符:16bits,标识该查询,会被复制到对查询的回答报文中,以便匹配
- 标志flags:1bit的0(查询)/1(回答)
可以使用nslookup工具发送DNS查询报文