不少人沒有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