DNS的各種進階新玩法

你們好,我的網工朋友,今天和你聊聊DNS。

01 什么是DNS?

mac地址誕生,可是太不容易記憶了,出現了簡化了IP形式,它被直接暴露給外網不說,還讓人類還是覺得比較麻煩,干脆用幾個字母算了,也就是域名了。

域名不僅僅能夠代替IP,還有很多其他的用途比如在web應用中用來標識虛擬主機。

02 DNS報文結構

說了這么多,協議頭部,到底有哪些字段,其含義是什么都還不知道,那怎么去分析報文,下面我們一起再看看報文什么樣子:

01?基礎結構部分

DNS報文基礎部分為DNS首部。其中包含了事務ID,標志,問題計數,回答資源計數,回答計數,權威名稱服務器計數和附加資源記錄數。

  • 事務ID:報文標識,用來區分DNS應答報文是對哪個請求進行響應
  • 標志:DNS報文中標志字段
  • 問題計數:DNS查詢請求了多少次
  • 回答資源記錄數:DNS響應了多少次
  • 權威名稱服務器計數: 權威名稱服務器數目
  • 附加資源記錄數: 權威名稱服務器對應IP地址的數目

基礎結構中的標志字段細分如下:

02?標志字段

  • QR(Response):查詢請求,值為0;響應為1
  • Opcode:操作碼。0表示標準查詢;1表示反向查詢;2服務器狀態請求
  • AA(Authoritative):授權應答,該字段在響應報文中有效。通過0,1區分是否為權威服務器。如果值為 1 時,表示名稱服務器是權威服務器;值為 0 時,表示不是權威服務器。
  • TC(Truncated):表示是否被截斷。當值為1的時候時,說明響應超過了 512字節并已被截斷,此時只返回前512個字節。
  • RD(Recursion Desired):期望遞歸。該字段能在一個查詢中設置,并在響應中返回。該標志告訴名稱服務器必須處理這個查詢,這種方式被稱為一個遞歸查詢。如果該位為 0,且被請求的名稱服務器沒有一個授權回答,它將返回一個能解答該查詢的其他名稱服務器列表。這種方式被稱為迭代查詢。
  • RA(Recursion Available):可用遞歸。該字段只出現在響應報文中。當值為 1 時,表示服務器支持遞歸查詢。
  • Z:保留字段,在所有的請求和應答報文中,它的值必須為 0。
  • rcode(Reply code):通過返回值判斷相應的狀態。

當值為0時,表示沒有錯誤;

當值為1時,表示報文格式錯誤(Format error),服務器不能理解請求的報文;

當值為2時,表示域名服務器失敗(Server failure),因為服務器的原因導致沒辦法處理這個請求;

當值為3時,表示名字錯誤(Name Error),只有對授權域名解析服務器有意義,指出解析的域名不存在;

當值為4時,表示查詢類型不支持(Not Implemented),即域名服務器不支持查詢類型;

當值為5時,表示拒絕(Refused),一般是服務器由于設置的策略拒絕給出應答,如服務器不希望對某些請求者給出應答。

03?問題部分

該部分是用來顯示DNS查詢請求的問題,其中包含正在進行的查詢信息,包含查詢名(被查詢主機名字)、查詢類型、查詢類。

  • 查詢名:一般為查詢的域名,也可能是通過IP地址進行反向查詢
  • 查詢類型:查詢請求的資源類型。常見的如果為A類型,表示通過域名獲取IP。具體如下圖所示

  • 查詢類:地址類型,通常為互聯網地址為1

04?資源記錄部分

資源記錄部分包含回答問題區域,權威名稱服務器區域字段、附加信息區域字段,格式如下:

  • 域名:所請求的域名
  • 類型:與問題部分查詢類型值一直
  • 類:地址類型,和問題部分查詢類值一樣
  • 生存時間:以秒為單位,表示資源記錄的生命周期
  • 資源數據長度:資源數據的長度
  • 資源數據:按照查詢要求返回的相關資源數據

03 DNS解析詳解

