P模式中DNS协议用于将域名转换为IP地址,通常使用UDP传输,特定情况才
TCP模式中的DNS协议
DNS协议
(一)基本功能
DNS(Domain Name System,域名系统)是一种因特网服务,用于将域名转换为IP地址,并且还可以进行反向解析,即将IP地址转换为域名,它还能提供其他服务,例如邮件服务器定位(MX记录)、服务定位(SRV记录)等。
(二)工作方式
DNS的工作基于一个分布式且层次化的数据库,这样的设计使得DNS能够扩展到全球范围,其分层结构包括根域名服务器、顶级域名(TLD)服务器和权威域名服务器。
(三)查询过程
- 用户请求:用户在浏览器或其他应用程序中输入一个域名,计算机首先检查本地缓存是否已有该域名的解析记录。
- 递归解析器:如果本地缓存没有找到结果,客户端将请求递交给本机配置的DNS递归解析器,递归解析器负责代表用户去查询最终结果,并将其返回给用户。
- 查询根域名服务器:递归解析器首先查询根域名服务器,根域名服务器可以返回顶级域名服务器的地址。
- 查询顶级域名服务器:递归解析器根据根域名服务器返回的地址信息,查询对应TLD服务器,TLD服务器回应包含了域名的授权DNS服务器的地址。
- 查询权威DNS服务器:递归解析器使用从TLD服务器获取到的权威DNS服务器地址,向权威DNS服务器发送查询请求,权威DNS服务器持有该特定域名的所有DNS记录,是最终可以提供确切解析信息的服务器。
- 获取最终IP地址:权威DNS服务器查找相应的记录,将域名对应的IP地址返回给递归解析器,递归解析器将从权威DNS服务器获得的结果缓存起来,并返回给用户的客户端。
- 客户端处理:用户的客户端接收到递归解析器返回的IP地址后,可以使用这个IP地址与目标服务器建立连接,完成实际的访问请求。
(四)查询类型
- 递归查询:由DNS客户端发起,DNS服务器全权负责直到返回最终结果或者提示找不到为止。
- 迭代查询:由DNS服务器发起,对于请求的域名,如果服务器没有相关信息,会返回下一步需要查询的服务器地址,直到找到最终结果。
DNS协议报文结构
(一)报文首部(Header)
- 标识(ID):16位,用于匹配请求与响应。
- 标志(Flags):包括许多标志位,用于指示是查询还是响应、是否递归查询等,QR(查询/响应),Opcode(操作码),AA(权威应答),TC(可截断),RD(期望递归),RA(可用递归)等。
- 问题计数(Qdcount):16位,表示查询问题部分的数量。
- 回答计数(Ancount):16位,指示回答部分的记录数量。
- 权威记录计数(Nscount):16位,指示权威记录部分的记录数量。
- 附加记录计数(Arcount):16位,指示附加记录部分的记录数量。
(二)查询部分(Question)
- 域名:要查询的域名。
- 查询类型(Qtype):指定查询的DNS记录类型,比如A(主机地址记录)、MX(邮件交换记录)、CNAME(别名记录)等。
- 查询类(Qclass):通常为IN(互联网)。
(三)回答部分(Answer)
- 域名:回答所对应的域名。
- 资源记录类型(Type):记录的类型,例如A、MX等。
- 类(Class):通常为IN。
- TTL:资源记录的生存时间。
- 数据长度:数据字段的长度。
- 数据:实际的记录数据,例如IP地址。
(四)权威部分(Authority)
包含权威域名服务器的记录信息。
(五)附加部分(Additional)
用于传递额外的信息,如解析过程中需要的附加信息。
DNS协议在TCP模式下的使用场景
(一)超过512字节的数据传输
当DNS响应的数据包超过512字节时(例如返回的记录较多或携带DNSSEC信息时),UDP已无法满足需求,此时DNS会自动切换到TCP协议。
(二)区域传输(Zone Transfer)
在DNS主从服务器之间进行区域传输时,必须使用TCP协议,这是因为区域传输涉及到大量的数据传输,包括整个域名区域的记录,需要保证数据的完整性和顺序,而TCP的面向连接特性能够很好地满足这一需求。
(三)防止DNS放大攻击
部分防火墙会强制要求DNS查询走TCP,以防止DNS放大攻击,在这种情况下,DNS查询将使用TCP协议来确保安全性。
DNS UDP与TCP的工作机制对比
功能 | UDP | TCP |
---|---|---|
默认端口号 | 53 | 53 |
连接类型 | 无连接 | 面向连接 |
数据包大小限制 | 512字节(EDNS0扩展到4096字节) | 无限制 |
可靠性 | 不可靠 | 可靠 |
使用场景 | 常规DNS查询 | 区域传输、大数据响应 |
相关问题与解答
(一)问题1:为什么DNS协议要同时使用UDP和TCP两种协议?
- UDP的优势
- 速度快:UDP无需建立连接,减少了握手的时间,能够快速地处理大量的DNS请求,适合常规的小数据包传输,如一般的域名解析请求。
- 效率高:UDP头部较小,占用的网络资源少,在网络负载较重时,能够更高效地利用网络带宽。
- TCP的优势
- 可靠性:TCP是面向连接的协议,具有确认、重传等机制,能够确保数据的完整性和顺序,适合复杂的DNS记录同步和数据完整性校验,如区域传输等场景。
- 支持大数据传输:当DNS响应的数据包较大时,UDP无法满足需求,而TCP可以传输任意大小的数据包,保证了数据的完整传输。
(二)问题2:在什么情况下DNS查询会从UDP切换到TCP?
- 响应数据包过大:如果DNS服务器发现DNS响应报文的长度大于512字节,使用UDP传输时,多出来的部分会被抛弃(截断TrunCation),服务器会把这个部分被抛弃的DNS报文首部中的TC标志位置为1,以通知客户端该DNS报文已经被截断,客户端收到之后会重新发起一次TCP请求,从而使得它将来能够从DNS服务器收到完整的响应报文。
- 区域传输需求:在进行DNS主从服务器之间的区域传输时,由于涉及到大量的数据传输,