在上一篇文章中,介紹瀏覽器解析 URL 的黑魔法,這篇文章來介紹一下 DNS 黑魔法。html
DNS 的全稱是 Domain Name System 或者 Domain Name Service,它主要的做用就是將人們所熟悉的網址 (域名) 「翻譯」成電腦能夠理解的 IP 地址,這個過程叫作 DNS 域名解析。面試
網絡通信大部分是基於TCP/IP的,而TCP/IP是基於IP地址的,因此計算機在網絡上進行通信時只能識別如「192.168.0.0.1」之類的IP地址,而不能認識域名。而對於人類的心智模型來講,很難記住10個以上IP地址的網站,因此咱們訪問網站時,更多的是在瀏覽器地址欄中輸入域名,就能看到所須要的頁面,這是由於有一個叫「DNS服務器」的計算機自動把咱們的域名「翻譯」成了相應的IP地址,而後調出IP地址所對應的網頁。chrome
DNS 解析在面試中是一個常見的問題。常常會存在這樣的題目「在瀏覽器輸入一個 URL 以後發生了什麼?」,這個問題擴展開來就囊括了 DNS 的解析過程。固然還有的面試官會把 DNS 的解析過程單獨拿出來問。這篇文章就詳細來說講 DNS 怎麼解析的。segmentfault
用戶經過瀏覽器瀏覽過某網站以後,瀏覽器就會自動緩存該網站域名對應的地址,當用戶再次訪問的時候,瀏覽器就會從緩存中查找該域名對應的IP地址,由於緩存不只是有大小限制,並且還有時間限制(域名被緩存的時間經過屬性來設置),因此存在域名對應的找不到的狀況。windows
當瀏覽器從緩存中找到了該網站域名對應的地址,那麼整個解析過程結束,若是沒有找到,將進行下一步驟。對於的緩存時間問題,不宜設置太長的緩存時間,時間太長,若是域名對應的發生變化,那麼用戶將在一段時間內沒法正常訪問到網站,若是過短,那麼又形成頻繁解析域名。瀏覽器
瀏覽器爲了提升響應的時間,會對 DNS 記錄緩存,可是不一樣的瀏覽器緩存的時間不同。緩存
chrome://net-internals/#dns 這裏能夠看各域名的DNS 緩存時間。Chrome對每一個域名會默認緩存60s。可是有可能chrome://net-internals顯示不出來dns緩存。只有一個清除緩存的按鈕。安全
當遇到這樣的狀況時,你能夠按照以下的流程操做來查看 DNS 緩存,這個不能查看 DNS 緩存是由於 chrome://net-internals/ 的一些功能已經在Chrome 71以後被移除了。服務器
Firefox有DNS緩存功能,默認緩存時間只有1分鐘。微信
IE將DNS緩存30min。
Safari DNS緩存時間約爲10s
若是一個域名的DNS解析結果會有多個的話,瀏覽器是如何處理的呢?Chrome瀏覽器會優先向第一個IP發起HTTP請求,若是不通,再向後面的IP發起HTTP請求。DNS 域名查詢網址
若是第一個步驟沒有完成對域名的解析過程,那麼瀏覽器會去系統緩存中查找系統是否緩存過這個域名對應的地址,也能夠理解爲系統本身也具有域名解析的基本能力。在系統中,能夠經過設置文件來將域名手動的綁定到 某個 IP 上。若是使用過代理軟件(如 fiddler )的同窗可能對這個比較清楚一點,在系統的 hosts 文件,能夠用來設置域名和 IP 的對於關係。對於普通用戶,並不推薦本身手動綁定域名和,對於開發者來講,經過綁定域名和,能夠輕鬆切換環境,能夠從測試環境切換到開發環境,方便開發和測試。
hosts文件是一個用於儲存計算機網絡中各節點信息的計算機文件。這個文件負責將主機域名映射到相應的IP地址。hosts文件一般用於補充或取代網絡中DNS的功能。和DNS不一樣的是,計算機的用戶能夠直接對hosts文件進行控制。hosts文件的做用很是大,能夠自由解析域名。
位置若是有問題請告知,謝謝!
若是在本機上沒法完成域名的解析,那麼系統只能請求本地域名解析服務系統進行解析,本地域名系統通常都是本地區的域名服務器,好比你鏈接的校園網,那麼域名解析系統就在你的校園機房裏,若是你鏈接的是電信、移動或者聯通的網絡,那麼本地域名解析服務器就在本地區,由各自的運營商來提供服務。對於本地服務器地址,系統使用命令就能夠查看,在和系統下,直接使用命令來查看服務地址。通常都緩存了大部分的域名解析的結果,固然緩存時間也受域名失效時間控制,大部分的解析工做到這裏就差很少已經結束了,負責了大部分的解析工做。
本地域名解析器尚未完成解析的話,那麼本地域名解析服務器將向根域名服務器發起解析請求。本地域名解析向根域名服務器發起解析請求,根域名服務器返回的是所查域的通用頂級域xxx地址。
因爲早期的 DNS 查詢結果是一個512字節的 UDP 數據包。這個包最多能夠容納13個服務器的地址,所以就規定全世界有13個根域名服務器,編號從a.root-servers.net一直到m.root-servers.net。
這13臺根域名服務器由12個組織獨立運營。其中,Verisign 公司管理兩臺根域名服務器:A 和 J。每家公司爲了保證根域名服務器的可用性,會部署多個節點,好比單單 Verisign 一家公司就部署了104臺根域名服務器(2016年1月數據)。
因此,根域名服務器其實不止13臺。據統計,截止2016年1月,全世界共有 517 臺根域名服務器。你能夠在 http://root-servers.org 這個網站查到全部根域名服務器的信息。
本地域名解析服務器向gTLD服務器發起請求。gLTD服務器查詢並返回域名對應的Name Server域名服務器的地址,一般是你註冊的域名服務器,例如你在某個域名服務器提供商申請的域名,那麼這個域名解析任務就由這個域名服務提供商來完成。
權威域名服務器會查詢存儲的域名和ip的映射關係表,將 ip 連同一個 TTL 值返回給DNS 本地域名服務器。
本地域名服務器拿到 ip 和 TTL 會緩存起來。返回給瀏覽器。
每一次DNS解析須要20~120ms ,第一次解析完成後,會把解析信息緩存到本地 下一次再次發送這個域名請求,直接從本地緩存中進行解析了
一個頁面中域名不少那麼須要解析的就不少服務器。減小域名解析(頁面中儘量少用不一樣的服務器),可是真實狀況要作一個取捨: 爲了節約服務器資源,大型網站通常都是服務器分佈式 或者 服務器分離 WEB資源服務器 圖片服務器 數據服務器 .....
DNS解析會有20ms~120ms的耗時,哪減小這個耗時是有必要的,一般是作飯是減小 DNS 的請求次數,儘量不要請求太多的服務器解析。可是如今不少的公司爲了作負載均衡或者服務器的分離獨立部署,都是更可能多請求服務器。哪還有一種作法就是 DNS 預解析,DNS預解析其實就是減小域名解析成IP的時間。
<link rel="dns-prefetch" href="xxx"></link>
<meta http-equiv="x-dns-prefetch-control" content="on"/>
DNS劫持即經過某種技術手段,篡改正確域名和IP地址的映射關係,使得域名映射到了錯誤的IP地址,所以能夠認爲DNS劫持是一種DNS重定向攻擊。DNS劫持一般可被用做域名欺詐,如在用戶訪問網頁時顯示額外的信息來賺取收入等;也可被用做網絡釣魚,如顯示用戶訪問的虛假網站版本並不是法竊取用戶的我的信息。
事件發生在2018年4月24日。黑客針對四段分配給AWS,本應做爲AWS route53 DNS服務器服務地址的IP空間(205.251.192.0/23, 205.251.194.0/23, 205.251.196.0/23, 205.251.198.0/23)發佈了虛假的BGP路由,致使在BGP泄漏的兩個小時期間,本應該AWS route53 DNS服務器的DNS查詢都被重定向到了黑客的惡意DNS服務器。且黑客DNS劫持的目標十分明確,惡意DNS服務器只響應對http://myetherwallet.com 的查詢,其餘域名的查詢均返回SERVFAIL。一旦用戶沒有注意「網站不安全」的提示而訪問http://myetherwallet.com 登陸本身的以太坊錢包,黑客就能夠輕易獲取用戶的私鑰進而竊取用戶的數字貨幣資產。
據不徹底統計,DNS劫持致使兩個小時內有多個用戶的以太坊錢包被轉帳清空,共計至少13000美圓的資產被黑客盜取。
事件發生在2018年。黑客利用D-Link路由器的漏洞,入侵了至少500個家用路由器。黑客入侵後更改受害者路由器上的DNS配置,將受害者的DNS請求重定向到黑客本身搭建的惡意DNS服務器上。黑客入侵後更改受害者路由器上的DNS配置,將受害者的DNS請求重定向到黑客本身搭建的惡意DNS服務器上,最終誘導本來想訪問正常銀行網站的受害者訪問到釣魚網站,並惡意竊取受害者的銀行帳目密碼信息。
黑客誘導本來想訪問正常銀行網站的受害者訪問到釣魚網站,並惡意竊取受害者的銀行帳目密碼信息。
攻擊路由器或者利用路由器的漏洞篡改 DNS 配置。
網絡設備或者軟件直接代替DNS服務器對DNS查詢進行應答。
DNS劫持在互聯網中彷佛已經變成了屢見不鮮,那麼該如何應對各類層出不窮的DNS劫持呢?若是懷疑本身遇到了DNS劫持,首先要作的事情就是要確認問題。
阿里雲的能夠檢測域名是否被劫持(注意我不是阿里雲的拖,哈哈哈哈),地址。
若是文章中什麼不對或者寫的很差的地方,請你們多多指正,謝謝!碼字不易,點個贊加個關注吧!
筆者在「深圳蝦皮」,一家口碑還不錯的東南亞電商公司,2021大量招人,機會多多!快來加入咱們吧!
如今有想法,仍是之後有想法的同窗,均可以加我微信[stone---999]!內推你加入咱們的你們庭!