在学习DNS的过程中给我的启发

在国内,关于DNS相关的话题一直络绎不绝,比如DNS根服务器为什么中国没有,还有Anycast BGP实现负载,为什么DNS只有13个,还有DNS over HTTPS 和 DNS over TLS的优劣等等问题,接下来我会找出几个一一说一下其中的原理,并谈谈通过研究这些问题后我的收获。

DNS和我们每天的上网动作息息相关,它是互联网的一项基本服务,最重要的任务是域名解析,它是一个把域名和IP地址相互映射的分布式数据库,把我们访问网页时的域名翻译成IP地址,让我们顺利浏览网页。这项技术的起因就是为了解决上述需求。因为网络通信大部分都基于TCP/IP协议,也就是需要基于IP地址,所以计算机在网络中互访只能识别IP地址而不是域名,域名是用来方便我们记忆的,所以需要DNS(域名系统)来在中间做翻译。其发展是个很长的过程,也很有趣,有兴趣的可以查看相关历史。对于每级域名的长度限制最多63个字符,域名总长度限制小于253个字符。其实DNS也是可以自己搭建的,最普遍的方式是在Linux服务器中使用BIND软件来实现。搭建BIND需要一定的Linux基础,它也算是比较复杂的Linux服务了。

首先讲一下关于其负载均衡的问题。一些网站为了实现负载均衡,可能会为其分配多个IP地址来实现负载均衡,是一种初级的负载方法,把网址映射到不同的IP地址上。还有一种从整体上的负载均衡技术,就是Anycast BGP,其原理类似CDN,它实现的功能是在全球不同地方去访问相同IP的DNS服务器的延迟都会很低,其实现的原理通俗来讲就是用同一个IP地址的DNS在物理上分布在全球。如何实现的呢,首先介绍一下其中的一个构成:BGP。目前全球的互联网路由都是以BGP路由协议来传播的。它把不同AS号的局域网连接成了互联网,使之能互相访问,其在全球互联网的选路规则一般是AS号最短的路径优先,但有很多种办法可以灵活控制。Anycast BGP的实现前提之一是发布某一IP的组织是要遍布全球的,它在全球各个节点通过BGP来发布这个IP地址,通过BGP的选路功能,世界各地的主机就可以通过各自运营商访问到离自己最近的这个IP的主机,实现低延迟访问。 并且也由此技术获得了抵抗DDoS攻击的能力。

下一个问题是为什么DNS根服务器只有13个?其实应该是有13组,每组都是用上述Anycast BGP技术部署到全世界。13这个数字其实是由UDP包大小决定的。但有人会问为什么不用TCP来传输呢?最主要的是对开销的计算。UDP包头长为8个字节,但TCP包头最小却是20字节,其间相差很大,还有一个原因是TCP是面向连接的,传输之前会进行三次握手,对传输DNS等信息来讲,这种开销实在太大了。第三点是UDP最大安全数据包大小是508字节,因为最开始建立协议时的安全的MTU设置为576(Internet标准MTU值),在此基础上减去最多60的IP头和UDP头,超过这个数就可能被路由器丢弃,所有根域名服务器都是以同一份根域文件返回给顶级域名服务器,其中只能存放13个根域名,所以这是很多因素共同影响的结果。

对于中国大陆为何没有根服务器这一点,查到的内容比较敏感不便多说。还是讲讲DNS over HTTPS 和 DNS over TLS等技术吧。DNS over HTTPS(DoH)是一个安全化的域名解析方式,它通过加密的HTTPS(HTTP+SSL/TLS)协议进行DNS解析请求,来避免原始DNS请求被恶意监听和修改,以此达到保护用户隐私和安全,其规范文件为RFC8484。如果你打开自己的浏览器设置或者软路由设置可能会看到这一项的设置。 在传统的DNS基于TCP或UDP协定,当时还未有安全性的需要,无法适应现代互联网中常见的污染等攻击。后来添加的电子签名等验证虽然能抵挡污染,但对于中间设备的监听仍没有抵挡能力。此技术的使用场景大致分为三种。第一是在应用程序中使用,如在浏览器中内建DoH,其可绕过操作系统的DNS来实现查询。第二种是在本地网络中的域名服务器中安装DoH代理,此方法中客户端继续使用传统方式查询,此方法对使用者透明。第三种是在本地主机安装DoH代理,此方案更加灵活,但缺点是部署比较麻烦。DNS over TLS(DoT)是通过TLS加密并打包DNS的安全协议,使用端口853,其规范文件为RFC 7858和RFC 8310。其也能防止中间人攻击以保护用户隐私。最后再介绍一个新的安全化域名解析方案,DNS over QUIC(DoQ),它使用QUIC协议进行DNS解析,防止中间人攻击和保证用户隐私。该协议与今年5月发布了RFC9259,但暂时未被广泛使用,Adguard是最先宣布启用DoQ服务器的厂商。其优势是QUIC协议本身能让队头堵塞问题得到解决,在比较差的网络环境中表现更好,而且速度比前两者更快一些。

如果想提高自己的Linux水平,可以看一看《Linux就该这么学》这本书,其中也有DNS相关章节,在线阅读网址:www.linuxprobe.com.

通过对这些问题的研究,让我对DNS有了更多更深刻的理解。网络安全绝不是简简单单就能做到的,其中涉及技术和社会环境等各种因素,特别是国内的特殊环境,谁也预料不到2014年的事故是否会再发生。但对于新技术的追求是每个人都能把握的,在此过程中也要注意不要掉入求新不求好的陷阱,适合自己的才是最好的。

相关推荐
西岸行者5 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意5 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码6 天前
嵌入式学习路线
学习
毛小茛6 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J6 天前
从“Hello World“ 开始 C++
c语言·c++·学习