这篇文章上次修改于 319 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

计算机网络笔记3——DNS服务

DNS服务

Domain Name System,管理域名的服务器,基于UDP,53端口。

已知ip地址是访问的主要方式,但由于数字难以记忆,便有了域名,域名便于记忆,再建立DNS用于对应域名和ip地址,在HTTP,SMTP,FTP中访问的域名,都会被客户端内含的DNS应用发送请求,获取到这个域名背后的ip。

DNS的服务:域名→ip and 域名别名→域名

实现机理

DNS看起来是一个实现简单域名到ip映射的黑盒服务,实际上由于大量的流量以及要保证稳定性,背后有一定的结构。

DNS采用了分布式、层次数据库

有三种DNS服务器:根DNS服务器,顶级域(TLD)DNS服务器,权威DNS服务器

  • 根DNS服务器:目前有13组根DNS服务器,由A到M命名,分别由不同的组织管理。这些服务器在全球分布广泛。根名字服务器提供TLD服务器的IP地址。
  • TLD服务器:顶级域名指的是域名中的最后一部分例如 www.baidu.com 中的com就是顶级域名。TLD服务器是根DNS服务器的下一级服务器,负责解析属于其顶级域名下的所有二级域名。TLD服务器提供了权威DNS服务器的IP地址。
  • 权威DNS服务器:为域名提供解析结果的服务器。它存储了域名与IP地址的对应关系。权威DNS服务器是DNS解析链中的最后一环,返回结果ip。

还有一种DNS服务器我们称作本地DNS服务器:

本地DNS服务器是指用户所在网络中的DNS服务器,用于解析用户设备发起的DNS查询请求。本地DNS服务器通常由ISP或网络管理员管理运营,也可以是用户自己搭建的DNS服务器。其功能包括缓存DNS查询结果、转发未缓存的查询请求、处理本地域名解析等。

这有点像用户代理,对于用户而言,不用直接去访问我们上面所说的三个主要DNS服务器,而是由本地DNS服务器完成三次的请求,把结果返回,同时具有缓存功能。

递归查询和迭代查询

递归查询

  • DNS客户端向DNS服务器发起请求,要求其完成整个查询过程。
  • 服务器负责所有后续查询,直到获取最终结果。
  • 通常用户的本地DNS服务器对外提供递归查询服务。

迭代查询

  • DNS客户端向DNS服务器发起请求,DNS服务器返回指向其他DNS服务器的引用。
  • 客户端根据引用继续查询,逐步获取最终结果。
  • DNS服务器之间通常使用迭代查询。

DNS资源记录(Resource Record)

资源记录是一个包含了下列字段的4元组:

(Name, Value, Type, TTL)

TTL是记录的生存时间,记录了什么时候要从缓存中删除这条记录。

资源记录类型:

  • Type=A(Address Record):该记录为(主机名,ip地址)例如(example.foo.com, 145.37.93.126, A)
  • Type=AAAA(IPv6 Address Record):ipv6的映射记录。
  • Type=NS(Name Server Record):该记录为指定域名的权威DNS服务器,这个记录用于沿着查询链来路由DNS查询。当添加了这样一个记录,访问这个域名时,会去指定的DNS服务器查找其ip。例如:(example.com, example.dns.com, NS)
  • Type=CNAME(Canonical Name Record):将一个域名别名映射到另一个域名,也就是域名别名,当遇到第一个域名,就实际上对应第二个域名,例如:(ex.com, example.com, CNAME)。
  • Tpye=MX(Mail Exchange Record):指定电子邮件服务器,负责接收域名的电子邮件,例如:(example.com, mail1.example.com, MX),当要发送邮件给user@example.com,正常会去dns寻找example.com,但由于是邮件会优先查看MX记录,进行映射从而转去找mail1.example.com

DNS报文

DNS服务器的一次服务只有询问和回答,故报文也只有这两种,并且他们格式一致

由五部分组成:头部, 问题节,答案节,授权信息节,附加信息节

头部

头部有六个数据:标识符,标志,问题数,回答RR数,权威RR数,附加RR数(RR就是资源记录)

头部一共有12个字节,6个字段。其中后四个字段分别说明了后四个部分的大小和数量。

主要讨论:标识符 和 标志

  • 标识符是用于匹配询问和回答的,回答会包含和询问一样的标识符,这是一个16bit的数。便于询问者匹配正确的回答。
  • 标志位即flag,是一个16bit的bitset,用于表示该报文的基本类型等:
  1. QR码(Query/Response):第0位用于指出该报文是询问报文还是回答报文,0表示询问,1表示回答。
  2. Op码(操作码):第1-4位,表示查询的类型,一般为0(标准查询),其他值包括1(反向查询)、2(服务器状态请求)等。
  3. AA (Authoritative Answer) 码:第5位,用于表示响应是否是权威应答。1表示是权威应答,0表示不是。
  4. TC (TrunCation) 位:第6位,表示报文是否被截断。1表示报文长度超过512字节且被截断,0表示没有截断
  5. RD (Recursion Desired) 位:第7位,表示客户端是否希望服务器递归解析。1表示希望递归解析,0表示不希望
  6. RA (Recursion Available) 位:第8位,表示服务器是否支持递归解析。1表示支持,0表示不支持
  7. Z 位:保留位,9-11位,为0。
  8. RCODE (Response Code):第12-15位:表示响应的状态码,常见值包括0(无错误)、1(格式错误)、2(服务器失败)、3(名字错误)等

问题记录

客户端查询域名时,需要向服务端发送请求报文;待查询域名作为问题记录,保存在问题节中。

问题记录由 3 个字段组成:

  • 待查询域名( Name ),这个字段长度不固定,由具体域名决定;
  • 查询类型( Type ),域名除了关联 IP 地址,还可以关联其他信息,常见类型包括:
    • 1 表示 A 记录,即 IP 地址;
    • 28 表示 AAAA 记录,即 IPv 6 地址;
  • 类 ( Class )通常为 1 ,表示 TCP/IP 互联网地址;

资源记录

同样作为资源返回,发送应答报文;域名查询结果作为资源记录,保存在答案以及其后两节中

资源记录结构共有 6 个字段:

  • 被查询域名( Name )
  • 查询类型( Type )
  • 类 ( Class )
  • 有效期( TTL )
  • 数据长度( Resource Data Length )
  • 数据( Resource Data )

如果想要添加自己的服务器域名和ip,根据对应的机构上传,并完成A资源记录,如果想要支持邮件服务,也就需要MX资源记录。