文章

网络协议打怪升级-应用层:DNS

网络协议打怪升级-应用层:DNS

0.前言

【网络协议打怪升级】是一个系列,我打算以TCP/IP的四层架构作为四个模块, 按模块整理每一层的常用协议所涉及到的知识点。作为一个笔记型的系列, 该系列会由浅入中梳理协议的核心概念运行原理使用场景等,帮助读者从入门到熟悉。

DNS

1.概念

DNS(Domain Name System),域名解析系统,核心作用:

1
将人类可读的域名转换为计算机网络可识别的ip地址

每次网络访问、发邮件、服务器连接其实都使用了DNS协议。

2.解析流程

以我的博客地址https://www.zhangzihe.blog/为例,当客户通过浏览器想要访问这个地址时

  • 1-查询本地缓存:首先会从本地缓存查询
    • 浏览器缓存
    • 本机缓存 如果没有查到对应DNS,本机会递归查询默认DNS服务器(要么最终查到,要么失败)
  • 2-查询默认DNS服务器:默认DNS服务器由运营商或权威机构提供,macos查询本机配置的默认DNS服务器命令如下: 默认DNS服务器默认会迭代查询其他DNS服务器,直到查到DNS数据,返回给本机
1
2
3
4
5
6
7
8
# 查看当前 DNS 服务器地址(Linux/macOS)
cat /etc/resolv.conf

# 输出示例:
nameserver 223.5.5.5
nameserver 223.6.6.6

# 223.5.5.5是阿里巴巴的公共DNS服务的主服务器地址,223.6.6.6是它的备份地址
  • 3-默认DNS服务器递归查询其他服务器
    • 根域名服务器:顶层入口,全球有13组,不会告诉你ip,但会告诉你根域名的服务器的地址(.blog的顶级域名服务器在哪)
    • 顶级域名服务器:告诉你域名对应的权威DNS服务器地址
    • 权威DNS服务器:告诉你域名对应的ip地址
    • 其他默认域名服务器

3.依赖的传输层协议

DNS协议默认依赖UDP协议,原因在于DNS请求的服务包小,也不需要建立连接,很适用于快速且广播的UDP协议。

然而,在某些特殊情况下,DNS也会使用TCP协议:

  • DNS相应数据超过512字节(超过了UDP的限制),当UDP容纳不下时,客户端会重新发一次TCP查询请求
  • 区域传输:域名服务器之间传输完整记录(主从同步),数据量较大,必须使用TCP
  • 一些其他现代协议:比如DoT(DNS over TLS)也基于TCP,它更安全
项目UDPTCP
是否默认
使用场景小数据量响应内容大/区域传输/安全DNS
端口53 | 53 
优点快、轻量可靠、传输数据量大
缺点不保证可靠开销大

4.DNS记录类型

当DNS在进行查询时,可能查询到多种类型如下

类型作用描述
A映射到ipv4
AAAA映射到ipv6
CNAME将一个域名别名指向另一个域名
MX指定负责接受邮件的服务器地址
NS指定哪个DNS服务器负责解析该域名
TXT存储任意文本信息
SRV为某服务指定主机和端口
SOA域名的权威信息
1
2
3
4
5
6
# A
example.com.      IN   A     93.184.216.34
# AAAA
example.com.      IN   AAAA  2606:2800:220:1:248:1893:25c8:1946
# CNAME
www.example.com.   IN   CNAME   example.com.

注意,CNAME是该域名跳转到另一个域名,不能和A记录同时存在,因此,当你配置你的域名到你的服务器时,不能同时配置A记录和CNAME记录

5.DNS报文结构

DNS报文结构分为Header、Question Section、Answer Section、Authority Section、Additional Section五个模块, 这里只展开需要重点关注的模块和字段

5.1.Header

  • ID: 查询唯一标识,客户端生成,服务端原样返回,匹配请求响应
  • Flags: 十六位标识位,包含是否响应、是否递归等标识
  • 其他:问题数量、回答数量等

5.2.Question Section 查询问题

  • QNAME:查询域名
  • QTYPE:查询的记录类型
  • QCLASS:查询的类

5.3.Answer Section 回答问题

  • NAME:域名
  • TYPE:记录类型
  • RDATA:实际的资源数据
  • 其他

5.4 Authority Section 授权部分

告诉你【我不是权威解析者,你可以去问这几个权威DNS】

5.5 Additional Section 附加部分

提供附加信息,如权威DNS的IP地址,或MX邮件服务器的A记录等

6.总结

1
2
3
4
5
6
7
8
9
总的来说,DNS就是在网络世界中寻找通讯地址的协议,而DNS服务器就是网络世界中的电话簿,他们存储了号码(IP),类型,以及你可以去哪里找到真正的号码的信息。

由于DNS报文数据量小、无需点对点等特性,DNS协议默认使用UDP来进行连接建立与报文传播,在某些特殊情况下(数据量大、安全性等),也会建立TCP连接。

DNS记录有9种类型,分别标识了不同的记录类型,DNS服务器和客户端会对不同的记录类型进行不同的特定处理。

DNS报文被分为五个模块,其中header模块标识了标识位(唯一标识、是否响应等),Question Section模块包括需要查询的内容,Answer Section模块则为查询的结果模块,
其他(授权模块与附加模块)则包括了其他附加信息(如权威DNS地址,指示默认DNS服务器向权威服务器发送请求)。

本文由作者按照 CC BY 4.0 进行授权