知道了DNS大概是什么,它的域名結構和報文結構,是時候看看到底怎么解析的以及如何保證域名的解析比較穩定和可靠DNS核心系統。

  • 根域名服務器(Root DNS Server),大哥,管理頂級域名服務并放回頂級域名服務器IP,比如"com","cn"
  • 頂級域名服務器(Top-level DNS Server),每個頂級域名服務器管理各自下屬,比如com可以返回http://baidu.com域名服務器的IP
  • 權威域名服務器(Authoritative DNS Server),管理當前域名下的IP地址,比如http://Tencent.com可以返回http://www.tencent.com的IP地址

舉個例子,假設我們訪問"http://www.google.com"

  • 訪問根域名服務器,這樣我們就會知道"com"頂級域名的地址
  • 訪問"com"頂級域名服務器,可知道"http://google.com"域名服務器的地址
  • 最后方位"http://google.com"域名服務器,就可知道"http://www.google.com"的IP地址

目前全世界13組根域名服務器還有上百太鏡像,但是為了讓它能力更強,處理任務效率更高,盡量減少域名解析的壓力,通常會加一層"緩存",意思是如果訪問過了,就緩存,下一次再訪問就直接取出,也就是咱經常配置的"8.8.8.8"等。

操作系統中同樣也對DND解析做緩存,比如說曾訪問過"http://www.google.com"。

其次,還有我們熟知的hosts文件,當在操作系統中沒有命中則會在hosts中尋找。

這樣依賴,相當于有了DNS服務器,操作系統的緩存和hosts文件,能就近(緩存)完成解析就好,不用每次都跑到很遠的地方去解析,這樣大大減輕的DNS服務器的壓力。

畫了一個圖,加深印象。

嗯?想必應該知道這個過程了,我們再舉個例子,假設我們訪問http://www.qq.com

  • 客戶端發送一個DNS請求,請問qq你的IP的什么啊,同時會在本地域名服務器(一般是網絡服務是臨近機房)打聲招呼
  • 本地收到請求以后,服務器會有個域名與IP的映射表。如果存在,則會告訴你,如果想訪問qq,那么你就訪問XX地址。不存在則會去問上級(根域服務器):"老鐵,你能告訴我http://www.qq.com"的IP么
  • 根DNS收到本地DNS請求后,發現是.com,"http://www.qq.com喲,這個由.com大哥管理,我馬上給你它的頂級域名地址,你去問問它就好了"
  • 這個時候,本地DNS跑去問頂級域名服務器,"老哥,能告訴下http://www.qq.com"的ip地址碼",這些頂級域名負責二級域名比如http://qq.com
  • 頂級域名回復:"小本本記好,我給你http://www.qq.com區域的權威DNS服務器地址",它會告訴你
  • 本地DNS問權威DNS服務器:"兄弟,能不能告訴我http://www.qq.com對應IP是啥"
  • 權威DNS服務器查詢后將響應的IP地址告訴了本地DNS,本地服務器將IP地址返回給客戶端,從而建立連接。

04 DNS進階之新玩法

這里主要分享DNS(GSLB)的全局負載均衡。不是所有的互聯網服務都適用于GSLB。

全局負載均衡采用的主要技術是智能DNS,它綜合多種不同的策略(比如根據地理位置或者根據繁忙程度的權重)將客戶訪問的域名解析到不同的線路上。

開啟介紹之前,再一次復習下DNS中A記錄和NS記錄:

  • A記錄

A記錄是名稱解析的重要記錄,它用于將特定的主機名映射到對應主機的IP地址上。你可以在DNS服務器中手動創建或通過DNS客戶端動態更新來創建

  • NS記錄

NS記錄此記錄指定負責此DNS區域的權威名稱服務器。

  • 兩者區別

A記錄直接給出目的IP,NS記錄將DNS解析任務交給特定的服務器,NS記錄中記錄的IP即為該特定服務器的IP地址。

在全局負載均衡解決方案中,NS記錄指向具有智能DNS解析功能的GSLB設備,通過GSLB設備進行A記錄解析。

