学习:DNS协议分析
DNS服务:采用服务器/客户端(C/S)的方式工作。当客户端程序要通过一个主机名称访问网络中的一台主机时,它首先需要得到这个主机名称所对应的IP地址,此时就需要用到DNS,来进行域名转换为网络地址的作用
进行DNS服务查询之前,会先进行系统DNS缓存 > HOSTS文件
,然后会请求 DNS服务器中的缓存
,如果没有就开始迭代DNS查询
win查询dns缓存:ipconfig/displaydns
win清除dns缓存ipconfig/flushdns
DNS报文格式:
首先看看Header段中每个字段的含义:
DNS ID号(DNS ID Number): 用来对应DNS查询和DNS响应 查询/响应(Query/Response, QR): 用来指明这个报文是DNS查询还是响应,占1个比特位。为1代表响应,0代表查询 操作代码(OpCode):用来定义消息中请求的类型 权威应答(Authoritative Answer, AA):这个比特位在响应的时候才有意义。则说明这个响应是由域内权威域名服务器发出的 截断(Truncation, TC):用来指出报文比允许的长度还要长,导致被截断 期望递归(Recursion Desired, RD):如果设置了RD,就建议域名服务器进行递归解析,递归查询的支持是可选的。 支持递归(Recursion Available, RA): 当响应中设定了这个值,说明域名服务器支持递归查询 保留(Z): 未使用,用0表示 响应代码(Response Code): 在DNS响应中指明错误,占4个比特位。 问题计数(Question Count): 问题区段中的问题记录数 回答计数(Answer Count):回答区段中的回答记录数 域名服务计数(Name Server Count):权威区段中的记录数 额外记录数(Additional Records Count):在额外信息区段中的记录数 问题区段(Question Section):包含有被发送到DNS服务器的一条或者多条信息 回答区段(Answer Section):含有用来回答查询的一条或者多条资源记录 权威区段(Authority Section):包含权威域名服务器的资源记录 额外信息区段(Additional Information Section): 包含资源记录且大小可变的区段。
分析数据包:
DNS请求数据包:
DNS应答数据包:
需要注意的是:上面的抓到的只是客户端与DNS服务器114.114.114.114之间的递归查询,DNS服务器114.114.114.114还进行了之后的迭代查询
1、递归查询
客户计算机向本地域名服务器的查询一般采用的是递归查询。如果客户机所询问的本地域名服务器无法提供被查询域名的IP地址,那么本地域名服务器就会以DNS客户的身份,向其它根域名服务器继续发出查询请求的报文。
2、迭代查询
本地域名服务器向根域名服务器的查询通常采用的是迭代查询。当根域名服务器收到本地域名服务器的迭代查询请求的报文时,要么给出所要查询的IP地址,要么告诉本地域名服务器“下一步应该向哪个域名服务器进行查询”。然后本地域名服务器就进行后续的查询。
使用wireshark走一遍流程,机器为ubuntu,用linux的dig命令来进行查询下dig www.adexx.xyz +trace
ubuntu向本地DNS服务器发送请求,向根域服务器的ns记录
返回信息如下:
然后向其中的DNS服务器的A记录(自己抓包发现还有请求AAAA的记录)
都拿到了A记录和AAAA记录之后,又向其中DNS服务器的A记录进行DNS查询www.adexx.xyz
的A记录
返回包中,它会返回xyz域的ns记录
然后挑选其中的一条记录z.nic.xyz
,请求dns请求A记录
返回包中,它会返回z.nic.xyz
的A记录
然后请求其IP,尝试获取www.adexx.xyz
的A记录
返回包中却返回了其他服务器的ns记录
然后又继续请求其中的dns服务器(ns记录),请求它的A记录
然后请求dns服务器的A记录,询问www.adexx.xyz
的A记录
最后该dns服务器返回www.adexx.xyz
的A记录
总结:
1、客户端先去向本地DNS服务器请求 根域的NS记录
2、本地DNS服务器查询完之后,向客户端返回了根域的NS记录
3、然后客户端会向本地DNS服务器请求---->这些根域的NS记录中的DNS服务器的A记录
4、本地DNS服务器返回给客户端---->这些根域的NS记录中的DNS服务器的A记录
5、接着客户端就开始向这些DNS服务器请求指定的域名www.adexx.xyz
的A记录
....接着就如上的操作,返回类似.xyz的域名的ns记录 ----> 这些.xyz域的NS记录中的DNS服务器的A记录
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY