DNS/mDNS/DoH/DoT 等DNS协议概括
DNS
端口53
最常用的DNS协议,明文传输(大部分情况使用UDP,少数情况为TCP)
用于域名-IP地址解析
用编程语言表示功能为:
ip_addr
DNS(domain
)
返回类型 函数名(入参)
如
123.58.180.8
DNS(163.com
)
可通过 cmd 命令向当前网卡配置的 DNS 服务器查询
安全性:垃圾级别,参见:用winpcap实现局域网DNS欺骗之一(基础知识)
DNSCrypt
DNS加密版本
mDNS
端口5353
DNS 的多播版
不需要服务器,客户机域名以.local结尾。每一台客户端都自动向局域网广播 mDNS 数据包,支持 mDNS 的目标客户端即可处理并返回 ip 地址。
这对于基于DHCP自动分配IP地址的局域网设备
是非常高效有用的,毕竟原始的 DNS 协议可没有打算支持局域网。
其中苹果的Bonjour就是mDNS的一个实现,此外Android 4.1之后也加入了对mDNS协议的支持。
Windows默认不开启,开启方法(二选一):
- 原生开启支持 https://superuser.com/questions/1330027/how-to-enable-mdns-on-windows-10-build-17134
- 通过第三方软件支持 Bonjour Print Services
- raspberrypi.local 为什么可以ping通以及ssh登录?它是如何被解析的?又如何改变?
DNS 透传版
由 DNS 衍生出的透传版本,大部分都是加密的,实质是把 DNS 数据放在对应的加密网络协议包里透传:
事实上你想 Dns-Over-QQ Dns-Over-Email 都可以,但以下是有事实标准或 RFC 文档标准的
[DoQ]
DNS over QUIC 端口x
无统一规定标准端口
[DoH]
DNS over HTTPS 端口443
[DoT]
DNS over TLS 端口853
参考:https://developers.google.cn/speed/public-dns/docs/secure-transports
参考资料
各协议所在位置图解,TCP和UDP处于平等地位。
另有基于 UDP 改进的传输层协议 QUIC,自带加密和可靠性,但由于基于现有 UDP 改进,因此需占用 UDP 端口。另外 QUIC 也作为 HTTP3 版本所要求使用的传输层协议。
注:TCP和UDP端口并不冲突,因为计算机网络包五元组{源IP,目标IP,源端口,目标端口,传输层协议类型}只要有一个不同就不冲突。
网络包数据帧图,参见:通信数据挖掘学习笔记(一)——网络协议 + 报文抓包-VoidOc-zhihu