1. 程式人生 > >深入分析Java Web技術內幕讀書筆記(二)淺析DNS域名解析過程

深入分析Java Web技術內幕讀書筆記(二)淺析DNS域名解析過程

上一篇文章《淺析Web請求過程》講述的是如何發起HTTP請求,對於請求發起過程中很重要的一個步驟——DNS解析過程的描述是一帶而過,本篇文章將跟著DNS解析過程來分析域名是如何解析的。

一、DNS域名解析步驟

下圖是DNS域名解析的一個示例圖,它涵蓋了基本解析步驟和原理。
這裡寫圖片描述
下面DNS解析步驟進行講解,後面將採用命令列的形式來跟蹤DNS解析過程。當用戶在位址列鍵入www.baidu.com並敲下回車鍵之後,域名解析就開始了。

第一步:檢查瀏覽器快取中是否快取過該域名對應的IP地址

使用者通過瀏覽器瀏覽過某網站之後,瀏覽器就會自動快取該網站域名對應的IP地址,當用戶再次訪問的時候,瀏覽器就會從快取中查詢該域名對應的IP地址,因為快取不僅是有大小限制,而且還有時間限制(域名被快取的時間通過TTL

屬性來設定),所以存在域名對應的IP找不到的情況。當瀏覽器從快取中找到了該網站域名對應的IP地址,那麼整個DNS解析過程結束,如果沒有找到,將進行下一步驟。對於IP的快取時間問題,不宜設定太長的快取時間,時間太長,如果域名對應的IP發生變化,那麼使用者將在一段時間內無法正常訪問到網站,如果太短,那麼又造成頻繁解析域名。

第二步:如果在瀏覽器快取中沒有找到IP,那麼將繼續查詢本機系統是否快取過IP

如果第一個步驟沒有完成對域名的解析過程,那麼瀏覽器會去系統快取中查詢系統是否快取過這個域名對應的IP地址,也可以理解為系統自己也具備域名解析的基本能力。在Windows系統中,可以通過設定hosts

檔案來將域名手動繫結到某IP上,hosts檔案位置在C:\Windows\System32\drivers\etc\hosts。對於普通使用者,並不推薦自己手動繫結域名和IP,對於開發者來說,通過繫結域名和IP,可以輕鬆切換環境,可以從測試環境切換到開發環境,方便開發和測試。在XP系統中,黑客常常修改他的電腦的hosts檔案,將使用者常常訪問的域名繫結到他指定的IP上,從而實現了本地DNS解析,導致這些域名被劫持。在Linux或者Mac系統中,hosts檔案在/etc/hosts,修改該檔案也可以實現同樣的目的。

前兩步都是在本機上完成的,所以沒有在上面示例圖上展示出來,從第三步開始,才正在地向遠端DNS伺服器發起解析域名的請求。

第三步:向本地域名解析服務系統發起域名解析的請求

如果在本機上無法完成域名的解析,那麼系統只能請求本地域名解析服務系統進行解析,本地域名系統LDNS一般都是本地區的域名伺服器,比如你連線的校園網,那麼域名解析系統就在你的校園機房裡,如果你連線的是電信、移動或者聯通的網路,那麼本地域名解析伺服器就在本地區,由各自的運營商來提供服務。對於本地DNS伺服器地址,Windows系統使用命令ipconfig就可以檢視,在LinuxMac系統下,直接使用命令cat /etc/resolv.conf來檢視LDNS服務地址。LDNS一般都快取了大部分的域名解析的結果,當然快取時間也受域名失效時間控制,大部分的解析工作到這裡就差不多已經結束了,LDNS負責了大部分的解析工作。

第四步:向根域名解析伺服器發起域名解析請求

本地DNS域名解析器還沒有完成解析的話,那麼本地域名解析伺服器將向根域名伺服器發起解析請求。

第五步:根域名伺服器返回gTLD域名解析伺服器地址

本地DNS域名解析向根域名伺服器發起解析請求,根域名伺服器返回的是所查域的通用頂級域(Generic top-level domain,gTLD)地址,常見的通用頂級域有.com.cn.org.edu等。

第六步:向gTLD伺服器發起解析請求

本地域名解析伺服器向gTLD伺服器發起請求。

第七步:gTLD伺服器接收請求並返回Name Server伺服器

gTLD伺服器接收本地域名伺服器發起的請求,並根據需要解析的域名,找到該域名對應的Name Server域名伺服器,通常情況下,這個Name Server伺服器就是你註冊的域名伺服器,那麼你註冊的域名的服務商的伺服器將承擔起域名解析的任務。

第八步:Name Server伺服器返回IP地址給本地伺服器

Name Server伺服器查詢域名對應的IP地址,將IP地址連同TTL值返回給本地域名伺服器。

第九步:本地域名伺服器快取解析結果

本地域名伺服器快取解析後的結果,快取時間由TTL時間來控制。

第十步:返回解析結果給使用者

解析結果將直接返回給使用者,使用者系統將快取該IP地址,快取時間由TTL來控制,至此,解析過程結束。

這裡對DNS解析的步驟進行了一個簡單的介紹分析,後面將通過命令列的形式來解析一個域名的具體解析過程。

二、DNS域名解析過程分析

在正式開始分析解析過程之前,先來介紹幾個基本的域名解析方式的概念。域名解析記錄主要分為A記錄MX記錄CNAME記錄NS記錄以及TXT記錄

  • A記錄A代表的是Address,用來指定域名對應的IP地址,比如將map.baidu.com指定到180.97.34.157,將zhidao.baidu.com指定到180.149.131.245A記錄允許將多個域名解析到一個IP地址,但不允許將一個域名解析到多個IP地址上。

  • MX記錄MX代表的是Mail Exchage,就是可以將某個域名下的郵件伺服器指向自己的Mail Server,如baidu.com域名的A記錄IP地址是180.97.34.157,如果將MX記錄設定為180.97.34.154,即[email protected]的郵件路由,那麼DNS會將郵件傳送到180.97.34.154所在的伺服器,而正常web請求仍然會解析到A記錄的IP地址180.97.34.157

  • CNAME記錄CNAME指的就是Canonical Name,也就是別名解析,可以將指定的域名解析到其他域名上,而其他域名就是指定域名的別名,整個解析過程稱為別名解析。比如將baidu.com解析到itlemon.cn,將csdn.net解析到itlemon.cn,那麼itlemon.cn就是baidu.comCSDN.net的別名。

  • NS記錄:就是為某個域名指定了特定的DNS伺服器去解析。

  • TXT記錄:為某個主機名或者域名設定特定的說明,比如為itlemon.cn設定的的TXT記錄為“Lemon的技術筆記”,這個TXT記錄為itlemon.cn的說明。

上面概念中的IP地址都是假定的,幫助理解。下面將通過解析域名baidu.com為例,進一步說明域名解析流程。

直接檢視域名結果,可以通過命令nslookup加上域名來檢視:
這裡寫圖片描述
上圖中Non-authoritative answer表示解析結果來自非權威伺服器,也就是說這個結果來自快取,並沒有完全經歷全部的解析過程,從某個快取中讀取的結果,這個結果存在一定的隱患,比如域名對應的IP地址已經更變。
這只是一個快捷的解析結果,如果需要瀏覽全部的解析過程,那麼可以使用dig命令來檢視解析過程。
這裡寫圖片描述
分析上圖DNS解析過程,我們可以看出:
第一步:從本地DNS域名解析伺服器獲取到13個根DNS域名伺服器(.)對應的主機名。
這裡寫圖片描述
第二步:從13個根域名伺服器中的其中一個(這裡是h.root-servers.net)獲取到頂級com.的伺服器IP(未顯示)和名稱。
這裡寫圖片描述
第三步:向com.域的一臺伺服器192.43.172.30(i.gtld-servers.net)請求解析,它返回了baidu.com域的伺服器IP(未顯示)和名稱,百度有四臺頂級域的伺服器。
這裡寫圖片描述
第四步:向百度的頂級域伺服器220.181.37.10(ns3.baidu.com)請求www.baidu.com,它發現這個www有個別名,而不是一臺主機,別名是www.a.shifen.com
這裡寫圖片描述
一般情況下,DNS解析到別名就停止了,返回了具體的IP地址,如果想看到具體的IP地址,可以進一步對別名進行解析,解析結果如下:
這裡寫圖片描述
這時候看到最後的解析結果是180.97.33.107180.97.33.108。在解析別名的過程中,可以發現shifen.combaidu.com都是指定了相同的域名解析伺服器。以上是一個域名的解析過程,最後的解析結果和一開始的使用nslookup的結果一致。

深入分析Java Web技術內幕系列讀書筆記文章列表:

相關推薦

深入分析Java Web技術內幕讀書筆記淺析DNS域名解析過程

上一篇文章《淺析Web請求過程》講述的是如何發起HTTP請求,對於請求發起過程中很重要的一個步驟——DNS解析過程的描述是一帶而過,本篇文章將跟著DNS解析過程來分析域名是如何解析的。 一、DNS域名解析步驟 下圖是DNS域名解析的一個示例圖,它

深入理解java虛擬機器》讀書筆記---- Java記憶體區域與記憶體溢位異常

執行時資料區域 java虛擬機器所管理的記憶體將會包括以下幾個執行時資料區域: 1、程式計數器 程式計數器是一塊較小的記憶體空間,它可以看作是當前執行緒所執行位元組碼的行號指示器。在虛擬機器的概念模型裡,位元組碼直譯器的工作就是通過改變這個計數器的值來選取下一條需要執

讀書筆記】《深入分析Java Web技術內幕

剛拿到書,感覺寫的很不錯,越看到後面越質疑我之前的觀點。此書寫的面的確很全,可謂面面俱到,但是面面俱到的反面就是都不深入,與之標題相差甚遠,《淺析Java Web技術內幕》更合適。 縱觀全書,本書更適合初級Java開發人員對JavaWeb做進一步的瞭解,作者對

深入分析java web技術內幕第一章筆記

一、b/s架構的好處 b/s架構基於統一的http協議進行前後臺的資料互動。 http採用無狀態的短連線的通訊方式,一次請求完成一次資料互動。之後就斷開了。採用這種方式可以使得伺服器服務更多的使用者。 二、瀏覽器發起一個請求(瀏覽器回車後具體發生了什麼) 1.瀏覽器輸入ur

深入分析Java Web技術內幕》讀後感之1-web請求過程

HTTP     DNS     CDN   基於http 精髓為url用來資源定位 DNS域名解析 CDN靜態資源快取 發起請求:dns解析出地址並和80

深入分析Java Web技術內幕》讀後感之2- JAVA I/O NIO

一、Java I/O的基本架構 Java的I/O操作類在java.io包下,大概有80多個類,這些類可以分成以下4組: ▶ 基於位元組操作的I/O介面:InputStream和OutputStream ▶ 基於字元操作的I/O介面:Reader和Writer

深入分析Java Web技術內幕》讀後感之JAVA I/O NIO

一、Java I/O的基本架構 Java的I/O操作類在java.io包下,大概有80多個類,這些類可以分成以下4組: ▶ 基於位元組操作的I/O介面:InputStream和OutputStream ▶ 基於字元操作的I/O介面:Reader和Writer ▶ 基於

深入分析Java Web技術內幕》讀後感之JAVA WEB 中文亂碼問題

為什麼要編碼 在計算機中儲存資訊的最小單元是1個位元組(8bit),所以能表示的字元範圍是0-255個。人類要表達的字元太多,無法用1個位元組完全表示。要解決這個問題需要使用新的資料結構char,從char到byte必須編碼。 編碼格式 ASCII碼:共128個,用

深入分析Java Web技術內幕2java的I/O的工作機制

1、背景      當前這個 海量資料時代,資料在網路中隨處流動,流動的過程都涉及I/O問題,可以說大部分web應用系統的瓶頸都是I/O瓶頸。2、i/o是什麼     1】 是input和output的簡寫,i/o操作主要是指使用java進行輸入輸出操作,java所有的i/o

深入理解 Java 記憶體模型》讀書筆記乾貨,萬字長文

0. 前提 1. 基礎 2. 重排序 3. 順序一致性 4. Volatile 5. 鎖 6. final 7. 總結 4. Volatile 4.1 VOLATILE 特性 舉個例子: publ

深入理解 Java 記憶體模型》讀書筆記乾貨,萬字長文

0. 前提 1. 基礎 2. 重排序 3. 順序一致性 4. Volatile 5. 鎖 6. final 7. 總結 0. 前提 《深入理解 Java 記憶體模型》 程曉明著,該書在以前看過一

深入理解java虛擬機器》讀書筆記---- 垃圾回收演算法及垃圾收集器介紹

一、垃圾回收演算法 1、標記--清除演算法 標記--清除(Mark-Sweep)演算法,分為標記和清除兩個階段,首先標記出所有需要回收的物件,在標記完成後統一回收所有被標記的物件,這是最基礎的收集演算法,後續很多演算法都是基於這種思想進行設計的。 標記--清除演算法主要的不足有兩點:一個

深入理解java虛擬機器》讀書筆記---- 類載入機制

類載入的時機 1、類從虛擬機器載入到記憶體開始,到卸載出記憶體為止,整個生命週期分為七個階段:載入、驗證、準備、解析、初始化、使用和解除安裝。其中驗證、準備和解析統稱為連線階段。 2、載入、驗證、準備、初始化和解除安裝這五個階段是按順序執行的,而解析階段卻不一定,解析可以在初始化之後

深入理解Java虛擬機器》讀書筆記JVM常識彙總

《深入理解Java虛擬機器》強烈推薦。 垃圾收集演算法: 1、標記清除演算法:最基礎的演算法。“標記-清除(Mark-Sweep)”,分為標記和清除階段,首先要標記需要被回收的物件,(第一張圖上黑色部分即為被標記的物件),在標記完成後統一回收所有被標記的物件。 (第二張圖即為回收後的記憶體圖)

深入理解Java虛擬機器》讀書筆記JVM常識彙總一

0:JVM的記憶體佈局: (這裡用百度到的圖) 這應該是比較經典的一個JVM記憶體佈局圖。 如圖上:堆和方法區是被執行緒共享的,虛擬機器棧,本地方法棧,程式計數器,這是每個執行緒私有的,即每個執行緒都有1份。  【1】堆:絕大多數物件都存放在這裡,當然肯定有的物件活的久,壽命長,

深入理解Java虛擬機器》讀書筆記JVM常識彙總四

在執行Java程式時候,JVM必須將.class位元組碼檔案載入到記憶體中,才可以例項化這個類。要載入類,就需要用到 類載入器,說道類載入器就要說到  “雙親委派模型”。  此圖來源於 網際網路。 第一層是:BootStrap Classloader是根類載入器,是最高

深入理解Java虛擬機器》讀書筆記JVM常識彙總三

垃圾收集器:主要分為新生代的垃圾收集器和老年代的垃圾收集器,互相搭配使用。 新生代垃圾收集器: Serial收集器:這是一個單執行緒的收集器,它在進行垃圾收集時候,必須暫停其他所有的工作執行緒。即“Stop The World”, 也就是你媽媽在打掃你房間的時候,你肯定得等她打掃完再活動,不

《軟件測試方法和技術》-讀書筆記

圖片 軟件工程 AI 開發 支持 ont 3年 發的 一次 軟件測試正反兩方面的爭辯 軟件測試領域先驅 Bill Hetzel 博士 1993年在美國的北卡羅來納大學組織了歷史上第一次正式的關於軟件測試的會議。從此以後,軟件測試開始頻繁出現在軟件工程的研究和實踐中,也可以認

Java】「深入理解Java虛擬機器」學習筆記1 - Java語言發展趨勢

這本書寫的比較早,現在這些功能都已經不同程度的實現了。 1、模組化     JDK9之前的版本都是一個整體,使用者可能只需要使用一個小功能,但他不得不下載整個JDK。不能滿足定製化需求,顯然Java語言的發展因此大大受限。   所以,Sun公司在OpenJDK建立了一個Jigsaw(拼圖)的專案來推動模

Java】「深入理解Java虛擬機器」學習筆記2-記憶體管理

 一、執行時資料區   JVM在執行Java程式的時候,將其執行時資料區劃分為若干不同區域。它們的用途和建立及銷燬的時間不同。      1、程式計數器(Program Counter Register)     是一塊很小的記憶體空間。當執行緒執行的是Java方法,它記錄的是當前正在執行的