1. 程式人生 > 其它 >http協議:二 (6)域名裡的那些門道

http協議:二 (6)域名裡的那些門道

域名使用字串來代替 IP 地址,方便使用者記憶,本質上一個名字空間系統;

DNS 就像是我們現實世界裡的電話本、查號臺,統管著網際網路世界裡的所有網站,是一個“超級大管家”;

DNS 是一個樹狀的分散式查詢系統,但為了提高查詢效率,外圍有多級的快取;

使用 DNS 可以實現基於域名的負載均衡,既可以在內網,也可以在外網。一個域名可以對應多個ip地址,不一定是一個,所以域名能夠實現負載均衡。

瀏覽器快取->作業系統dnscache【包含hosts】 ->->非權威域名伺服器->根域名伺服器->頂級域名伺服器->二級域名伺服器->權威域名伺服器。

win10會在啟動時載入hosts中的條目到作業系統dns快取
win10還會監視hosts檔案的變化,並動態更新,如新加或刪除條目,都會更新作業系統dns快取
如果嘗試解析一個未知的域名,win10並不會訪問hosts,觀察依據是hosts的訪問時間不會更新。
其中非權威域名伺服器還包括LDNS(企業內網DNS伺服器),三大營運商DNS,谷歌公開的DNS,微軟公開的DNS等。
另外DNS請求有兩種方式:遞迴查詢和迭代查詢,這方面大家可以網上了解一下。LDNS往後面查詢一般是遞迴查詢,因為公司內網是有防火牆的,全部請求通過LDNS來遞迴查詢然後把結果給內網使用者

客戶端向本地域名伺服器獲取,是遞迴查詢
本地域名伺服器向根域名伺服器獲取,可以是遞迴也可是迭代
遞迴就是你交給別人,讓別人查到,在返回給你
迭代就是你找別人要,他叫你去別的地方找

問題

在瀏覽器位址列裡隨便輸入一個不存在的域名,比如就叫“www. 不存在.com”,試著解釋一下它的 DNS 解析過程。

回覆:

1、檢查瀏覽器快取是否存在解析"www.不存在.com"域名的ip

2、檢查作業系統dnscache是否存在解析"www.不存在.com"域名的ip
3、如果沒有找到繼續查詢本地hosts檔案內是否有對應的固定記錄
4、如果hosts中還是沒有那就根據本地網絡卡被分配的 dns server ip 來進行解析,dns server ip 一般是“非官方”的ip,比如谷歌的“8.8.8.8”,本身它也會對查詢的域名解析結果進行快取,如果它沒有快取或者快取失效,則先去頂級域名伺服器“com”去查詢“不存在.com”的域名伺服器ip,結果發現不存在,於是直接返回告訴瀏覽器域名解析錯誤,當然這兩次查詢過程是基於udp協議

終極dns的解析是有誰實現的或者誰規定的:

回覆:

域名由專門的域名註冊機構管理,終極的是ICANN。
IP地址的分配也由ICANN管理,當然有浪費,美國是網際網路的發明國,所以佔用ip地址最多。
ip地址查詢由專門的協議,比如arp。

拿著域名去瀏覽器(作業系統)快取中查詢,這裡有些疑問,瀏覽器中快取在哪裡?過期時間大概多久?過期機制是什麼?

chrome chrome://net-internals/#dns 檢視和清空快取

windows檢視系統快取:
ipconfig /displaydns 顯示已有快取
ipconfig /displaydns > C:\Users\SDWQ\Desktop\1.txt 匯出到再檢視。
ipconfig /flushdns 強制更新快取

大企業為什麼要建設8.8.8.8這樣的DNS伺服器,他們有什麼好處?是否是蒐集更多使用者流量,為自己的產品運營做大資料分析?

回覆:

的確有很多公司會搭建公共dns,給廣大網民免費使用,出發點有很多,不能妄自猜測,但確實可以收集到資料。


基於DNS的負載均衡中,比如一個域名同時返回兩個IP,哪個在前哪個在後有關係嗎?不同客戶端是不是都會選擇排在前面的那個IP來訪問呢?
回覆:

dns解析域名可以內部定製策略,設定權重按優先順序返回ip地址,但除非特殊說明,這些ip地址都是平等的。客戶端也可以任意選擇,雙方都有各自的主動權。

dns快取都有有效期,過期了就會更新

域名負載均衡是由dns伺服器來執行,基於域名,而Nginx是在http協議上負載均衡,更靈活。