為了保證高可用,如果為多地部署GSLB,則均配置記錄。

另外,GSLB設備還會對所在的后端服務器公網IP進行健康檢查,其結果通過自有協議在不同的的GLSB設備間同步。

解析的步驟如下圖:

智能DNS解析:

  • 用戶給本地DNS服務器發送查詢請求,如果本地有緩存直接返回給用戶,否則通過遞歸查詢獲得名服務商商處的授權DNS服務器
  • 授權服務器返回NS記錄給本地DNS服務器。其中NS記錄指向一個GSLB設備接口地址
  • GSLB設備決策最優解析結果并返回A記錄給本地DNS服務器。
  • 本地服務器將查詢結果通過一條A記錄返回給用戶,并緩存這條記錄。

05 DNS實戰(wireshark)

使用工具為wireshark,訪問http://www.baidu.com:

分析DNS請求幀,如下圖所示:

從上圖我們可知道請求計數為1,請求的域名為http://dss0.bdstatic.com

分析DNS響應幀:

從響應頭可以知道,問題計數為1,正好對應請求幀1個問題。回應了2個問題。分別為:

answers:

從上圖可以得出當前共有13個權威域名服務器,當然每一個的服務器地址不同,其中類型為NS代表權威域名服務器服務器。

06 使用IP地址訪問瀏覽器的原理

  • 打開chrome瀏覽器,輸入IP
  • 三次握手建立連接
  • 建立連接以后HTTP開始工作,通過TCP發送一個"GET / HTTP/1.1",服務端給予回應
  • 解析請求,根據HTTP協議規定解析,看看那瀏覽器想干啥
  • 哦,原來你想獲取我的視頻呀,那我讀出來拼接為HTTP格式給你,回復"HTTP/1.1 200 OK"
  • 作為瀏覽器回復一個TCP的ACK表示確認
  • 瀏覽器收到響應數據后,需要使用相應的引擎進行渲染,將更好的頁面展現給用戶

07 使用域名訪問瀏覽器的原理

這一次從瀏覽器角度回答,相信大家已經了解一部分瀏覽器知識了,我們先看看URL到網頁展示的完整流程是什么樣子:

  • 用戶輸入

在地址欄輸入相應的內容,如果為關鍵字,如果直接輸入搜索內容,瀏覽器默認引擎會合成為URL,如果符合URL規則,加上協議合成完整URL,回車就會出現加載頁面,也就是等待提交文檔的階段

  • URL請求過程

此時瀏覽器進程將URL通過進程間通信的方式發送給網絡進程,開啟真正的請求流程。注意了,網絡進程這里也有緩存,它會現在本地緩存查看是否緩存了資源,如果有則直接返回。如果沒有,那就需要DNS解析獲取服務器IP地址(HTTPS還少不了TLS連接)。

此時使用IP和服務器建立三次握手。連接成功開始構造請求頭等信息。

服務器收到請求信,根據請求信息生成響應信息給網絡進程。然后開始解析響應頭內容。

如果返回值為302/301,說明需要跳轉到其他URL,如果為200則繼續處理該請求。

URL的請求數據類型多種,對于瀏覽器而言是怎么區分的呢這個時候就必須強調下Content-type了,因為他明確服務器返回響應體數據屬于什么類型,此時的瀏覽器也會根據Content-type對決定響應體是什么內容。

  • 進入渲染階段

通常情況下,當前多進程架構的瀏覽器對于每一個頁面都有一個渲染進程,前提是如果從X頁面打開Y頁面,x和y屬于同一個"站點"(使用相同的協議和根域名),此時y頁面會復用x頁面,否則y頁面會單獨對應一個渲染進程。

  • 提交階段

渲染進程收到瀏覽器進程的"提交文檔"后,通過和網絡進程使用"管道"的方式通信。一旦這些文檔數據傳輸完成,渲染進程就會告訴瀏覽器進程"確認提交",此時瀏覽器進程收到"確認提交"就會更新地址欄的URL,歷史狀態等,這就是為什么當我們在地址欄輸入地址信息后需要加載一小會兒到另一個頁面。

  • 渲染階段

