第二章第五節 因特網的目錄服務
DNS(域名系統)提供了一種能運行主機名到IP地址轉換的因特網目錄服務;一方面,他讓人可以記住如taobao.com這樣的主機別名;另外一方面,他提供給路由器可理解的IP地址,故DNS就是根據主機名查詢對應的IP地址的服務。固然,這不是DNS的所有,接下來,咱們將深刻探討DNS的技術細節。數據庫
Outline
Notes
## DNS提供的服務
- DNS的定義
- 實體層面看,DNS是一個由分層的DNS服務器實現的分佈式數據庫
- 協議層面看,DNS是一個使得主機可以查詢分佈式數據庫的應用層協議
- DNS運行在53號端口
- DNS具體提供的服務
- 主機別名(host aliasing):有着複雜主機名的主機能夠有一個或者多個別名,例如aaa.bbb.com的主機可能還會有aaa.com和www.bbb.com兩個別名,在這種狀況下,aaa.xxx.com叫作規範主機名(canonical hostname)。主機別名的特徵是比規範主機名更容易記憶,DNS能夠提供根據主機別名獲取規範主機名的服務。
- 郵件服務器別名(canonical hostname):類比於主機別名,電子郵件應用程序能夠調用DNS,對提供的郵件服務器別名進行解析,以得到該主機的規範主機名及其IP地址。
- 提供負載均衡(load distribution): 通常來講,繁忙訪問的大型站點是分佈在多臺服務器上的,沒太服務器均運行在不一樣的端系統上,每一個都有着不一樣的IP地址。這個時候,主機名和IP地址就不是一一對應的關係,而是一個主機名對應一個IP地址的集合。 在大量的,連續的屢次訪問中,DNS在這些全部冗餘的Web服務器之間循環分配負載以達到負載均衡的目的:在向這個主機名發出DNS請求的時候,服務器會用包含所有這些IP地址的報文進行回答,而客戶機總向報文中排在最前的IP地址發出請求
## DNS工做機制概論
集中式DNS即指在因特網上只使用一個DNS服務器,不使用這樣集中式DNS的緣由是:集中式數據庫徹底沒有可擴展能力,使用過程當中會出現 單點失敗問題、流量問題、距離問題、維護性問題;緩存
【DNS服務器的層次和類別】服務器
DNS服務器是有層次的,它能夠分爲三種類型:根DNS服務器, 頂級域(Top-Level Domain, TLD )DNS服務器和權威DNS服務器,分別對應下面三個層次(從上至下)網絡
![](http://static.javashuo.com/static/loading.gif)
- 根DNS服務器:因特網上有13個根DNS服務器, 其中大部分分佈在北美洲,下面顯示的是2012年的根DNS服務器分佈圖
![](http://static.javashuo.com/static/loading.gif)
- 頂級域DNS服務器:頂級域服務器負責頂級域名,如com,org,net,edu和gov和全部國家的頂級域名如cn,uk,jp (edu 教育機構域名, gov 政府部門域名 , org 非盈利性的組織 ,com 企業域名 )
- 權威DNS服務器:在因特網上具備公共可訪問的主機的每一個組織機構必須提供公共可訪問的DNS記錄,這些記錄將這些主機的名字映射爲IP地址。 由組織機構的權威DNS服務器保存這些DNS記錄,組織機構能夠選擇實現它本身的權威DNS服務器來保持這些記錄,或者經過支付費用將這些記錄存儲在某個服務提供商的DNS服務器中。多數大學和大公司實現和維護它們本身基本的權威DNS服務器、
- 本地DNS服務器:還有另外一類比較重要的DNS服務器,叫作本地DNS服務器(local DNS server),它並不在咱們上面所說的DNS層次結構中。本地DNS服務器的做用有如下兩點:
- 主機和本地DNS服務器通常是相鄰的,當主機發出DNS請求的時候,該請求會被髮往本地DNS服務器,它起着代理的做用,並將該請求轉發到DNS服務器層次結構中
- 本地DNS服務器能夠經過緩存主機名/IP地址,減小對相同主機名的查詢而消耗的時間,改善時延和性能
【DNS中查詢記錄】負載均衡
實際上,在DNS服務中, 並不能經過對某個DNS服務器,經過僅僅一次的「請求/響應」就取得主機名/IP地址的查詢結果。相反,須要多個不一樣的DNS服務器之間進行屢次交互才能獲取最終的查詢結果分佈式
(迭代)
(遞歸)性能
例如上圖所示的例子中用到了
遞歸查詢和
迭代查詢,主機cis.poly.edu想知道主機gaia.cs.umass.edu的IP地址,而且主機gaia.cs.umass.edu 的權威DNS服務器爲 dns.umass.edu。
則DNS查詢過程以下:
1. 主機cis.poly.edu首先向它的本地DNS服務器dns.poly.edu發送一個DNS查詢報文,該查詢報文包含有要求轉換的主機名gaia.cs.umass.edu
2. 本地DNS服務器dns.poly.edu將該報文轉發至根DNS服務器。
3. 該根DNS服務器注意到DNS服務器的edu前綴並向本地DNS服務器dns.poly.edu返回負責edu的頂級域DNS服務器的IP地址列表
4. 本地DNS服務器接收到了返回的報文,根據報文中的IP地址,向該頂級域DNS服務器發送查詢報文
5. 頂級域DNS服務器注意到了umass.edu前綴,用包含權威DNS服務器的IP地址進行響應,該權威DNS服務器是負責馬薩諸塞大學的dns.umass.edu
6. 本地DNS服務器直接向主機dns.umass.edu重發查詢報文
7. 主機dns.umass.edu使用gaia.cs.umass.edu的IP地址做爲響應,傳回給本地DNS服務器
8. 最終,本地DNS服務器將包含最終結果的查詢報文轉發給請求主機cis.poly.edu
【DNS緩存】.net
- 爲了改善時延性能並減小在因特網上處處傳輸的DNS報文數量,DNS普遍使用緩存技術。
- 原理:當一個DNS服務器接收一個DNS回答(例如,包含主機名到IP地址的映射)時,DNS服務器能將回答中的信息緩存在本地存儲器。因爲主機與主機名的IP地址映射決不是永久的,因此DNS服務器在一段時間後(一般設置爲兩天)將丟棄緩存的信息。
## DNS記錄和報文
【DNS記錄】3d
實現DNS分佈式數據庫的全部DNS服務器共同存儲着資源記錄(Resource Record,RR),RR提供了主機名到IP地址的映射。下面是RR的基本格式:代理
![](http://static.javashuo.com/static/loading.gif)
- Type=A name 是主機名 Value是IP地址。 例如: (relay1.bar.foo.com, 145.37.93.126, A)
- Type=NS name 是域 (如 foo.com) Value是該域的權威名字服務器的IP地址。如(foo.com, dns.foo.com, NS)
- Type=MX Value是與name相聯繫的郵件服務器。如(mail.bar.foo.com)
- Type=CNAME Value是別名爲name的主機對應的規範主機名。如(foo.com, relay1.bar.foo.com)
- 注:經過使用MX記錄,一個公司的郵件服務器和其餘服務器(如它的Web服務器)可使用相同的別名
- 以圖2-21爲例,
【DNS報文】
DNS只有兩種報文,即查詢和回答報文,而且這兩種報文有着相同的格式。下圖是DNS報文格式:
![](http://static.javashuo.com/static/loading.gif)
- 前12字節是首部區域,其中包括標識符、標誌、問題數、回答RR數、權威RR數、附加RR數共6個字段。標識符字段16bit,用於標識這個查詢報文。
- 標識符會被複制到對查詢的回答報文中,以便讓客戶機用它來匹配發送的請求和接收到的回答。標誌字段含有若干標誌,1bit的「查詢,回答」標誌位指出報文是查詢報文(0)仍是回答報文(1)。當某DNS服務器剛好是被請求主機的權威DNS服務器時,1bit的「權威的」標誌位被放置在回答報文中。若是客戶機但願DNS服務器執行遞歸查詢,特設置1bit的「但願遞歸」標誌位。若是該DNS服務器支持遞歸查詢,在它的回答報文中會對1bit的「遞歸可用」標誌位置位。在首部區域中,還有4個「數量」字段,分別給出了在首部後四類數據區域出現的數量。
- 問題區域包含正在進行查詢的信息。該區域包括:名字字段,用於指出正在被查詢的主機名字;類型字段,用於指出正在被詢問的問題類型,例如是A類問鹿仍是MX問題。
- 回答區域包含了對最初請求的名字的資源記錄。每一個記錄中含有Type(如A記錄、NS記錄、CNAME記錄、MX記錄)字段、Value字段和TTL字段。前面講過,一個主機名能夠對應多個IP地址,因此在一個回答報文的回答區域中能夠包含多條RR。權威區域包含了其餘權威DNS服務器的記錄
- 附加區域包含了其餘一些有用的記錄,例如,在一個MX請求的回答報文的回答區域包含了一條資源記錄,給出了郵件服務器的規範主機名。該附加區域就能夠包含一個類型A記錄,提供對於該郵件服務器的規範主機名的IP地址。
【在DNS中插入記錄】
- 假設你剛剛建立了一個網絡烏托邦(Network Utopia)公司, 要作的第一件事情就是到註冊登記機構註冊域名(networkutopia.com), 註冊的時候,須要向該機構提供你的權威DNS服務器的名字和IP地址,該註冊機構將確保將一個NS記錄和A記錄被插入com頂級域DNS服務器中。
- 例如,假設咱們的網絡烏托邦(Network Utopia)公司的權威服務器的主機名和IP地址爲dns1.networkutopia.com 和 128.119.40.111,則該註冊機構將如下記錄插入com頂級域DNS服務器
- (networkutopia.com, dns1.networkutopia.com,NS)
- (dns1.networkutopia.com, 128.119.40.111,A)