計算機網路——應用層(三)
DNS服務
DNS全稱叫Domain Name System,翻譯過來就是域名系統,但我們一般稱之為域名解析。
什麼是域名解析呢?簡單來說就是把我們表面所看到的主機域名轉化為網路上能夠識別的IP地址。這就像同一個東西在不同地方的不同表現形式,舉個例子,比如說你叫張三,是一名老師,在學校的時候大家都稱呼為你為張老師,但在家裡或者其他場合,大家都稱呼你為張三。這個張老師和張三都對應的是你自己本身,但因為在不同的場合,所以表現的形式不太一樣。
對於計算機網路體系也是一樣,我們怎麼來識別一個主機或者伺服器呢?對於計算機來說,它們比較喜歡用IP地址來表示網路中每一個主機;但對我們自己來說,IP地址格式太難記憶了,也不好理解,比如15.49.14.18;159.156.5.15等等這些個IP地址(我隨便敲的),我們大部分人不能理解是什麼意思,也不好記。所以我們就發明了一個我們能夠理解的表示方法——域名
域名
什麼是域名呢?簡單來說就是我們平常所看到的各種各樣的網址,比如像 www.baidu.com, www.qq.com這些等等。前面的WWW代表這遵循的是全球資訊網的格式,後面的 baidu.com,qq.com才是真正有區分度的域名。而後綴COM代表的是頂級域伺服器 。這些頂級域伺服器就像一個服務機構,如果你想擁有一個以COM結尾的屬於自己的網址,那麼你就得去這些服務機構註冊,繳納一定的費用,提供一些資料,這些服務機構就會給你註冊一個屬於你自己的獨特的網址,這樣別人就能通過這個網址來訪問你的伺服器了。這樣的頂級域名還有很多,像 .net,.cn等等。
DNS負責將這些網址,也就是我們能夠理解的域名轉化為計算機能夠理解的IP地址,然後再打包生成網路報文交付給傳輸層
那麼這是怎麼實現的呢?
我們自己計算機中都有個DNS應用程式,這個應用程式通過網路(UDP)來跟DNS伺服器打交道。之前提到過的頂級域伺服器就是一個DNS伺服器,它們能接受DNS應用程式傳給它的域名,然後返回這個域名對應的IP地址。所有之前你去註冊所提供的一些資料就包括你的IP地址。這樣的DNS伺服器總共分為三個層次:
- 根DNS伺服器
- 頂級域DNS伺服器
- 權威DNS伺服器
DNS應用程式具體做法是:
1)瀏覽器從請求URL中提取出域名,比如 www.baidu.com然後將這個域名交給DNS應用程式。
2)你的DNS應用程式向DNS伺服器傳送一個請求,這個請求包含域名
3)DNS伺服器向你的DNS應用程式返回一個響應報文,這個報文包含那個域名所對應的IP地址。
4)你的DNS應用程式會將這個IP地址返回給瀏覽器,瀏覽器隨即生成請求報文交給傳輸層。
我們接下來要介紹的就是其中的第2步和第3步。
首先我們先來了解一下DNS伺服器的層次模式:
我們的DNS應用程式在拿到域名 www.baidu.com之後,首先將這個域名傳送給根DNS服務,根DNS伺服器檢查這個域名,發現這個域名是以com結尾的,然後返回給DNS應用程式com所對應的頂級域伺服器的IP地址。然後DNS應用程式再向這個IP地址(頂級域伺服器)傳送 www.baidu.com這個域名,該頂級域伺服器檢查這個域名,發現這個域名是以baidu.com結尾的,然後它就把baidu.com所對應的權威DNS伺服器的IP地址發給DNS應用程式,而這個IP地址就是之前你去註冊域名的時候要提交的。然後DNS應用程式再向這個IP地址(權威DNS伺服器)傳送www.baidu.com這個域名,這個權威DNS伺服器就會把這個域名所對應的IP地址傳回給DNS應用程式。最後,DNS應用程式終於拿到了www.baidu.com這個域名所對應的IP地址。
權威DNS伺服器
這裡我想講一下這個權威DNS伺服器,權威DNS伺服器時建立在使用者自己那裡的。比如百度公司去申請www.baidu.com這個域名,百度公司就要提供自己的權威DNS伺服器和自己的IP地址。你通過頂級域伺服器能夠查詢到這個IP地址,然後通過這個IP地址訪問百度的權威DNS伺服器,百度的權威DNS伺服器就會將www.baidu.com這個域名對應的IP地址返回給你。
有些人可能會問,為什麼頂級域伺服器不直接儲存baidu.com這個域名對應的IP地址?這樣我們不經過權威DNS伺服器就能獲得域名對應的IP。
我是這麼考慮的,因為百度公司有很多WEB伺服器,你請求的頁面可能分佈在不同的WEB伺服器上,而不同的WEB伺服器具有不同的內網IP地址,比如百度公司有三臺WEB伺服器,其IP地址分別為192.168.0.1 / 192.168.0.2 / 192.168.0.3。 頂級域DNS伺服器不能根據你所提供的域名找到正確的WEB伺服器IP地址,所以它就讓你直接跟百度公司的權威DNS伺服器打交道,因為它知道百度公司的權威DNS伺服器的IP是192.168.0.0。而百度公司自己的DNS伺服器當然知道你所請求的頁面在哪個WEB伺服器上,然後它再把準確的WEB伺服器IP地址發給你。