文檔提交以后,此時就需要使用js,css等美化頁面,并通過構建DOM樹等讓用戶有更好的使用體驗。

08 DNS劫持

到這里我們至少知道了DNS可以將域名映射為IP,并且知道了使用了多種緩存方案來減少DNS訪問的壓力。

那么DNS一旦出錯,很可能將域名解析到其他IP地址,這樣我們也就無法正確訪問網頁(PS是不是有的時候發現開啟不了網頁但是qq等可以使用,很可能就是DNS搞鬼了)。

  • 利用DNS服務器進行DDOS攻擊

什么是DDOS,我們應該知道SYN Flood,是一種DoS(拒絕服務攻擊)與DDOS(分布式拒絕服務攻擊的方式),利用大量的偽造TCP請求讓被攻擊方資源榨干。

我們假設攻擊者已經知道了攻擊者IP(如果需要了解這一部分內容,可以去搜索主動被動信息搜集/sodan等關鍵字),此時攻擊者使用此地址作為解析命令的源地址,當DNS請求的時候返回恰巧也是被攻擊者。

此時,如果足夠多的請求(群肉雞)就很容易使網絡崩潰。

  • 緩存感染

我們已經知道了在DNS查詢過程中,會經過操作系統的緩存,hosts文件等,如果將數據放入有漏洞的服務器緩存中,當進行DNS請求的時候,就會將緩存信息返回給用戶,這樣用戶就會莫名訪問入侵者所設置的陷阱頁面中。

  • DNS信息劫持

看到這里的小伙伴,先思考一個問題,在TCP/IP協議棧中,三次握手中的序列號到底什么意思?

其功能之一就是避免偽裝數據的插入。

我們知道,如果我們知道DNS報文中的ID,我們就可以知道這個ID請球員位置。作為攻擊者,會通過旁路監聽客戶端和服務端的會話,拿到DNS中的ID,此時相當于在DNS服務器之前拿到ID,偽裝DNS服務器回復客戶端,引導客戶端訪問惡意的網站。

電腦小故障:

比如qq可用但是瀏覽器就是不好使:

  • 輸入:http://192.168.1.1(可能是http://192.168.0.1),輸入路由器用戶名密碼
  • DHCP服務器-----DHCP服務-,修改DNS為更加可靠的DNS服務器IP.保存即可

方法2:修改路由器password

  • 地址欄輸入"http://192.168.1.1",登錄并進入路由器頁面
  • 系統工具--修改登錄口令頁面

保護域名/盡量避免攻擊

  • 備份策略。一般至少會使用兩個域名,一旦其中一個被攻擊,用戶可以通過另一個訪問
  • 隨時留意域名注冊中的電子郵件
  • 保存好所有權信息(比如賬單記錄,注冊信息等)
  • 隨時關注安全補丁

09 本文涉及高頻面試題(自行測試)

  • 講講DNS原理
  • 進程與線程
  • 遞歸查詢和遞歸查詢區別
  • DNS解析流程
  • chrome架構演變
  • ELF是什么,數據段,代碼段,全局變量等分別存放在哪兒
  • DNS劫持
  • 描述下DDOS與DOS攻擊
  • 使用IP地址訪問web服務器
  • 使用域名訪問web服務器過程
  • 可重定位什么意思?
  • 靜態庫與動態庫的區別
  • 進程與線程間共享數據


整理:老楊丨10年資深網絡工程師,更多網工提升干貨,請關注公眾號:網絡工程師俱樂部

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166291.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166291.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166291.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【Git】一文教你學會 submodule 的增、刪、改、查

添加子模塊 $ git submodule add <url> <path>url 為想要添加的子模塊路徑path 為子模塊存放的本地路徑 示例&#xff0c;添加 r-tinymaix 為子模塊到主倉庫 ./sdk/packages/online-packages/r-tinymaix 路徑下&#xff0c;命令如下所示&#xff1a; $ git subm…

用自己熱愛的事賺錢,是多么的幸福

挖掘天賦可能有些困難&#xff0c;但挖掘愛好就簡單多啦&#xff01;最幸福的事情就是能用自己喜歡的事情賺錢。 我們要說的是一個博主&#xff0c;他非常喜歡騎自行車&#xff0c;雖然他的工作是在外貿公司做銷售&#xff0c;但每當有空時&#xff0c;他都會騎自行車。而且他…

Nginx同時支持Http和Https的配置詳解

當配置Nginx同時支持HTTP和HTTPS時&#xff0c;需要進行以下步驟&#xff1a; 安裝和配置SSL證書&#xff1a; 獲得SSL證書&#xff1a;從可信任的證書頒發機構&#xff08;CA&#xff09;或使用自簽名證書創建SSL證書。 將證書和私鑰保存到服務器&#xff1a;將SSL證書和私鑰…

spring 的事務隔離;Spring框架的事務管理的優點

文章目錄 說一下 spring 的事務隔離&#xff1f;Spring框架的事務管理有哪些優點&#xff1f;你更傾向用哪種事務管理類型&#xff1f; 聊一聊spring事務的隔離&#xff0c;事務的隔離對于一個系統來說也是非常重要的&#xff0c;直接上干貨&#xff01;&#xff01;&#xff0…

Python與設計模式--享元模式

10-Python與設計模式–享元模式 一、網上咖啡選購平臺 假設有一個網上咖啡選購平臺&#xff0c;客戶可以在該平臺上下訂單訂購咖啡&#xff0c;平臺會根據用戶位置進行 線下配送。假設其咖啡對象構造如下&#xff1a; class Coffee:name price 0def __init__(self,name):se…

Go iota簡介

當聲明枚舉類型或定義一組相關常量時&#xff0c;Go語言中的iota關鍵字可以幫助我們簡化代碼并自動生成遞增的值。本文檔將詳細介紹iota的用法和行為。 iota關鍵字 iota是Go語言中的一個預定義標識符&#xff0c;它用于創建自增的無類型整數常量。iota的行為類似于一個計數器…

數據庫基礎入門 — SQL排序與分頁

我是南城余&#xff01;阿里云開發者平臺專家博士證書獲得者&#xff01; 歡迎關注我的博客&#xff01;一同成長&#xff01; 一名從事運維開發的worker&#xff0c;記錄分享學習。 專注于AI&#xff0c;運維開發&#xff0c;windows Linux 系統領域的分享&#xff01; 本…

[深度理解] 重啟 Splunk Search Head Cluster

1: 背景: 關于釋放Splunk search head 的job 運行壓力:splunk search head cluster 要重啟的話,怎么辦? 答案是:splunk rolling-restart shcluster-members Initiate a rolling restart from the command line Invoke the splunk rolling-restart command from any me…

3款免費次數多且功能又強大的國產AI繪畫工具

hi&#xff0c;同學們&#xff0c;本期是我們第55 期 AI工具教程 最近兩個月&#xff0c;國內很多AI繪畫軟件被關停&#xff0c;國外絕大部分AI繪畫工具費用不低&#xff0c;因此 這兩天我 重新整理 國產 AI繪畫 工具 &#xff0c; 最終 篩選了 3款功能強大&#xf…

LeeCode前端算法基礎100題(3)- N皇后

一、問題詳情&#xff1a; 按照國際象棋的規則&#xff0c;皇后可以攻擊與之處在同一行或同一列或同一斜線上的棋子。 n 皇后問題 研究的是如何將 n 個皇后放置在 nn 的棋盤上&#xff0c;并且使皇后彼此之間不能相互攻擊。 給你一個整數 n &#xff0c;返回所有不同的 n 皇后…

虛擬機系列:vmware和Oracle VM VirtualBox虛擬機的區別,簡述哪一個更適合我?以及相互轉換

