不少人没有dns的概念,或者仅仅知道dns负责解析从域名到ip地址,这对普通人来讲,也许是够的,但对于开发者来讲,就远远不够了。html
不少中高级开发者的眼中的DNS是这样的(以百度为例):chrome
读取hosts文件(位于C:\Windows\System32\drivers\etc)--->isp-dnswindows
总的过程是没有问题,但忽略了不少细节。下面咱们就深刻的探讨一下:浏览器
(以window为例)缓存
浏览器-->window缓存-->hosts文件-->DNS服务服务器
1.1.浏览器(以chrome为例)dns 网络
chrome://net-internals/#dns负载均衡
1.2 window 自己缓存ide
1.3 hosts文件google
位于C:\Windows\System32\drivers\etc,再也不赘述。注意,一个域名能够配置多个ip地址,一个ip也能够配置多个域名上。
1.4. ISP-DNS
nslookup解析
C:\Users\dell>nslookup www.baidu.com 服务器: ns-pd.online.sh.cn Address: 202.96.209.133 非权威应答: 名称: www.a.shifen.com Addresses: 115.239.210.27 115.239.211.112 Aliases: www.baidu.com
上海电信的服务,ip地址为202.96.209.133
百度的别名为:www.a.shifen.com
对应的ip地址为
115.239.210.27
115.239.211.112
两个ip地址起到灾备和负载均衡的做用
更多详细的信息能够使用dig +trace命令(window自己不支持dig命令,须要额外安装,请自行搜索windows下的dig安装过程,再也不赘述)
浏览器访问www.baidu.com,使用wireshar进行抓包,并保存。
Wireshark(前称Ethereal)是一个网络报文分析软件。网络封包分析软件的功能是撷取网络封包,并尽量显示出最为详细的网络封包资料。Wireshark使用WinPCAP做为接口,直接与网卡进行数据报文交换。
单独分析抓取的dns报文:
2.1 请求报文
request报文:
响应报文
2.2.数据封装过程
数据封装通常分五层,第一层是应用层协议的数据,第二层分别是TCP封装,第三层IP封装,第四层以太网封装,最后转成二进制的物理报文
2.2.1 dns报文协议
分析一下请求报文
详细信息能够参考附录【3】
2.2.2 UDP协议封装
udp报文格式
其对应的封装以下
2.2.3 ip报文封装
ip报文格式
2.2.3 以太网协议
源mac+源mac地址+协议类型
3.总结
dns是上层协议,和http,ftp等协议是一层的,以下图所示
dns报文的封装是基于UDP的,udp之下是ip的封装,ip又基于以太网的封装,最终转成二进制信号发送出去。
参考资料
【1】https://www.howtogeek.com/197804/how-to-clear-the-google-chrome-dns-cache-on-windows/
【2】https://www.cnblogs.com/liyuanhong/articles/7353974.html
【3】https://blog.csdn.net/tianxuhong/article/details/74922454
【4】https://blog.csdn.net/kernel_jim_wu/article/details/7447377