这篇文章上次修改于 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,用于表示该报文的基本类型等:
- QR码(Query/Response):第0位用于指出该报文是询问报文还是回答报文,0表示询问,1表示回答。
- Op码(操作码):第1-4位,表示查询的类型,一般为0(标准查询),其他值包括1(反向查询)、2(服务器状态请求)等。
- AA (Authoritative Answer) 码:第5位,用于表示响应是否是权威应答。1表示是权威应答,0表示不是。
- TC (TrunCation) 位:第6位,表示报文是否被截断。1表示报文长度超过512字节且被截断,0表示没有截断
- RD (Recursion Desired) 位:第7位,表示客户端是否希望服务器递归解析。1表示希望递归解析,0表示不希望
- RA (Recursion Available) 位:第8位,表示服务器是否支持递归解析。1表示支持,0表示不支持
- Z 位:保留位,9-11位,为0。
- 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资源记录。