一. VMware和Oracle VM VirtualBox虛擬機的區別主要體現在以下幾個方面: 首先兩種軟件的安裝使用教程如下: VMware ESXI 安裝使用教程 Oracle VM VirtualBox安裝使用教程 商業模式:VMware是一家商業公司,而Oracle VM VirtualBox是開源軟件; 功能:VMware擁有更多的功能和…

Leetcode200. 島嶼數量

Every day a Leetcode 題目來源&#xff1a;200. 島嶼數量 解法1&#xff1a;深度優先搜索 設目前指針指向一個島嶼中的某一點 (i, j)&#xff0c;尋找包括此點的島嶼邊界。 從 (i, j) 向此點的上下左右 (i1,j)&#xff0c;(i-1,j)&#xff0c;(i,j1)&#xff0c;(i,j-1) …

“圓柱-計算公式“技術支持網址

該軟件可以計算圓柱的底面圓周長、底面積、側面積和體積。 您在使用中有遇到任何問題都可以和我們聯系。我們會在第一時間回復您。 郵箱地址&#xff1a;elmo30zeongmail.com 謝謝&#xff01;

如何將本地websocket發布至公網并實現遠程訪問?

本地websocket服務端暴露至公網訪問【cpolar內網穿透】 文章目錄 本地websocket服務端暴露至公網訪問【cpolar內網穿透】1. Java 服務端demo環境2. 在pom文件引入第三包封裝的netty框架maven坐標3. 創建服務端,以接口模式調用,方便外部調用4. 啟動服務,出現以下信息表示啟動成功…

VR云游:讓旅游產業插上數字化翅膀,打造地方名片

自多地入冬降溫以來&#xff0c;泡溫泉成了許多人周末度假的選擇&#xff0c;在氣溫持續走低的趨勢下&#xff0c;溫泉游也迎來了旺季&#xff1b;但是依舊有些地區溫度依舊溫暖&#xff0c;例如南京的梧桐美景也吸引了不少游客前去打卡&#xff0c;大家穿著漢服與金黃的樹葉合…

【AI考證筆記】NO.1人工智能的基礎概念

以下部分內容來自于百度智能云人才認證培訓講義&#xff0c;騰訊等也有人工智能類似的講義&#xff0c;限時免費&#xff0c;也就是不報考&#xff0c;也能系統學習&#xff0c;課程做的都是不錯的。有感興趣的朋友&#xff0c;可以去檢索學習。 本系列是學習筆記&#xff0c;…

6個常用的聚類評價指標

評估聚類結果的有效性&#xff0c;即聚類評估或驗證&#xff0c;對于聚類應用程序的成功至關重要。它可以確保聚類算法在數據中識別出有意義的聚類&#xff0c;還可以用來確定哪種聚類算法最適合特定的數據集和任務&#xff0c;并調優這些算法的超參數(例如k-means中的聚類數量…

C語言——從鍵盤輸人三角形的三個邊長 a、b、c,求出三角形的面積。

從鍵盤輸人三角形的三個邊長 a、b、c,求出三角形的面積。求三角形的面積用公式areasqrt(s*(s-a)*(s-b)*(s-c)),其中 s1/2(a十bc)。注:要求對輸人三角形的三個邊長做出有效性判斷。 #define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> #include<math.h> int main…

從word復制內容到wangEditor富文本框的時候會把html標簽也復制過來,如果只想實現直接復制純文本,有什么好的實現方式

從word復制內容到wangEditor富文本框的時候會把html標簽也復制過來&#xff0c;如果只想實現直接復制純文本&#xff0c;有什么好的實現方式&#xff1f; 將 Word 中的內容復制到富文本編輯器時&#xff0c;常常會帶有大量的 HTML 標簽和樣式&#xff0c;這可能導致不必要的格式…

前置微小信號放大器在生物醫學中有哪些應用

前置微小信號放大器在生物醫學領域中具有廣泛的應用。生物醫學信號通常具有較小的振幅和較低的幅頻響應&#xff0c;因此需要借助放大器來增強信號以便進行準確的測量、監測和分析。以下是前置微小信號放大器在生物醫學中的主要應用。 心電圖&#xff08;ECG&#xff09;放大器…