应用层(四)

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服务器)不好:完全无扩展性!

  • 单点故障:一坏就完
  • 流量规模大
  • 远距离的:远的时延长
  • 维护成本高:保留所有主机记录,中央数据库庞大,得持续更新

基于上述原因,采取分布式层次数据库

分布式层次数据库

image-20220326211235004.png

假设我们访问www.xherlock.top

  1. 客户首先与根DNS服务器联系,返回顶级域名top的TLD服务器的IP地址
  2. 客户再与.top的DNS服务器之一联系,返回xherlock.top的权威服务器的IP地址
  3. 客户与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

image-20220327093624368.png

递归查询(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报文

查询和回答报文格式一样

image-20220327103941531.png

  • 首部区域:前12字节

    • 标识符:16bits,标识该查询,会被复制到对查询的回答报文中,以便匹配
    • 标志flags:1bit的0(查询)/1(回答)

可以使用nslookup工具发送DNS查询报文

最后修改:2022 年 03 月 27 日
如果觉得我的文章对你有用,请随意赞赏