域名服務器工作原理
1. 引言 2. 域名 3. 分布式系統 4. 創建新域名
只要您在互聯網上發送電子郵件或瀏覽Web,您就會用到域名服務器,而您自己可能都不知道您在使用它們。域名服務器(即DNS)是互聯網的相當重要且完全隱藏的部分,并且很神奇。域名服務器系統在全球范圍內構建了一個最大最活躍的分布式數據庫。如果沒有域名服務器,互聯網就會迅速停止運轉。
在本文中,我們將看一下域名服務器系統,讓您了解這個系統的工作原理并領會其神奇的功能。
您瀏覽網頁或發送電子郵件時都要用到域名。例如,URL“http://www.howstuffworks.com”中包含域名howstuffworks.com。電子郵件地址ikonw@howstuffworks.com中也包含此域名。
有實際意義的名稱(如“howstuffworks.com”)方便記憶,可是對計算機卻非如此。所有計算機都使用稱為IP地址的名稱來相互引用。例如,我們稱作“www.howstuffworks.com”的計算機有一個IP地址216.183.103.150。每當您使用域名時,都會使用互聯網的域名服務器(DNS)將對我們而言有實際意義的域名轉換為計算機可讀的IP地址。在一天的瀏覽網頁和發送電子郵件工作中,您可能已訪問了數百次域名服務器!
域名服務器就是要將域名轉換為IP地址。這聽起來好像是一個簡單的任務,但實際上有五大難點:
- 目前正在使用的IP地址達數十億個,并且大多數計算機也有實義名稱。
- 每天會發出數十億個域名服務器請求。每個人每天就可以輕松發出一百個或更多的域名服務器請求,同時每天都會有幾億用戶和計算機在使用互聯網。
- 域名和IP地址每天都在發生變化。
- 每天都會創建新的域名。
- 每天都會有數百萬用戶更改和添加域名和IP地址。
域名服務器系統是一個數據庫,世界上的任何其他數據庫都無法獲取如此多的請求。世界上的任何其他數據庫每天也不會有數百萬用戶對其進行更改。這就是導致域名服務器系統如此獨特的原因。
IP地址
若要使互聯網上的所有計算機井然有序,則應為每個計算機分配稱為IP地址的唯一地址。IP的全稱是Internet Protocol,即互聯網協議,并且這些地址都是由32位數字組成,通常采用“點分十進制數”的四個“八進制數”表示。典型的IP地址如下所示:
216.183.103.150
IP地址中的四個數字稱作八進制數,因為這四個數字可以具有0-256之間的值(每個八進制數具有28種可能)。
互聯網中的每臺計算機都具有自己的IP地址。由于服務器具有靜態IP地址,因此不會經常變化。通過調制解調器進行撥號的家用計算機通常具有的IP地址是在您撥號時由ISP(互聯網服務提供商)分配的。對于此次會話來說,此IP地址是唯一的,但是在您下次撥號時會發生改變。這樣,ISP僅需要為其所支持的每個調制解調器而每個客戶提供一個IP地址。
如果您使用的是安裝Windows操作系統的計算機,則可以使用命令WINIPCFG.EXE(對于Windows 2000/XP,為IPCONFIG.EXE)查看當前的IP地址。在UNIX計算機上,將nslookup連同計算機名稱一起鍵入(如“nslookup www.howstuffworks.com”)就可以顯示計算機的IP地址(使用命令hostname可獲知計算機的名稱)。
有關IP地址的更多信息,請參見IANA。
就互聯網上的計算機而言,您只需將相應的IP地址告知服務器即可。例如,您可以在瀏覽器中鍵入http://216.183.103.150,然后您就會到達包含用于howstuffworks的Web服務器的計算機。域名的確是為人們提供了方便。
域名
如果我們必須記住每天訪問的所有網站的IP地址,那么我們肯定會瘋掉。我們不擅長記住一長串的數字,但卻擅長記住單詞(域名就是由單詞構成的)。您的腦海中可能已存儲了數百個域名。例如:
- howstuffworks.com——典型名稱
- www.yahoo.com ——世界上最知名的名稱之一
- www.mit.edu ——麻省理工學院的域名
- encarta.msn.com ——不是以www開始的Web服務器
- www.bbc.co.uk ——包含四個部分而非三個部分的名稱
- ftp.microsoft.com ——FTP服務器而非Web服務器
這些域名的COM、EDU和UK部分被稱作頂級域名或一級域名。存在幾百個頂級域名(包括COM、EDU、GOV、MIL、NET、ORG和INT)以及具有唯一性的代表每個國家/地區的雙字母組合。
每個頂級域內都包含一個二級域名的大型列表。例如,在COM一級域名中,您可以獲得:
- howstuffworks
- yahoo
- msn
- microsoft
- 以及幾百萬個其他的域名...
COM頂級域中的每一個名稱都必須是唯一的,但是在不同的域中可以重復。例如,howstuffworks.com和howstuffworks.org就代表完全不同的計算機。
對于bbc.co.uk來說,它是一個三級域名。盡管最多可以有127級域名,但超過四級的域名很少見。
最左邊的詞語(如www或encarta)代表主機名。它指明了域中的一臺具體機器(有特定的IP地址)的名稱。給定的域可以包含數百萬個主機名,只要這些主機名在該域中都是唯一的。
由于給定域中的所有名稱都必須是唯一的,因此,就需要一個實體來管理列表并確保名稱不會重復。例如,COM域不得包含任何重復的名稱,這樣就需要一個名為Network Solutions的公司負責維護此列表。當您注冊域名時,該域名需要通過在Network Solutions公司工作的注冊人員的審查,才能添加到列表中。而Network Solutions會保留一個名為whois數據庫的中央數據庫,該數據庫包含了有關每個域的所有者和名稱服務器的信息。如果您轉到whois表單,則可以找到有關當前存在的任何域的信息。
雖然讓一個中央授權機構來跟蹤COM(和其他)頂級域中的名稱的數據庫很重要,但您不會想將COM域中的所有信息集中在一個數據庫中。例如,微軟擁有數十萬個IP地址和主機名。微軟希望維護其自身的用于microsoft.com域名的域名服務器。同樣,英國可能希望管理uk頂級域名,而澳大利亞可能希望管理au域名,依此類推。因此,域名服務器系統是一個分布式數據庫。微軟全權負責處理用于microsoft.com的名稱服務器——它維護實施它的域名服務器系統部分的計算機,并且微軟可以在任何時間更改其域的數據庫,因為它擁有自己的域名服務器。
每個域名都具有用于處理其請求的域名服務器,并有專人來維護此域名服務器中的記錄。域名服務器系統的一個最令人驚奇的方面是——它是通過由數百萬人管理的數百萬臺計算機完全分發到全世界的,然而其行為表現則類似于一個簡單的集成式數據庫!
分布式系統
名稱服務器整天都在做兩件事情:
- 接受來自程序的有關將域名轉換為IP地址的請求。
- 接受來自其他名稱服務器的有關將域名轉換為IP地址的請求。
收到請求后,名稱服務器可以對其執行下列四種操作之一:
- 使用一個IP地址回答請求,因為它已知道域的IP地址。
- 聯系另一個名稱服務器并嘗試找到請求的名稱對應的IP地址。它可能需要多次執行此操作。
- 回答:“我不知道您請求的域的IP地址,以下是我知道的名稱服務器的IP地址。”
- 返回一條錯誤消息,因為被請求的域名是無效或不存在的。
當您在瀏覽器中鍵入URL時,瀏覽器首先會將域名和主機名轉換為一個IP地址,以便它能夠從該IP地址上的計算機中請求網頁(有關整個過程的詳細信息,請參見Web服務器工作原理)。若要執行此轉換,瀏覽器必須與名稱服務器進行對話。
當您在互聯網上設置計算機時,您(或您所安裝的用于連接到ISP的軟件)必須告知計算機它在將域名轉換為IP地址時應使用的名稱服務器。在一些系統上,當您連接到ISP時,將為計算機動態提供域名服務器;而在其他一些計算機上,域名服務器是硬連接的。如果您使用的是安裝了Windows 95/98/ME的計算機,則可以使用命令WINIPCFG.EXE(對于Windows 2000/XP,使用IPCONFIG)來查看當前的名稱服務器。在UNIX計算機上,則將nslookup連同計算機名稱一起鍵入進行查看。計算機上需要與名稱服務器進行通信以解析域名的任何程序,都知道應與之通信的名稱服務器,因為它可以從操作系統中獲取計算機的名稱服務器的IP地址。
因此,瀏覽器會聯系其名稱服務器并表示,“我需要您為我將域名轉換為IP地址。”例如,如果在瀏覽器中鍵入“www.howstuffworks.com”,則瀏覽器需要將該URL轉換為一個IP地址。于是瀏覽器會將“www.howstuffworks.com”交給其默認名稱服務器并請求它進行轉換。
名稱服務器可能已知道www.howstuffworks.com的IP地址。如果最近收到過解析www.howstuffworks.com的其他請求(名稱服務器會對IP地址進行緩存以加快處理速度),就可能存在這種情況。在這種情況下,名稱服務器可以立即返回相應的IP地址。不過,讓我們假定名稱服務器必須從頭開始。
名稱服務器通過聯系一個根名稱服務器開始搜索IP地址。根服務器知道處理頂級域的所有名稱服務器的IP地址。您的名稱服務器將會向根服務器請求www.howstuffworks.com的IP地址,根服務器會表示(假定沒有緩存),“我不知道www.howstuffworks.com的IP地址,但存在COM名稱服務器的IP地址。”顯而易見,對于整個過程而言,這些根服務器非常重要,因此:
- 有許多根服務器散布在全球的各個角落。
- 每一個名稱服務器都具有一個包含所有已知根服務器的列表。名稱服務器將與列表中的第一個根服務器聯系,如果這樣做不起作用,那么它會與列表中的下一個根服務器聯系,依此類推。
下面是典型的名稱服務器所擁有的根服務器的典型列表:
; This file holds the information on root name servers
; needed to initialize cache of Internet domain name
; servers (e.g. reference this file in the
; "cache . andlt;fileandgt;" configuration file of BIND domain
: name servers).
;
; This file is made available by InterNIC registration
; services under anonymous FTP as
; file /domain/named.root
; on server FTP.RS.INTERNIC.NET
; -OR- under Gopher at RS.INTERNIC.NET
; under menu InterNIC Registration Services (NSI)
; submenu InterNIC Registration Archives
; file named.root
;
; last update:Aug 22, 1997
; related version of root zone:1997082200
;
;
; formerly NS.INTERNIC.NET
;
. 3600000 IN NS A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.3600000 A 198.41.0.4
;
; formerly NS1.ISI.EDU
;
. 3600000 NS B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.3600000 A 128.9.0.107
;
; formerly C.PSI.NET
;
. 3600000 NS C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.3600000 A 192.33.4.12
;
; formerly TERP.UMD.EDU
;
. 3600000 NS D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.3600000 A 128.8.10.90
;
; formerly NS.NASA.GOV
;
. 3600000 NS E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.3600000 A 192.203.230.10
;
; formerly NS.ISC.ORG
;
. 3600000 NS F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.3600000 A 192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
. 3600000 NS G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.3600000 A 192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
. 3600000 NS H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.3600000 A 128.63.2.53
;
; formerly NIC.NORDU.NET
;
. 3600000 NS I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.3600000 A 192.36.148.17
;
; temporarily housed at NSI (InterNIC)
;
. 3600000 NS J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.3600000 A 198.41.0.10
;
; housed in LINX, operated by RIPE NCC
;
. 3600000 NS K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.3600000 A 193.0.14.129
;
; temporarily housed at ISI (IANA)
;
. 3600000 NS L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.3600000 A 198.32.64.12
;
; housed in Japan, operated by WIDE
;
. 3600000 NS M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.3600000 A 202.12.27.33
; End of File
雖然格式有點奇怪,但是它基本上顯示了包含13個不同的根服務器的實際IP地址的列表。
根服務器知道可處理幾百個頂級域的名稱服務器的IP地址。它可以為您的名稱服務器返回COM域名的名稱服務器的IP地址。然后您的名稱服務器會詢問COM名稱服務器是否知道www.howstuffworks.com的IP地址。由于COM域名的名稱服務器知道處理howstuffworks.com域名的名稱服務器的IP地址,于是它會返回這些IP地址。您的名稱服務器然后又會與howstuffworks.com的名稱服務器聯系,并詢問它是否知道www.howstuffworks.com的IP地址。如果它知道,它則會將相應的IP地址返回給您的名稱服務器,接著您的名稱服務器會將該IP地址返回給瀏覽器,然后瀏覽器會與www.howstuffworks.com的服務器聯系以獲取網頁。
完成此工作的一個關鍵點是冗余。由于在每一級別上都會有多個名稱服務器,因此如果一個名稱服務器失敗,那還有其他的名稱服務器可以處理請求。例如,有三個不同的計算機用于運行HOWSTUFFWORKS.COM請求的名稱服務器。而只有在所有三個計算機都無法工作的情況下才會出現問題。
另一個關鍵點是緩存。在名稱服務器解析某個請求之后,它會對接收到的所有 IP地址進行緩存。在該名稱服務器為任何COM域請求過根服務器之后,它就會知道處理COM域的名稱服務器的IP地址,因此它無需再次為此信息而煩擾根服務器。名稱服務器可以為每個請求執行此操作,并且此緩存有助于防止操作中斷。
不過,名稱服務器并不是永久進行緩存。緩存有一個名為生存時間(TTL)的組件,用于控制服務器緩存某條信息的時間。當服務器接收到一個IP地址時,會隨之接收到TTL。名稱服務器會將IP地址緩存一段時間(范圍是幾分鐘到幾天),然后丟棄它。TTL允許對名稱服務器中的更改進行傳播。不過,并非所有名稱服務器都會遵守它們接收到的TTL。在howstuffworks將其計算機移動到新的服務器時,花費了三個星期的時間才將轉換傳播到整個Web。我們在主頁的左上角放置了一個名為“新服務器”的小標記,因此在轉換期間,用戶可以分辨看到的是新服務器還是舊服務器。
創建新域名
某人想要創建新的域名必須做兩件事:
- 找到用來存放域名的名稱服務器。
- 注冊域名。
從技術上說,域中不一定需要計算機,而只需要一臺能夠處理域名請求的名稱服務器就可以了。
可以通過兩種方式可以讓您獲取域的名稱服務器:
- 您可以自行創建并管理名稱服務器。
- 您可以付費請ISP或主機服務公司為您處理名稱服務器。
大多數大型公司都具有自己的域名服務器。而大多數小型公司則是付費使用一些域名服務器。
HowStuffWorks的歷史就是一個典型的例子。當howstuffworks.com剛創建時,開始只是一個寄放域。此域寄放在名為www.webhosting.com的公司中。Webhosting.com負責維護名稱服務器,并維護為該域創建單個“正在構建”網頁的計算機。
若要創建域,則需要填寫提供域名注冊服務的公司(例如:register.com、verio.com和networksolutions.com)規定的表單。這些公司創建“正在構建”網頁,并在其名稱服務器中創建一個條目,然后將表單數據提交到whois數據庫中。COM、ORG和NET等名稱服務器會使用最新的IP地址信息進行更新,更新頻率為一天兩次。這時,就會存在一個域,并且任何人都可以訪問相應的“正在構建”網頁。
然后HowStuffWorks就開始在www.howstuffworks.com這個域下發布內容。我們通過Tabne(現在是Verio, Inc. 的一部分)設立了主機帳戶,Tabnet運行HowStuffWorks的域名服務器和承載HowStuffWorks網頁的計算機。此類計算機稱作虛擬Web主機,可同時承載多個域。大約有五百個不同的域共享同一個處理器。
由于HowStuffWorks日益受到歡迎,因此虛擬主機已無法滿足需求,從而HowStuffWorks需要擁有自己的服務器。此時,HowStuffWorks開始維護自己的專用計算機,并開始管理自己的域名服務器。HowStuffWorks擁有主服務器和輔助服務器:
- AUTH-NS1.HOWSTUFFWORKS.COM 209.116.69.78
- AUTH-NS2.HOWSTUFFWORKS.COM 209.116.69.79
HowStuffWorks的主域名服務器是auth-ns1.howstuffworks.com。而我們對主服務器所做的任何更改都會自動傳送給輔助服務器,后者也是由我們的ISP維護的。
所有這些計算機都將運行名為BIND的名稱服務器軟件。BIND通過主服務器上如下所示的文本文件,可以了解HowStuffWorks域中的所有計算機:
@ NS auth-ns1.howstuffworks.com.
@ NS auth-ns2.howstuffworks.com.
@ MX 10 mail
mail A 209.170.137.42
vip1 A 216.183.103.150
www CNAME vip1
從文件的開頭進行解碼,便可以看到:
- 前兩行指出主名稱服務器和輔助名稱服務器。
- 下一行稱為MX記錄。當您向HowStuffWorks上的任何人發送電子郵件時,發送電子郵件的軟件會與名稱服務器聯系以獲取MX記錄,于是它就會知道HowStuffWorks的SMTP服務器的位置。許多大型系統都具有多個處理傳入電子郵件的計算機,因此就會產生多個MX記錄。
- 下一行指出用于處理對mail.howstuffworks.com的請求的計算機。
- 下一行指出用于處理對oak.howstuffworks.com的請求的IP地址。
- 下一行指出用于處理對howstuffworks.com(無主機名)的請求的IP地址。
從這個文件中我們可以看到,HowStuffWorks服務器基礎結構是由具有單獨的IP地址的若干物理計算機構成的。這些主機具有類似mail和www的別名。任何內容都可以具有別名。例如,此文件中可以包含一個用于scoobydoo.howstuffworks.com的條目,并且該條目可以指向名為walnut的物理計算機。也可以對yahoo.howstuffworks.com使用別名,并且該別名可以指向yahoo。實際上,對別名沒有什么限制。我們也可以創建多個名稱服務器并對我們的域分段。
通過上面的說明您會發現,域名服務器是一種令人稱奇的分布式數據庫。域名服務器每天通過由數百萬個用戶管理的數百萬個名稱服務器所構成的網絡來處理針對數十億個名稱的數十億個請求。每當您發送電子郵件或查看URL時,您就會向散布在全球范圍內的多個名稱服務器發出請求。令人驚奇的是,此過程通常是完全不可見而且非常可靠的!
評論
查看更多