网络协议打怪升级-应用层: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,它更安全
项目 | UDP | TCP |
---|---|---|
是否默认 | 是 | 否 |
使用场景 | 小数据量 | 响应内容大/区域传输/安全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 进行授权