操屁眼的视频在线免费看,日本在线综合一区二区,久久在线观看免费视频,欧美日韩精品久久综

新聞資訊

    提到網絡,基本上都能把DNS給扯上去。為啥呢,今天我們來一探究竟。

    1 瀏覽器原理

    還記得面試過程中被問了千百遍的"輸入URL后發生了什么"這個經典問題嗎?因為這個問題覆蓋了太多的知識點,其中包括計算機網絡,操作系統,數據結構等一些列問題,對于面試官和面試者來說都更方便后續面試的進展。想必很多小伙伴都做過web開發,或多或少都會和各種瀏覽器聯系在一起,最終做測試的時候也會使用多種瀏覽器測試以保證能很好地兼容。那么現在我們先從瀏覽器說起。

    我們先想想一個問題,我們打開一個微信或者一個XX音樂,一個網頁,到底會開幾個進程。

    我們實驗看看,打開一個網頁到底開了幾個進程,又分別有什么作用:

    打開瀏覽器使用的進程數

    從上圖我們發現,打開一個網頁,使用了四個進程,分別為GPU進程, 進程,當前網頁進程和瀏覽器。到此,我們先復習進程與線程。

    假設現在有這樣幾行偽代碼,我們看看應該怎么去執行,可能分為四步:

    示例偽代碼

    這也是采用串行的方式運行,也可說為單線程方式執行了四個任務,其好處是不用考慮諸如多線程的同步等問題。但是如果采用多線程,則只需要兩步。

    從上面這個小實驗,我們可以知道使用多線程只需要兩步就完成,但是單線程卻使用了四步,可知使用多線程大大的提升了性能,記住:并不是多線程就一定會比單線程好,還需要從CPU使用率,IO磁盤等多個因素考慮。

    進程

    進程是一個程序的運行實體,在上面我們比較直觀的感受到了多線程并行處理提高性能的優點。一個進程可以包含多個線程,但是一個線程只能歸屬于一個進程,那么一個進程到底是什么樣子呢?(ps:下面是在Linux中執行的代碼,道理差不多)

    創建進程

    在Linux中使用fork創建進程,返回進程id。通過id的不同讓父子進程各干其事,然后使用執行具體任務。

    創建進程

    創建主函數來使用上面的函數路由器dns根域名解失敗網不能用,看看會出現什么情況?

    主函數

    好了,現在主函數和執行函數都寫完了,但是這還只是文本文件,對于計算機而言只喜歡"01"組合,cpu執行的命令需要是二進制,所以需要進行「編譯」,但是二進制的組合也得有一定的格式,不然定會亂套,在Linux中這種格式是"ELF" ),后續會詳細介紹。程序編譯到進程的過程如下圖所示:

    文本文件到二進制

    現在帶參數編譯兩個程序:

    編譯

    在編譯的過程中,第一步預處理,將頭文件直接嵌入到文件正文中,將定義的相關宏展開,最終編譯為.o文件(可重定文件),那么ELF是什么樣子呢?

    ELF頭部

    上圖涉及到幾個高頻面試題目(哪些在代碼段,哪些在數據段)。

    那么在Linux中如何查看呢()

    可重定位什么意思呢?

    字面意思是可以隨時放在其他位置。對的,目前我們只是編譯了文件,將來會被加載到內存里面,也就是加在某一個位置。可惜現在還是.o文件(代碼片段),不具備可執行的權限路由器dns根域名解失敗網不能用,它以后想變為函數庫,哪里需要就在哪里去完成任務,搬到了哪里就重新定位了位置。要讓它可重用,就得成為庫文件,這個文件分為靜態鏈接庫(.a)和動態鏈接庫,它能將一系列的.o文件歸檔為文件。怎么創建呢?

    ar

    這個時候其他開發人員準備使用這個功能,加上參數連接過去就好了。

    上面命令中"-L"代表默認在當前目錄尋找.a文件,然后取出.o文件和.o做連接形成二進制執行文件 。

    一旦靜態鏈接庫連接出去,它的代碼和變量的合并,一次程序運行不再依賴這個庫。這就可能出問題了,如果同樣的代碼段被多個程序使用,就會導致在內存中出現多份的情況,而且代碼一旦更新,二進制文件也需要重新編譯才能及時的更新。所以出現了動態鏈接庫,使用這種方式的時候,程序并不在一開始就完成動態鏈接,而是需要到真正調用動態代碼時,載入程序才會計算動態代碼的邏輯地址。這種方式讓程序初始化時間短,但是運行期間性能比不上靜態連接的程序。

    說的有點遠了,回來回來。剛才我們說了多線程并行計算的優勢,畫個圖對比加深印象下:

    單線程與多線程

    ok總結下進程線程有哪些特點(面試跑不脫):

    假設將之前的偽代碼修改為:

    X=5+2

    Y=8/0

    Z=5*2

    此時Y很明顯就是錯的,當線程執行到Y的時候就會報錯,進程崩潰大致其他兩個線程也沒有結果。

    比如我們會使用很多不錯的插件,當啟動瀏覽器并打開這些插件的時候,都會占用內存,當關閉進程瀏覽器,這些內存就會被收回。

    這個機制是防止多個進程讀寫混亂,所以進程之間通信需要IPC(消息隊列,共享內存等)。

    線程共享數據

    從上圖我們可以知道線程1,2和線程3分別將數據寫入ABC,線程2在負責處理ABC三種讀取數據并顯示。

    現在我們基本上了解了線程和進程。我們想象一下,某寶級別的系統架構一開始就能抵抗這么大的流量嗎,當然不是,最開始小黃頁的單體架構,隨著需求的復雜和多樣化主鍵演變而來。那么瀏覽器依然如此。我們看看最開始的單進程樣子。

    最初的瀏覽器單進程,意味著無論是網絡,頁面渲染引擎還是js環境都在一個進程中,如下圖所示。

    瀏覽器單進程

    那個時候單體結構都有什么問題?

    以前頁面中的視頻等元素需要使用插件才能觀看,插件在頁面進程中,插件出問題很容易導致瀏覽器崩潰。頁面中如此多模塊都運行在該線程中,一旦其中一個模塊獨占線程,其他的就只能當觀眾(ps 能不能完成了就走,別蹲著不X),所以也就出現卡頓現象。

    當時很多插件能夠比較輕松的拿到操作系統的shell,如果是頁面腳本,可以通過瀏覽器爆出的漏銅來到shell,拿了shell就無法想象能干啥了。

    如何解決上述問題

    原因是頁面模塊都在一個進程,采用進程分離,這樣即使某個插件崩潰也只是影響某一部分,不會導致整個瀏覽器掛。

    使用一個箱子(安全沙箱),箱子里面程序可以運行且把箱子上鎖,但是無法讀取外部任何程序。這樣的話,我把容易出錯且關鍵的兩個進程插件進程與渲染進程裝進去,這樣的話,即使兩者之一被執行惡意程序也只是在這個箱子里瞎擺弄,無法翻越出去拿到更高的權限干壞事。

    當前架構

    我們最初的時候,發現使用瀏覽器打開一個網頁的有四個進程,下面我來看看這些都有什么功能。

    一共是四個進程,分別為網絡進程,GPU進程,渲染進程和瀏覽器主進程。

    網絡進程

    作為一個單獨進程,負責頁面網絡資源的加載。

    插件進程

    由于插件容易崩潰,單獨進程對其進行管理。

    GPU進程

    中UI界面繪制和3DCSS等需要GPU計算密集性的幫助,從而引入GPU進程。

    瀏覽器進程

    瀏覽器進程負責用戶交互,各個子進程等功能。

    乍一看全是優點,通常事物都會有兩面性,進程多了,開銷當然也大也就是更高的資源占用和更加復雜的體系結構。

    2 DNS簡介

    上面之所以介紹瀏覽器,因為DNS很多時候是我們在瀏覽器敲下回車時開始興奮,這也是為什么從瀏覽器說起的原因。現在我們看看DNS到底是個啥玩意。

    mac地址誕生,可是太不容易記憶了,出現了簡化了IP形式,它被直接暴露給外網不說,還讓人類還是覺得比較麻煩,干脆用幾個字母算了,也就是域名了。域名不僅僅能夠代替IP,還有很多其他的用途比如在web應用中用來標識虛擬主機。

    3 DNS報文結構

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

    水星 dns根域名解析失敗_路由器dns根域名解失敗網不能用_路由器診斷dns根域名解析失敗

    DNS報文結構

    基礎結構部分

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

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

    標志字段

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

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

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

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

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

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

    問題部分

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

    資源記錄部分

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

    資源記錄部分4 DNS解析詳解

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

    DNS核心系統

    核心系統

    舉個例子,假設我們訪問"":

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

    操作系統中同樣也對DND解析做緩存,比如說曾訪問過""。

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

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

    DNS解析過程

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

    5 DNS進階之新玩法

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

    全局負載均衡采用的主要技術是智能DNS,它綜合多種不同的策略(比如根據地理位置或者根據繁忙程度的權重)將客戶訪問的域名解析到不同的線路上。開啟介紹之前,再一次復習下DNS中A記錄和NS記錄。

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

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

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

    在全局負載均衡解決方案中,NS記錄指向具有智能DNS解析功能的GSLB設備,通過GSLB設備進行A記錄解析。為了保證高可用,如果為多地部署GSLB,則均配置記錄。另外,GSLB設備還會對所在的后端服務器公網IP進行健康檢查,其結果通過自有協議在不同的的GLSB設備間同步。解析的步驟如下圖:

    智能DNS解析6 DNS實戰()

    使用工具為,訪問。

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

    DNS請求幀

    從上圖我們可知道請求計數為1,請求的域名為。

    分析DNS響應幀

    DNS響應

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

    權威域名服務器

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

    7 使用IP地址訪問瀏覽器的原理8 使用域名訪問瀏覽器的原理

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

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

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

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

    服務器收到請求信,根據請求信息生成響應信息給網絡進程。然后開始解析響應頭內容。如果返回值為302/301,說明需要跳轉到其他URL,如果為200則繼續處理該請求。

    URL的請求數據類型多種,對于瀏覽器而言是怎么區分的呢?

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

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

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

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

    9 DNS劫持

    到這里我們至少知道了DNS可以將域名映射為IP,并且知道了使用了多種緩存方案來減少DNS訪問的壓力。那么DNS一旦出錯,很可能將域名解析到其他IP地址,這樣我們也就無法正確訪問網頁。(PS:是不是有的時候發現開啟不了網頁但是qq等可以使用,很可能就是DNS搞鬼了喲)

    DNS劫持

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

    DDOS

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

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

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

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

    電腦小故障

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

    方法1:

    方法2:修改路由器

    保護域名/盡量避免攻擊

    10 本文涉及高頻面試題(自行測試)巨人的肩膀

    %E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/?fr=

網站首頁   |    關于我們   |    公司新聞   |    產品方案   |    用戶案例   |    售后服務   |    合作伙伴   |    人才招聘   |   

友情鏈接: 餐飲加盟

地址:北京市海淀區    電話:010-     郵箱:@126.com

備案號:冀ICP備2024067069號-3 北京科技有限公司版權所有