Linux網路管理員手冊 (轉)
Linux網路管理員手冊 (轉)[@more@]管理員手冊
釋出者:tobull@21cn.com">netbull 翻譯:趙炯
gohigh@shtdu.edu.cn
第二章 網路的問題
我們將轉至討論一些你將遇到的一些細節上,當你將你的Linux機器連線到TCP/IP網路時就會用到這些細節,它涉及到、主機名、以及有時是選擇問題。這一章給出了你所需的背景資料,以用於理解你的設定需求,下一章將討論涉及這些的一些工具。
2.1 網路介面
為了隱藏可能用於網路環境的裝置的差異性,TCP/IP定義了一個抽象的介面(interface),透過這個介面來訪問。這個介面提供了一組操作,該組操作對所有的硬體型別是一樣的,並且基本上是涉及傳送和接收分組。
對於每種你想用於連網的外圍裝置來說,必須在核心中有一個相應的介面。例如,Linux中乙太網的介面稱作eth0和eth1,SLIP的介面是sl0、sl1等等。這些介面名稱是用於目的,那時你想給核心命名一個特定的物理裝置。除了這別無它意。
為了對TCP/IP連網有用,一個介面必須分配一個IP地址,當與其它地方通訊時這個地址起到它的鑑定識別的作用。這個地址與上面提到的介面名稱是不同的;如果你將介面比作一扇門的話,那麼這個地址就象是門上釘的名牌一樣。
當然,可能還有其它一些裝置引數需要設定;其中之一就是特定硬體能夠處理的最大資料包的大小,也稱為最大傳輸單元(Maximum Traner Unit),或MTU。別的屬性將在後面介紹。
2.2 IP地址
如上章所提到的,IP網路所能理解的地址是一個32位元的數字。每一臺機器必須分配一個對於網路環境來說唯一的一個數字。如果你執行一個不與其它網路有TCP/IP通訊的本地網路,你可以依據個人的愛好來分配這些數字。然而,對於Internet上的站點來說,這些數字是由一箇中心權威機構,網路資訊中心(Network Information Center或NIC)來分配的。[1]
為了容易閱讀,IP地址被分解成四個8位元數字稱為八位位組(octets)。例如,quark.physics.groucho.edu有一個IP地址為0x954C0C04,它可以寫成149.76.12.4。這個格式通常稱作為點分四組表示法(Dotted quad notation)。[還有一種稱呼為點分十進位制表示法Dotted decimal notation—譯者注]
這種表示法的另一個原因是IP地址可以分成包含在開頭(左面)的八位位組中的一個網路號(network number)和包含在剩餘(右面)的八位位組中的一個主機號(host number)。當IP地址遵循NIC的規則使用時,並不是為你計劃要使用的每臺主機分配一個地址,而是給你一個網路號,並且允許你依照你的喜好,在你的網路上給各臺主機分配在該網路號範圍內的所有有效的任意IP地址。
根據組成的網路規模的大小,IP地址的主機部分可大可小。為適應不同的需要,定義了幾類網路,給出了IP地址的不同分割法。
A類 A類由1.0.0.0到127.0.0.0的網路構成。網路號包含在第一個八位位組中。這樣就提供了24位元位的主機部分,每個網路允許大約有160萬臺主機。
B類 B類包括從128.0.0.0到191.255.0.0的網路;網路號由前兩個八位位組構成。這樣就可以有16320個網路,而每個網路可以有65024臺主機。
C類 C類網路的範圍從192.0.0.0到223.255.255.0。網路號由前三個八位位組組成。可以有近200萬個網路,而每個網路能容納254臺主機。
D、E、F類的地址範圍從224.0.0.0到254.0.0.0,用於試驗用途或保留給將來使用,而沒有分配給任何網路用。
如果我們再參考前一章的例子,我們發現quark的地址149.76.12.4對應B類網路149.76.0.0的12.4的主機。
你可能已經注意到,上面列出來的主機部分不是每個八位位組的所有數值都可以使用的。這是因為八位位組為全0或255的主機號是留作它用的。主機部分的所有位元位為全零的地址引用為一個網路,而主機部分的所有位元位為全1的地址稱為廣播地址。它同時指一個網路上的所有主機。因此,149.76.255.255不是一個有效地址,而是指網路149.76.0.0上的所有主機。
還有兩個網路地址0.0.0.0和127.0.0.0也是保留的。這第一個稱為預設路由(default route),後一個稱為回送地址(lback address)。預設路由與IP路由資料包的方式有關,這將在下面討論。
網路地址127.0.0.0保留作你的主機內部IP通訊用。通常,地址127.0.0.1將分配給主機上的一個特殊介面使用,稱為回送介面(loopback interface),它的行為象一個閉合電路。從TCP或UDP送來的任何IP分組都將返送給它們,就好象這個分組是剛從某個網過來的。這允許你不必使用一個“真正”的網路就能開發並測試網路。它的另一種很有用的應用是在當你想在單機上使用網路軟體時。這並不象聽起來那麼罕有;例如,許多UUCP站點根本就沒有IP連通,但仍然要執行INN新聞。為了要正常的運作,INN需要回送介面。
2.3 地址解析
現在,你已經知道IP地址是如何形成的,你可能會覺得奇怪,它們在乙太網上是如何用於編址不同的主機的。畢竟,乙太網協議是用一個與IP地址完全不同的六個八位位組的數值來識別主機的,不是嗎?
對。這就是為什麼需要一種將IP地址對映到乙太網地址的機制了。這就是所謂的地址解析協議(Address Resolution Protocol),或。實際上,ARP根本不限於乙太網,它也可以應用於其它型別的網路,如業餘電愛好者等。ARP的基本概念正象人們在一個150人的人群中尋找X. Ample先生時大多數人的做法一樣:他們環繞著人群,叫喊著他的名字,並確信如果他在那裡的話一定會應答的。
當ARP想找出與給定IP地址相應的乙太網地址時,它就利用了乙太網的“廣播”特性,此時一個資料包在網上同時定址所有的站點。ARP所傳送的廣播資料包含有對相應IP地址的查詢。每臺主機將接收到的IP與自己的IP地址相比較,如果一致,就返回一個ARP響應給發出查詢的主機。此時發出查詢的主機就可以從響應資料包中提取傳送者的乙太網地址了。
當然,你會覺得驚訝,一臺主機怎麼能知道在全世界數不清的乙太網上它能找到所期望的主機呢?並且為什麼一定是乙太網呢?這些問題都涉及稱為路由選擇的操作,也即在網路上尋找出一臺主機的物理位置。這將是下一節的主題。
此時,讓我們再多討論一會ARP。一旦一臺主機發現了一個乙太網地址,該主機就將它存貯在ARP的緩衝中,這樣主機在下一次想要傳送資料包給所討論的主機時就不要再次查詢它的乙太網地址了。然而,永久地儲存這些資訊是不明智的;例如,主機上的以太有可能由於技術上的問題而被更換掉,此時ARP的登記項就變得無效了。為了強迫進行另一次IP地址的查詢,ARP緩衝中的登記項因此在一段時間後就被丟棄。
有時候,需要找出與給定乙太網地址相對應的IP地址。當一臺機器想從網上的一臺上引導時就會有這種情況,這在上是常有的情形。但是,一個無盤客戶實際上並沒有有關自身的資訊—除了知道自己的乙太網址外!所以它主要要做的是廣播一條請求引導伺服器告訴它它的IP地址的訊息。針對於此,有另一個協議,命名為反向地址解析協議(Reverse Address Resolution Protocol),或RARP。與BOOTP協議一起,它用於規定在網上引導無盤站的過程。
2.4 IP路由選擇
2.4.1 IP網路
當你給某人寫了一封信,通常會在信封上寫上完整的收信人地址,列出了國家、州和郵政編碼等等。當你把信放入時,郵政服務會把它送到目的地:它將被送到指定的國家中去,該國的郵政服務會把它分發到正確的州和地區,等等。這個分級方案的優點是顯而易見的:不管你在哪裡發出了這封信,當地的郵遞員將會大概地知道該封信要投遞的方向,但並不關心這封信在送達的國家中以什麼方式來投遞。
IP網路的結構與之相似。整個互連網(Internet)是由許多專有網路構成,稱為自治系統(autonomous systems)。每個這樣的系統在其內部成員主機之間著各種路由選擇,所以分發一個資料包的任務被簡化成尋找一條到達目的主機網路的路徑。這意味著,一旦資料包被傳到那個特定的網路上的任何(any)主機上,網路本身會專門進行進一步的處理。
2.4.2 子網(Subnetworks)
這個結構是透過前面所述的將IP地址分成主機部分和網路部分來反映出來的。預設地,目的網路得自IP地址的網路部分。因此,有同樣IP網路號的主機在同一個網路上,反之也然。[2]
在網路內部使用類似的方案也同樣合理,由於它本身可能有許多更小的網路組成,最小的單元可以是一個象乙太網一樣的物理網路。因此,IP允許你將一個IP網路分割成一些子網(subnets)。
在子網所屬的IP網上,子網接管了分發資料包到某個IP地址範圍的職責。對於A類、B類或C類網,它是由IP地址的網路部分確定的。然而,現在把網路部分擴充套件成也包括主機部分的幾個位元位。被解釋為子網號的這幾個位元位的位數是由稱為子網掩碼(subnet mask),或網路掩碼(netmask)的數值指定的。這同樣是一個32位的數值,它指定了IP地址網路部分的位掩碼。
圖2.1 將B類網分成子網
Groucho Marx大學的就是這樣一個網的例子。它的B類網路號是149.76.0.0,它的網路掩碼也就是255.255.0.0。
就內部而言,GMU的校園網由幾個更小的網路組成,如各個系的區域網。所以IP地址的範圍被分成254個子網,149.76.1.0到149.76.254.0。例如,理論物理系的分配的子網號是149.76.12.0。校園主幹網本身就是一個網路,並給予子網號149.76.1.0。這些子網號共享同一個IP網路號,而第三個八位位組用於區別它們。因此,他們將使用一個子網掩碼255.255.255.0。
圖2.1示出了guark的地址149.76.12.4作為一個普通的B類網和當使用子網技術時是如何有不同的解釋的。
子網(正如生成子網的技術聲稱)僅是網路的內部分割(internal division),並沒有什麼用。子網是由網路的擁有者(或管理員)生成的。常常,子網的建立是為了反映現存的物理上(如兩個乙太網之間)的、管理上(在兩個系之間)的、或地理上的分界線,並且在這些子網上的被授權給某些聯絡人。然而,這個結構僅反映出網路的內部行為,對於外部世界它是完全不可見的。
2.4.3 閘道器
子網技術不僅有組織上的益處,它常常是一個自然的硬體分界線的結果。在一個給定的物理的(實際的)網路上,如乙太網上,主機的通訊範圍是有限的:能夠直接與之通訊的主機是它所在網路上的主機。所有其它的主機僅能透過稱為閘道器(gateways)的裝置訪問。閘道器是一臺同時連線兩個或多個物理網路的主機並配置成在這些網路之間分組。
由於IP能夠很容易地識別一臺主機是否在一個本地物理網路上,不同的物理網路需要屬於不同的IP網路。例如網路號149.76.4.0是保留給數學系區域網上的主機的。當給quark傳送一個資料包時,erdos上的網路軟體立刻會從IP地址149.76.12.4上看出,目的主機在另一個不同的物理網路上,因此可以透過一個閘道器(預設的是sophus)到達那裡。
Sophus本身連線到兩個不同的子網上:數學系和校園主幹網上。它分別透過不同的介面,eth0和fddi0來訪問這兩個子網。現在,我們要給它分配那種IP地址呢?我們是否要給它一個在子網149.76.1.0的IP,或149.76.4.0網上的IP呢?
答案是:兩個都要。當與數學系區域網上的主機通訊時,sophus就使用IP地址149.76.4.1,當與主幹網上的主機通訊時,它將使用ID地址149.76.1.4。
因此,閘道器所連的每一個網路都要給閘道器分配一個IP地址。這些地址---及相應的網路掩碼---被在相應的介面上,透過該介面子網可以進行訪問。因此,sophus的介面與地址對映就看上去象這樣的:
iface address netmask
eth0 149.76.4.1 255.255.255.0
fddi0 149.76.1.4 255.255.255.0
lo 127.0.0.1 255.0.0.0
最後一個條目描述了回送介面lo,這在上面已介紹過。
圖2.2顯示了Groucho Marx大學(GMU)的部分網路拓撲圖。同時在兩個子網上的主機有兩個地址。
圖2.2 Groucho Marx大學(GMU)的部分網路拓撲圖。
一般來說,你可以忽略將地址附加到主機或它的介面之間的區別。對於僅在一個網上的主機,如erdos,你通常只需以這個以及那個地址來談及主機,儘管嚴格地來說,是乙太網介面有這個IP地址。然而,這種區別僅在談論閘道器時顯得重要。
2.4.4 路由選擇表
我們現在將注意力集中在當分發一個資料包到遠端網路時,IP是如何選擇使用一個閘道器的。
我們前面已經看到,當給quark傳送一個資料包時,erdos檢查目的地址並且發覺它不在本地網路上。Erdos因此將該資料包傳送到預設閘道器,sophus,它現在基本上面臨同樣的任務。Sophus注意到quark不在它直接連線的任何網路上,所以它必須找到另一個閘道器並透過該閘道器來轉發資料包。正確的選擇是到物理系的閘道器niels。此時,sophus需要一些資訊將目的網路與適當的閘道器相聯絡。
為此,IP所使用的路由選擇資訊基本上是一張表,該表將各網路與到達該網路要經過的閘道器連結在一起。還必須提供一個捕獲所有分組的表項(預設路由);這是與網路0.0.0.0相關的閘道器。所有傳送到未知網路的分組都是透過該預設路由器傳送的。在sophus上,這張表看上去象這樣:
Network Gateway Interface
149.76.1.0 - fddi0
149.76.2.0 149.76.1.2 fddi0
149.76.3.0 149.76.1.3 fddi0
149.76.4.0 - eth0
149.76.5.0 149.76.1.5 fddi0
… …
0.0.0.0 149.76.1.2 fddi0
路由到sophus直接連線的網路是不需要路由器的;因此它們將閘道器條目顯示為“-”。
路由選擇表可以透過各種方法來建立。對於小型區域網,在引導主機時透過手工使用路由器命令構造路由表,並將此表供給IP的做法通常是最有效的(見第五章)。對於大規模的網路,它們是透過路由選擇後臺服務在執行時刻建立並調整的;它們執行在網路的中央主機上並且與成員網路之間交換路由選擇資訊來確定“最佳”路由。
根據網路大小的不同,將使用不同的路由選擇協議。對於在自治系統內進行的路由選擇(比如Groucho Marx校園),要使用內部路由協議(internal routing protocols)。最著名的一個是RIP,即路由資訊協議(或稱選路資訊協議),它是由的routed後臺程式實現的。對於在自治系統之間的路由選擇,必須使用外部路由協議(external routing protocols)象EGP(外部閘道器協議(External Gateway Protocol)),或BGP(邊界閘道器協議(Border Gateway Protocol));這些(以及RIP)已經在Cornell大學的gated後臺程式中實現。[3]
2.4.5 度量值(Metric Values)
基於RIP的動態選路(或路由選擇)根據“跳數”選取到達某些目的主機或網路的最佳路徑,也即,一個資料包在到達目的之前所經過的閘道器個數。路徑越短,RIP越好。跳數多於或等於16的很長的路徑被看作是無用的,並且被捨棄。
要使用RIP來管理本地網路內部的路由資訊,你必須在所有主機上執行gated。在啟動引導時,gated會檢測所有活動的(處於執行狀態的)網路介面。如果有不止一個活動的介面(回送介面不算),就可假設主機在幾個網路之間交換資訊包,並且會積極地交換和廣播路由資訊。否則的話,主機只是被動地接收任何RIP資訊,並且更新本地路由表。
當在廣播本地路由表中的資訊時,gated從與路由表條目關聯的稱之為度量值(Metric value)的數值中計算路徑的長度。這個度量值是員在配置路由時設定的,並且應該反映出這個路由的實際代價。因此,到主機直接連線的子網的路由的度量一定是零,而透過兩個閘道器的路由的度量應該是2。然而,當你不使用RIP或gated時,就不必為度量而煩惱。
2.5 互連網控制報文協議
IP有一個相伴的協議我們至今還沒有討論,這就是互連網控制報文協議(Internet Control Message Protocol)(ICMP),用於核心中的網路程式碼與其它主機進行出錯報文及其它的通訊。例如,假設你又在erdos上並且想遠端登入()到quark上的12345埠,但是並沒有程式在偵聽那個埠。當第一個TCP資訊包到達quark的這個埠時,主機內的網路層將其識別出並且立刻給erdos返回一個ICMP報文,指出“埠不可達”。
有相當多ICMP可以理解的報文,其中許多涉及到出錯的情況。然而,有一個非常有趣的報文稱為重定向報文(Redirect message)。它是由路由選擇(選路)模組在檢測到有其它主機正使用它作為一個閘道器時產生的,儘管可能存在一個更短的路由。例如,在主機引導後,sophus的路由選擇表可能並不完整,含有到數學系網路的路由和到FDDI主幹網的路由,並且預設路由是指向Groucho 計算中心的閘道器(gcc1)。因此,任何傳送到quark的資訊包將被送至gcc1而不是送到物理系的閘道器niels。當接收到這樣一個資料包時,gcc1將注意到這是一個不良的路由,並且會將這個資訊包轉發到niels,同時給sophus返回一個ICMP重定向報文告訴它這個更好的路由。
現在,除了最基本的路由外,這好象是避免手工設定其它路由的聰明方法。然而,這裡要給出警告,如果要依賴於RIP或ICMP重定向報文的動態選路方案,並不總是一個好主意。ICMP重定向以及RIP在驗證某個選路資訊是否需要許可權方面很少提供或幾乎不提供選擇。這使得懷有惡意的無用之人能夠中斷你的整個網路的通訊,或者更糟。由於這個原因,有些網路程式碼的版本將影響網路路由的重定向報文看作僅是主機路由的重定向。
2.6 域名系統
2.6.1 主機名解析
如前所述,TCP/IP網路中的編址是圍繞著32位元的數字的,然而,想多記住幾個也是很難的。因此,通常主機都用“普通”的名字命名,如gauss或strange。這時,找出與名字相關的IP地址就是程式的職責了。這個過程稱為主機名解析(host name resolution)。
一個想要找出給定主機名的IP地址的應用程式不一定要提供自己的例程來查詢主機以及IP地址。相反地,它依賴於顯然是做這個工作的幾個庫,稱為gethostbyname(3)和gethostbyaddr(3)。傳統上,這些以及一些相關的過程被組合成一個獨立的庫,稱為解析庫(resolver library);在Linux上,這些是標準libc的部分。通俗地說,這個函式的集合因而被稱為“解析器”(the resolver)。
如今,在一個象乙太網一樣的小網上,或者甚至是一族乙太網上,維護一張對映主機名到地址的表並不是十分困難的事。該資訊通常被存放在/etc/hosts中。當增加或移走主機,或重新分配地址時,你所要做的就是更新所有主機上的hosts檔案。很明顯,當網路不僅僅是由少數幾臺機器組成時,這將成為繁重的負擔。
針對這個問題的一個解決方案是NIS,即有Sun Microsystems開發的網路資訊系統(Network Information System),通俗地稱為YP,或者黃頁(Yellow Pages)。NIS在主主機上將hosts檔案(以及其它資訊)在一個裡,客戶可以從中檢索所需的資訊。不過,這個方法只適應中等大小的網路如區域網,因為它涉及到集中地維護整個主機資料庫,並且把它分發到所有伺服器上。
在互連網上,地址資訊最初也是儲存在一個HOSTS.TXT資料庫中的。這個檔案原是由網路資訊中心(Network Information Center),即NIC,來維護的,並且所有參與站點都需要並。當網路增長時,這種方案帶來了幾個問題。除了涉及定期安裝HOST.TXT的額外管理方面的開銷外,分發這個庫的伺服器負荷變得太高了。更為嚴重的問題是所有的名字必須在NIC登記,它必須確定沒有重名存在。
這就是為什麼在1984年採用了一個新的名字解析方案,即域名系統(ain Name System)。是由Paul Mockapetris設計的,同時能解決這兩個問題。
2.6.2 進入DNS
DNS用域的層次結構來組織主機名。一個域是在某些方面相關的站點的一個集合---由於他們組成了一個特有的網路(例如,校園內的所有機器,或BITNET上的所有主機),因為它們都屬於某個機構(就象美國政府),或者因為它們只是在地理位置上比較靠近。例如,大學被(組合)分組在edu域,每個大學或學院使用一個獨立的子域(subdomain),在子域下面包含它們的主機。Groucho Marx大學可以給予groucho.edu域,數學系的區域網指定為maths.groucho.edu。系部網路上的主機將有這個域名附加在它們的主機名後;所以erdos被認為是erdos.maths.groucho.edu。這被稱為全資域名(fully qualified domain name),或FQDN,它在世界範圍內唯一地標識出該主機。
圖2.3 部分域名空間。
圖2.3示出了名字空間的一部分。這棵樹的根的入口是用一個點(dot)來表示的,它被很恰當的稱作根域( domain),並且包含了所有其它域。為了指出一個主機名是一個全資域名,而不是一個與某個(隱含的)本地域相關的名字,有時會寫上一個附加點。這表示這個名字的最後的組成部分是根域。
依賴它在層次結構中的位置,一個域可以被稱為是頂層、第二層、或第三層的。還可以再劃分出分層,但很好這樣做。你會常看到以下幾個頂層域:
edu (大部分在美國) 教育機構如大學等。
商業機構、公司。
org 非商業機構。常常是私有UUCP網路在這個域中。
net 網路上的閘道器以及其它的管理主機。
mil 美國軍事機構。
gov 美國政府機構。
uucp 具官方稱,以前用作無域名的UUCP名字的所有站點名,已被移入該域。
技術上來說,以上的頭四個屬於Internet的美國部分,但你可能在這幾個域中還是能見到不是美國的站點。Net域尤其是這樣。然而,mil和gov是美國專有的。
在美國以外的地方,每個國家通常在兩字元國家程式碼(在ISO-3166中定義)後面使用一個她自己命名的頂層域。例如,芬蘭(Finland)使用fi域,fr由法國(France)使用,de由德國(Germany)使用,au由澳大利亞(Australia)使用,cn由中國(China)使用等等。在這個頂層域下面,每個國家的NIC可以自由地以他們想要的方式組織主機名。例如,澳大利亞有一個與國際頂層域相似的次層域,命名為com.au,edu.au,等等。其他國家,如德國,不使用這一額外層,而是使用直接引用執行一特定域的機構的稍長些的名字。例如,象.informatik.uni-erlangen.de這樣的主機名並非少數。由此可見德國人的如何了。
當然,這些國家的域並不意味著在該域下的主機實際上一定位於那個國家之中;這僅僅說明這臺主機是在那個國家的NIC註冊登記的。一個瑞典(Swedish)的廠商可能在澳大利亞有一分支機構,但他的所有主機仍然註冊為se頂層域。
現在,以域名的層次結構來組織名字空間很好地解決了名字的唯一性問題;利用DNS,一臺主機的名字只需在它的域中是唯一的,就可以在世界範圍內有一個與所有其它主機不同的名字了。此外,全資名稱是很容易記憶的。就其本身而言,這些已是將大的域分割成幾個子域的很好的理由了。
但是,DNS甚至為你比這做得更多:它允許你將子域許可權授權給它(子域)的管理者。例如,在Groucho 計算中心的維護者可以為每個系部建立一個子域;在上面我們已經遇見了maths和physics子域了。當他們發現物理系的網路太大了,而且從外界來看混亂而難以管理(總之,物理學家是一類不受拘束的人),他們就可以簡單地將physics.groucho.edu域的控制權交給這個網路的管理員。這樣,他們就可以自由地使用他們喜歡的無論什麼樣的主機名了,並且可以以各種方式在他們的網路中分配IP地址了,而不需要外界的干涉。
在本小節結束時,我們還要說一下,名字空間可以分成區(zones),每個區根於一個域。請注意區與域的細微差別:域groucho.edu包括Groucho Marx大學的所有主機,而區僅包括計算中心直接管理的主機,例如那些在數學系的主機。在物理系的主機就屬於一個不同的區,也即physics.groucho.edu。在圖2.3中,區的開始是在域名的右側用小圓圈標出的。
2.6.3 用DNS進行名字查詢
第一眼看上去,所有這些域和區的麻煩似乎使得名字解析成為一件非常複雜的事情了。畢竟,如果沒有中心權威控制什麼名字分配給哪臺主機的話,那麼推知它將是一個多麼粗陋的程式啊?!
現在討論有關DNS的真正精華(自然,坦白,直率)的部分了。如果你想找出erdos的IP地址,那麼,DNS會說,去問管理它的人,他們會告訴你。
實際上,DNS是一個巨大的分散式資料庫。它是依靠所謂的名字伺服器來實現的,名字伺服器為一個給定的域或一組域提供資訊。對於每一個區,起碼有兩個、最多有幾個的名字伺服器,在那個區的主機上掌握著所有的權威資訊。為了得到erdos的IP地址,你所要做的只是聯絡groucho.edu區的名字伺服器,名字伺服器將返回你所期望的資料。
你可能會想,說起來容易做起來難。那麼我怎樣知道如何達到Groucho Marx大學的名字伺服器呢?如果你的沒有配備一個地址解析程式,DNS也能提供這個能力。當你的應用程式想要在erdos上查詢資訊時,它就會與本地名字伺服器聯絡,該名字伺服器會為它處理一個迭代查詢。它首先向根域的名字伺服器發出一個查詢,詢問erdos.maths.groucho.edu的地址。根名字伺服器注意到這個名字不屬於它的管理許可權範圍內,而是屬於edu域下的某個。因此,它告訴你與edu區的名字伺服器聯絡以取得更詳細的資訊,並且給了所有一張edu的名字伺服器及其地址的列表。此時,你的本地名字伺服器將繼續執行並查詢那些edu的名字伺服器之一,例如a.isi.edu。和根名字伺服器同樣的方式,a.isi.edu知道groucho.edu執行於他們自己的區裡,並且使你指向他們的伺服器。現在,本地名字伺服器將自己的查詢傳送到這些伺服器之一上,這將最終認可這個屬於它的區的名字,並且返回相應的IP地址。
現在,看上去為了查詢一個小小的IP地址為產生許多的通訊量,但是,如果我們仍然使用HOSTS.TXT的話,所產生的資料傳送量要比上述方法大的多。但是這個方案還有需要改進的地方。
為了改善將來查詢的響應時間,名字伺服器將在其本地緩衝中儲存所獲得的資訊。所以當下次你的本地網路上有任何人想要查詢在groucho.edu域上主機的地址時,你的名字伺服器就不用再次經歷整個過程,而是會直接到groucho.edu名字伺服器上。[4]
當然,名字伺服器並不會永遠保留這個資訊的,而是會在一定時間後放棄的。這個到期間隔時間稱為存活期(time to live),或TTL。DNS資料庫中的每一資料都有相應責任區的管理員指定的TTL。
2.6.4 域名伺服器
擁有一個區內所有主機資訊的名字伺服器被稱為該區授權的(authoritative),並且有時稱之為主名字伺服器(master name servers)。對該區內主機的任何查詢都將最終繞回到這些主名字伺服器之一上。
為了提供與一個區一致的描述,它的主伺服器必須很好地同步。這是透過使他們其中之一成為主要(最初、原始)的(primary)伺服器來達到的,它從資料檔案中裝入區資訊,並且使別的伺服器成為次要(第二位)的(secondary)伺服器,並從主要伺服器中週期性地傳入區資料。
有幾個名字伺服器的一個原因是為了分散工作負荷,其它的原因是為了有容餘。當一個名字伺服器機器毫無準備地出了故障,如崩潰了或失去了網路連線,所有的查詢都將回送到其它的伺服器上。當然,這個方案並不會保護你免受伺服器故障而產生對所有DNS請求的錯誤應答,例如,由於伺服器程式本身的軟體錯誤。
當然,你也可以執行一個沒有為任何域授權的名字伺服器。[5] 不過這類伺服器也是有用的,因為它還是可以為執行於本地網路上的應用程式管理DNS查詢的,並緩衝所得資訊。因此,它被稱為只緩衝(caching-only)伺服器。
2.6.5 DNS資料庫
透過上面我們已經知道,DNS不僅僅是隻處理主機的IP地址,而且還交換名字伺服器上的資訊。實際上,DNS資料庫可以有許多不同型別條目。
DNS資料庫上的一條資訊稱為一個資源記錄(re record),或簡寫成RR。每一條記錄都有一種與之關聯的型別,描述了它所表示的資料,以及一個指明它所適用的網路型別的類。後者用於適應(或調節)不同編址方案的需要,象IP地址(IN類)、或Hesiod網路的地址(在MIT使用)、以及其它一些。原型資源記錄型別是A記錄,它將一個全資域名與一個IP地址相聯合。
當然,一臺主機可以有不止一個名字。然而,其中一個名字必須指定為正式的,或者是正規主機名(canonical host name),而其它的名字只是前者的別名。它們之間的區別在於正規主機名是與一個A記錄關聯的,而其它名字只有一個指向正規主機名的CNAME型別的記錄。
這裡我們將不討論所有的記錄型別,而是留在後面的章節中討論。這裡只給出一個簡短的例子。圖2.4顯示出了裝入physics.groucho.edu區的名字伺服器中的域名資料庫的一部分。
;
; Authoritative Information on physics.groucho.edu
@ IN {
niels.physics.groucho.edu.
hostmaster.niels.physics.groucho.edu.
1034 ; serial no
360000 ; refresh
3600 ; retry
3600000 ; expire
3600 ; default ttl
}
;
; Name servers
IN NS niels
IN NS gauss.maths.groucho.edu.
gauss.maths.groucho.edu. IN A 149.76.4.23
;
; Theoretical Physics (subnet 12)
niels IN A 149.76.12.1
IN A 149.76.1.12
nameserver IN CNAME niels
otto IN A 149.76.12.2
quark IN A 149.76.12.4
down IN A 149.76.12.5
strange IN A 149.76.12.6
...
; Collr Lab. (subnet 14)
boson IN A 149.76.14.1
muon IN A 149.76.14.7
bogon IN A 149.76.14.12
...
圖2.4 物理系named.hosts檔案的摘錄。
除了A和CNAME記錄以外,在該檔案的頂部還可以看到一條特殊的記錄,延伸了幾行。這是SOA資源記錄,意思是授權的開始(Start of Authority),它保留著伺服器授權的區的常用資訊。例如,它包括所有記錄預設的存活期資訊。
注意,例子檔案中所有不以點結尾的名字將被解釋成是相對於groucho.edu域的。用於SOA記錄的特別名字“@”是指域名本身。
從上面我
釋出者:tobull@21cn.com">netbull 翻譯:趙炯
gohigh@shtdu.edu.cn
第二章 網路的問題
我們將轉至討論一些你將遇到的一些細節上,當你將你的Linux機器連線到TCP/IP網路時就會用到這些細節,它涉及到、主機名、以及有時是選擇問題。這一章給出了你所需的背景資料,以用於理解你的設定需求,下一章將討論涉及這些的一些工具。
2.1 網路介面
為了隱藏可能用於網路環境的裝置的差異性,TCP/IP定義了一個抽象的介面(interface),透過這個介面來訪問。這個介面提供了一組操作,該組操作對所有的硬體型別是一樣的,並且基本上是涉及傳送和接收分組。
對於每種你想用於連網的外圍裝置來說,必須在核心中有一個相應的介面。例如,Linux中乙太網的介面稱作eth0和eth1,SLIP的介面是sl0、sl1等等。這些介面名稱是用於目的,那時你想給核心命名一個特定的物理裝置。除了這別無它意。
為了對TCP/IP連網有用,一個介面必須分配一個IP地址,當與其它地方通訊時這個地址起到它的鑑定識別的作用。這個地址與上面提到的介面名稱是不同的;如果你將介面比作一扇門的話,那麼這個地址就象是門上釘的名牌一樣。
當然,可能還有其它一些裝置引數需要設定;其中之一就是特定硬體能夠處理的最大資料包的大小,也稱為最大傳輸單元(Maximum Traner Unit),或MTU。別的屬性將在後面介紹。
2.2 IP地址
如上章所提到的,IP網路所能理解的地址是一個32位元的數字。每一臺機器必須分配一個對於網路環境來說唯一的一個數字。如果你執行一個不與其它網路有TCP/IP通訊的本地網路,你可以依據個人的愛好來分配這些數字。然而,對於Internet上的站點來說,這些數字是由一箇中心權威機構,網路資訊中心(Network Information Center或NIC)來分配的。[1]
為了容易閱讀,IP地址被分解成四個8位元數字稱為八位位組(octets)。例如,quark.physics.groucho.edu有一個IP地址為0x954C0C04,它可以寫成149.76.12.4。這個格式通常稱作為點分四組表示法(Dotted quad notation)。[還有一種稱呼為點分十進位制表示法Dotted decimal notation—譯者注]
這種表示法的另一個原因是IP地址可以分成包含在開頭(左面)的八位位組中的一個網路號(network number)和包含在剩餘(右面)的八位位組中的一個主機號(host number)。當IP地址遵循NIC的規則使用時,並不是為你計劃要使用的每臺主機分配一個地址,而是給你一個網路號,並且允許你依照你的喜好,在你的網路上給各臺主機分配在該網路號範圍內的所有有效的任意IP地址。
根據組成的網路規模的大小,IP地址的主機部分可大可小。為適應不同的需要,定義了幾類網路,給出了IP地址的不同分割法。
A類 A類由1.0.0.0到127.0.0.0的網路構成。網路號包含在第一個八位位組中。這樣就提供了24位元位的主機部分,每個網路允許大約有160萬臺主機。
B類 B類包括從128.0.0.0到191.255.0.0的網路;網路號由前兩個八位位組構成。這樣就可以有16320個網路,而每個網路可以有65024臺主機。
C類 C類網路的範圍從192.0.0.0到223.255.255.0。網路號由前三個八位位組組成。可以有近200萬個網路,而每個網路能容納254臺主機。
D、E、F類的地址範圍從224.0.0.0到254.0.0.0,用於試驗用途或保留給將來使用,而沒有分配給任何網路用。
如果我們再參考前一章的例子,我們發現quark的地址149.76.12.4對應B類網路149.76.0.0的12.4的主機。
你可能已經注意到,上面列出來的主機部分不是每個八位位組的所有數值都可以使用的。這是因為八位位組為全0或255的主機號是留作它用的。主機部分的所有位元位為全零的地址引用為一個網路,而主機部分的所有位元位為全1的地址稱為廣播地址。它同時指一個網路上的所有主機。因此,149.76.255.255不是一個有效地址,而是指網路149.76.0.0上的所有主機。
還有兩個網路地址0.0.0.0和127.0.0.0也是保留的。這第一個稱為預設路由(default route),後一個稱為回送地址(lback address)。預設路由與IP路由資料包的方式有關,這將在下面討論。
網路地址127.0.0.0保留作你的主機內部IP通訊用。通常,地址127.0.0.1將分配給主機上的一個特殊介面使用,稱為回送介面(loopback interface),它的行為象一個閉合電路。從TCP或UDP送來的任何IP分組都將返送給它們,就好象這個分組是剛從某個網過來的。這允許你不必使用一個“真正”的網路就能開發並測試網路。它的另一種很有用的應用是在當你想在單機上使用網路軟體時。這並不象聽起來那麼罕有;例如,許多UUCP站點根本就沒有IP連通,但仍然要執行INN新聞。為了要正常的運作,INN需要回送介面。
2.3 地址解析
現在,你已經知道IP地址是如何形成的,你可能會覺得奇怪,它們在乙太網上是如何用於編址不同的主機的。畢竟,乙太網協議是用一個與IP地址完全不同的六個八位位組的數值來識別主機的,不是嗎?
對。這就是為什麼需要一種將IP地址對映到乙太網地址的機制了。這就是所謂的地址解析協議(Address Resolution Protocol),或。實際上,ARP根本不限於乙太網,它也可以應用於其它型別的網路,如業餘電愛好者等。ARP的基本概念正象人們在一個150人的人群中尋找X. Ample先生時大多數人的做法一樣:他們環繞著人群,叫喊著他的名字,並確信如果他在那裡的話一定會應答的。
當ARP想找出與給定IP地址相應的乙太網地址時,它就利用了乙太網的“廣播”特性,此時一個資料包在網上同時定址所有的站點。ARP所傳送的廣播資料包含有對相應IP地址的查詢。每臺主機將接收到的IP與自己的IP地址相比較,如果一致,就返回一個ARP響應給發出查詢的主機。此時發出查詢的主機就可以從響應資料包中提取傳送者的乙太網地址了。
當然,你會覺得驚訝,一臺主機怎麼能知道在全世界數不清的乙太網上它能找到所期望的主機呢?並且為什麼一定是乙太網呢?這些問題都涉及稱為路由選擇的操作,也即在網路上尋找出一臺主機的物理位置。這將是下一節的主題。
此時,讓我們再多討論一會ARP。一旦一臺主機發現了一個乙太網地址,該主機就將它存貯在ARP的緩衝中,這樣主機在下一次想要傳送資料包給所討論的主機時就不要再次查詢它的乙太網地址了。然而,永久地儲存這些資訊是不明智的;例如,主機上的以太有可能由於技術上的問題而被更換掉,此時ARP的登記項就變得無效了。為了強迫進行另一次IP地址的查詢,ARP緩衝中的登記項因此在一段時間後就被丟棄。
有時候,需要找出與給定乙太網地址相對應的IP地址。當一臺機器想從網上的一臺上引導時就會有這種情況,這在上是常有的情形。但是,一個無盤客戶實際上並沒有有關自身的資訊—除了知道自己的乙太網址外!所以它主要要做的是廣播一條請求引導伺服器告訴它它的IP地址的訊息。針對於此,有另一個協議,命名為反向地址解析協議(Reverse Address Resolution Protocol),或RARP。與BOOTP協議一起,它用於規定在網上引導無盤站的過程。
2.4 IP路由選擇
2.4.1 IP網路
當你給某人寫了一封信,通常會在信封上寫上完整的收信人地址,列出了國家、州和郵政編碼等等。當你把信放入時,郵政服務會把它送到目的地:它將被送到指定的國家中去,該國的郵政服務會把它分發到正確的州和地區,等等。這個分級方案的優點是顯而易見的:不管你在哪裡發出了這封信,當地的郵遞員將會大概地知道該封信要投遞的方向,但並不關心這封信在送達的國家中以什麼方式來投遞。
IP網路的結構與之相似。整個互連網(Internet)是由許多專有網路構成,稱為自治系統(autonomous systems)。每個這樣的系統在其內部成員主機之間著各種路由選擇,所以分發一個資料包的任務被簡化成尋找一條到達目的主機網路的路徑。這意味著,一旦資料包被傳到那個特定的網路上的任何(any)主機上,網路本身會專門進行進一步的處理。
2.4.2 子網(Subnetworks)
這個結構是透過前面所述的將IP地址分成主機部分和網路部分來反映出來的。預設地,目的網路得自IP地址的網路部分。因此,有同樣IP網路號的主機在同一個網路上,反之也然。[2]
在網路內部使用類似的方案也同樣合理,由於它本身可能有許多更小的網路組成,最小的單元可以是一個象乙太網一樣的物理網路。因此,IP允許你將一個IP網路分割成一些子網(subnets)。
在子網所屬的IP網上,子網接管了分發資料包到某個IP地址範圍的職責。對於A類、B類或C類網,它是由IP地址的網路部分確定的。然而,現在把網路部分擴充套件成也包括主機部分的幾個位元位。被解釋為子網號的這幾個位元位的位數是由稱為子網掩碼(subnet mask),或網路掩碼(netmask)的數值指定的。這同樣是一個32位的數值,它指定了IP地址網路部分的位掩碼。
圖2.1 將B類網分成子網
Groucho Marx大學的就是這樣一個網的例子。它的B類網路號是149.76.0.0,它的網路掩碼也就是255.255.0.0。
就內部而言,GMU的校園網由幾個更小的網路組成,如各個系的區域網。所以IP地址的範圍被分成254個子網,149.76.1.0到149.76.254.0。例如,理論物理系的分配的子網號是149.76.12.0。校園主幹網本身就是一個網路,並給予子網號149.76.1.0。這些子網號共享同一個IP網路號,而第三個八位位組用於區別它們。因此,他們將使用一個子網掩碼255.255.255.0。
圖2.1示出了guark的地址149.76.12.4作為一個普通的B類網和當使用子網技術時是如何有不同的解釋的。
子網(正如生成子網的技術聲稱)僅是網路的內部分割(internal division),並沒有什麼用。子網是由網路的擁有者(或管理員)生成的。常常,子網的建立是為了反映現存的物理上(如兩個乙太網之間)的、管理上(在兩個系之間)的、或地理上的分界線,並且在這些子網上的被授權給某些聯絡人。然而,這個結構僅反映出網路的內部行為,對於外部世界它是完全不可見的。
2.4.3 閘道器
子網技術不僅有組織上的益處,它常常是一個自然的硬體分界線的結果。在一個給定的物理的(實際的)網路上,如乙太網上,主機的通訊範圍是有限的:能夠直接與之通訊的主機是它所在網路上的主機。所有其它的主機僅能透過稱為閘道器(gateways)的裝置訪問。閘道器是一臺同時連線兩個或多個物理網路的主機並配置成在這些網路之間分組。
由於IP能夠很容易地識別一臺主機是否在一個本地物理網路上,不同的物理網路需要屬於不同的IP網路。例如網路號149.76.4.0是保留給數學系區域網上的主機的。當給quark傳送一個資料包時,erdos上的網路軟體立刻會從IP地址149.76.12.4上看出,目的主機在另一個不同的物理網路上,因此可以透過一個閘道器(預設的是sophus)到達那裡。
Sophus本身連線到兩個不同的子網上:數學系和校園主幹網上。它分別透過不同的介面,eth0和fddi0來訪問這兩個子網。現在,我們要給它分配那種IP地址呢?我們是否要給它一個在子網149.76.1.0的IP,或149.76.4.0網上的IP呢?
答案是:兩個都要。當與數學系區域網上的主機通訊時,sophus就使用IP地址149.76.4.1,當與主幹網上的主機通訊時,它將使用ID地址149.76.1.4。
因此,閘道器所連的每一個網路都要給閘道器分配一個IP地址。這些地址---及相應的網路掩碼---被在相應的介面上,透過該介面子網可以進行訪問。因此,sophus的介面與地址對映就看上去象這樣的:
iface address netmask
eth0 149.76.4.1 255.255.255.0
fddi0 149.76.1.4 255.255.255.0
lo 127.0.0.1 255.0.0.0
最後一個條目描述了回送介面lo,這在上面已介紹過。
圖2.2顯示了Groucho Marx大學(GMU)的部分網路拓撲圖。同時在兩個子網上的主機有兩個地址。
圖2.2 Groucho Marx大學(GMU)的部分網路拓撲圖。
一般來說,你可以忽略將地址附加到主機或它的介面之間的區別。對於僅在一個網上的主機,如erdos,你通常只需以這個以及那個地址來談及主機,儘管嚴格地來說,是乙太網介面有這個IP地址。然而,這種區別僅在談論閘道器時顯得重要。
2.4.4 路由選擇表
我們現在將注意力集中在當分發一個資料包到遠端網路時,IP是如何選擇使用一個閘道器的。
我們前面已經看到,當給quark傳送一個資料包時,erdos檢查目的地址並且發覺它不在本地網路上。Erdos因此將該資料包傳送到預設閘道器,sophus,它現在基本上面臨同樣的任務。Sophus注意到quark不在它直接連線的任何網路上,所以它必須找到另一個閘道器並透過該閘道器來轉發資料包。正確的選擇是到物理系的閘道器niels。此時,sophus需要一些資訊將目的網路與適當的閘道器相聯絡。
為此,IP所使用的路由選擇資訊基本上是一張表,該表將各網路與到達該網路要經過的閘道器連結在一起。還必須提供一個捕獲所有分組的表項(預設路由);這是與網路0.0.0.0相關的閘道器。所有傳送到未知網路的分組都是透過該預設路由器傳送的。在sophus上,這張表看上去象這樣:
Network Gateway Interface
149.76.1.0 - fddi0
149.76.2.0 149.76.1.2 fddi0
149.76.3.0 149.76.1.3 fddi0
149.76.4.0 - eth0
149.76.5.0 149.76.1.5 fddi0
… …
0.0.0.0 149.76.1.2 fddi0
路由到sophus直接連線的網路是不需要路由器的;因此它們將閘道器條目顯示為“-”。
路由選擇表可以透過各種方法來建立。對於小型區域網,在引導主機時透過手工使用路由器命令構造路由表,並將此表供給IP的做法通常是最有效的(見第五章)。對於大規模的網路,它們是透過路由選擇後臺服務在執行時刻建立並調整的;它們執行在網路的中央主機上並且與成員網路之間交換路由選擇資訊來確定“最佳”路由。
根據網路大小的不同,將使用不同的路由選擇協議。對於在自治系統內進行的路由選擇(比如Groucho Marx校園),要使用內部路由協議(internal routing protocols)。最著名的一個是RIP,即路由資訊協議(或稱選路資訊協議),它是由的routed後臺程式實現的。對於在自治系統之間的路由選擇,必須使用外部路由協議(external routing protocols)象EGP(外部閘道器協議(External Gateway Protocol)),或BGP(邊界閘道器協議(Border Gateway Protocol));這些(以及RIP)已經在Cornell大學的gated後臺程式中實現。[3]
2.4.5 度量值(Metric Values)
基於RIP的動態選路(或路由選擇)根據“跳數”選取到達某些目的主機或網路的最佳路徑,也即,一個資料包在到達目的之前所經過的閘道器個數。路徑越短,RIP越好。跳數多於或等於16的很長的路徑被看作是無用的,並且被捨棄。
要使用RIP來管理本地網路內部的路由資訊,你必須在所有主機上執行gated。在啟動引導時,gated會檢測所有活動的(處於執行狀態的)網路介面。如果有不止一個活動的介面(回送介面不算),就可假設主機在幾個網路之間交換資訊包,並且會積極地交換和廣播路由資訊。否則的話,主機只是被動地接收任何RIP資訊,並且更新本地路由表。
當在廣播本地路由表中的資訊時,gated從與路由表條目關聯的稱之為度量值(Metric value)的數值中計算路徑的長度。這個度量值是員在配置路由時設定的,並且應該反映出這個路由的實際代價。因此,到主機直接連線的子網的路由的度量一定是零,而透過兩個閘道器的路由的度量應該是2。然而,當你不使用RIP或gated時,就不必為度量而煩惱。
2.5 互連網控制報文協議
IP有一個相伴的協議我們至今還沒有討論,這就是互連網控制報文協議(Internet Control Message Protocol)(ICMP),用於核心中的網路程式碼與其它主機進行出錯報文及其它的通訊。例如,假設你又在erdos上並且想遠端登入()到quark上的12345埠,但是並沒有程式在偵聽那個埠。當第一個TCP資訊包到達quark的這個埠時,主機內的網路層將其識別出並且立刻給erdos返回一個ICMP報文,指出“埠不可達”。
有相當多ICMP可以理解的報文,其中許多涉及到出錯的情況。然而,有一個非常有趣的報文稱為重定向報文(Redirect message)。它是由路由選擇(選路)模組在檢測到有其它主機正使用它作為一個閘道器時產生的,儘管可能存在一個更短的路由。例如,在主機引導後,sophus的路由選擇表可能並不完整,含有到數學系網路的路由和到FDDI主幹網的路由,並且預設路由是指向Groucho 計算中心的閘道器(gcc1)。因此,任何傳送到quark的資訊包將被送至gcc1而不是送到物理系的閘道器niels。當接收到這樣一個資料包時,gcc1將注意到這是一個不良的路由,並且會將這個資訊包轉發到niels,同時給sophus返回一個ICMP重定向報文告訴它這個更好的路由。
現在,除了最基本的路由外,這好象是避免手工設定其它路由的聰明方法。然而,這裡要給出警告,如果要依賴於RIP或ICMP重定向報文的動態選路方案,並不總是一個好主意。ICMP重定向以及RIP在驗證某個選路資訊是否需要許可權方面很少提供或幾乎不提供選擇。這使得懷有惡意的無用之人能夠中斷你的整個網路的通訊,或者更糟。由於這個原因,有些網路程式碼的版本將影響網路路由的重定向報文看作僅是主機路由的重定向。
2.6 域名系統
2.6.1 主機名解析
如前所述,TCP/IP網路中的編址是圍繞著32位元的數字的,然而,想多記住幾個也是很難的。因此,通常主機都用“普通”的名字命名,如gauss或strange。這時,找出與名字相關的IP地址就是程式的職責了。這個過程稱為主機名解析(host name resolution)。
一個想要找出給定主機名的IP地址的應用程式不一定要提供自己的例程來查詢主機以及IP地址。相反地,它依賴於顯然是做這個工作的幾個庫,稱為gethostbyname(3)和gethostbyaddr(3)。傳統上,這些以及一些相關的過程被組合成一個獨立的庫,稱為解析庫(resolver library);在Linux上,這些是標準libc的部分。通俗地說,這個函式的集合因而被稱為“解析器”(the resolver)。
如今,在一個象乙太網一樣的小網上,或者甚至是一族乙太網上,維護一張對映主機名到地址的表並不是十分困難的事。該資訊通常被存放在/etc/hosts中。當增加或移走主機,或重新分配地址時,你所要做的就是更新所有主機上的hosts檔案。很明顯,當網路不僅僅是由少數幾臺機器組成時,這將成為繁重的負擔。
針對這個問題的一個解決方案是NIS,即有Sun Microsystems開發的網路資訊系統(Network Information System),通俗地稱為YP,或者黃頁(Yellow Pages)。NIS在主主機上將hosts檔案(以及其它資訊)在一個裡,客戶可以從中檢索所需的資訊。不過,這個方法只適應中等大小的網路如區域網,因為它涉及到集中地維護整個主機資料庫,並且把它分發到所有伺服器上。
在互連網上,地址資訊最初也是儲存在一個HOSTS.TXT資料庫中的。這個檔案原是由網路資訊中心(Network Information Center),即NIC,來維護的,並且所有參與站點都需要並。當網路增長時,這種方案帶來了幾個問題。除了涉及定期安裝HOST.TXT的額外管理方面的開銷外,分發這個庫的伺服器負荷變得太高了。更為嚴重的問題是所有的名字必須在NIC登記,它必須確定沒有重名存在。
這就是為什麼在1984年採用了一個新的名字解析方案,即域名系統(ain Name System)。是由Paul Mockapetris設計的,同時能解決這兩個問題。
2.6.2 進入DNS
DNS用域的層次結構來組織主機名。一個域是在某些方面相關的站點的一個集合---由於他們組成了一個特有的網路(例如,校園內的所有機器,或BITNET上的所有主機),因為它們都屬於某個機構(就象美國政府),或者因為它們只是在地理位置上比較靠近。例如,大學被(組合)分組在edu域,每個大學或學院使用一個獨立的子域(subdomain),在子域下面包含它們的主機。Groucho Marx大學可以給予groucho.edu域,數學系的區域網指定為maths.groucho.edu。系部網路上的主機將有這個域名附加在它們的主機名後;所以erdos被認為是erdos.maths.groucho.edu。這被稱為全資域名(fully qualified domain name),或FQDN,它在世界範圍內唯一地標識出該主機。
圖2.3 部分域名空間。
圖2.3示出了名字空間的一部分。這棵樹的根的入口是用一個點(dot)來表示的,它被很恰當的稱作根域( domain),並且包含了所有其它域。為了指出一個主機名是一個全資域名,而不是一個與某個(隱含的)本地域相關的名字,有時會寫上一個附加點。這表示這個名字的最後的組成部分是根域。
依賴它在層次結構中的位置,一個域可以被稱為是頂層、第二層、或第三層的。還可以再劃分出分層,但很好這樣做。你會常看到以下幾個頂層域:
edu (大部分在美國) 教育機構如大學等。
商業機構、公司。
org 非商業機構。常常是私有UUCP網路在這個域中。
net 網路上的閘道器以及其它的管理主機。
mil 美國軍事機構。
gov 美國政府機構。
uucp 具官方稱,以前用作無域名的UUCP名字的所有站點名,已被移入該域。
技術上來說,以上的頭四個屬於Internet的美國部分,但你可能在這幾個域中還是能見到不是美國的站點。Net域尤其是這樣。然而,mil和gov是美國專有的。
在美國以外的地方,每個國家通常在兩字元國家程式碼(在ISO-3166中定義)後面使用一個她自己命名的頂層域。例如,芬蘭(Finland)使用fi域,fr由法國(France)使用,de由德國(Germany)使用,au由澳大利亞(Australia)使用,cn由中國(China)使用等等。在這個頂層域下面,每個國家的NIC可以自由地以他們想要的方式組織主機名。例如,澳大利亞有一個與國際頂層域相似的次層域,命名為com.au,edu.au,等等。其他國家,如德國,不使用這一額外層,而是使用直接引用執行一特定域的機構的稍長些的名字。例如,象.informatik.uni-erlangen.de這樣的主機名並非少數。由此可見德國人的如何了。
當然,這些國家的域並不意味著在該域下的主機實際上一定位於那個國家之中;這僅僅說明這臺主機是在那個國家的NIC註冊登記的。一個瑞典(Swedish)的廠商可能在澳大利亞有一分支機構,但他的所有主機仍然註冊為se頂層域。
現在,以域名的層次結構來組織名字空間很好地解決了名字的唯一性問題;利用DNS,一臺主機的名字只需在它的域中是唯一的,就可以在世界範圍內有一個與所有其它主機不同的名字了。此外,全資名稱是很容易記憶的。就其本身而言,這些已是將大的域分割成幾個子域的很好的理由了。
但是,DNS甚至為你比這做得更多:它允許你將子域許可權授權給它(子域)的管理者。例如,在Groucho 計算中心的維護者可以為每個系部建立一個子域;在上面我們已經遇見了maths和physics子域了。當他們發現物理系的網路太大了,而且從外界來看混亂而難以管理(總之,物理學家是一類不受拘束的人),他們就可以簡單地將physics.groucho.edu域的控制權交給這個網路的管理員。這樣,他們就可以自由地使用他們喜歡的無論什麼樣的主機名了,並且可以以各種方式在他們的網路中分配IP地址了,而不需要外界的干涉。
在本小節結束時,我們還要說一下,名字空間可以分成區(zones),每個區根於一個域。請注意區與域的細微差別:域groucho.edu包括Groucho Marx大學的所有主機,而區僅包括計算中心直接管理的主機,例如那些在數學系的主機。在物理系的主機就屬於一個不同的區,也即physics.groucho.edu。在圖2.3中,區的開始是在域名的右側用小圓圈標出的。
2.6.3 用DNS進行名字查詢
第一眼看上去,所有這些域和區的麻煩似乎使得名字解析成為一件非常複雜的事情了。畢竟,如果沒有中心權威控制什麼名字分配給哪臺主機的話,那麼推知它將是一個多麼粗陋的程式啊?!
現在討論有關DNS的真正精華(自然,坦白,直率)的部分了。如果你想找出erdos的IP地址,那麼,DNS會說,去問管理它的人,他們會告訴你。
實際上,DNS是一個巨大的分散式資料庫。它是依靠所謂的名字伺服器來實現的,名字伺服器為一個給定的域或一組域提供資訊。對於每一個區,起碼有兩個、最多有幾個的名字伺服器,在那個區的主機上掌握著所有的權威資訊。為了得到erdos的IP地址,你所要做的只是聯絡groucho.edu區的名字伺服器,名字伺服器將返回你所期望的資料。
你可能會想,說起來容易做起來難。那麼我怎樣知道如何達到Groucho Marx大學的名字伺服器呢?如果你的沒有配備一個地址解析程式,DNS也能提供這個能力。當你的應用程式想要在erdos上查詢資訊時,它就會與本地名字伺服器聯絡,該名字伺服器會為它處理一個迭代查詢。它首先向根域的名字伺服器發出一個查詢,詢問erdos.maths.groucho.edu的地址。根名字伺服器注意到這個名字不屬於它的管理許可權範圍內,而是屬於edu域下的某個。因此,它告訴你與edu區的名字伺服器聯絡以取得更詳細的資訊,並且給了所有一張edu的名字伺服器及其地址的列表。此時,你的本地名字伺服器將繼續執行並查詢那些edu的名字伺服器之一,例如a.isi.edu。和根名字伺服器同樣的方式,a.isi.edu知道groucho.edu執行於他們自己的區裡,並且使你指向他們的伺服器。現在,本地名字伺服器將自己的查詢傳送到這些伺服器之一上,這將最終認可這個屬於它的區的名字,並且返回相應的IP地址。
現在,看上去為了查詢一個小小的IP地址為產生許多的通訊量,但是,如果我們仍然使用HOSTS.TXT的話,所產生的資料傳送量要比上述方法大的多。但是這個方案還有需要改進的地方。
為了改善將來查詢的響應時間,名字伺服器將在其本地緩衝中儲存所獲得的資訊。所以當下次你的本地網路上有任何人想要查詢在groucho.edu域上主機的地址時,你的名字伺服器就不用再次經歷整個過程,而是會直接到groucho.edu名字伺服器上。[4]
當然,名字伺服器並不會永遠保留這個資訊的,而是會在一定時間後放棄的。這個到期間隔時間稱為存活期(time to live),或TTL。DNS資料庫中的每一資料都有相應責任區的管理員指定的TTL。
2.6.4 域名伺服器
擁有一個區內所有主機資訊的名字伺服器被稱為該區授權的(authoritative),並且有時稱之為主名字伺服器(master name servers)。對該區內主機的任何查詢都將最終繞回到這些主名字伺服器之一上。
為了提供與一個區一致的描述,它的主伺服器必須很好地同步。這是透過使他們其中之一成為主要(最初、原始)的(primary)伺服器來達到的,它從資料檔案中裝入區資訊,並且使別的伺服器成為次要(第二位)的(secondary)伺服器,並從主要伺服器中週期性地傳入區資料。
有幾個名字伺服器的一個原因是為了分散工作負荷,其它的原因是為了有容餘。當一個名字伺服器機器毫無準備地出了故障,如崩潰了或失去了網路連線,所有的查詢都將回送到其它的伺服器上。當然,這個方案並不會保護你免受伺服器故障而產生對所有DNS請求的錯誤應答,例如,由於伺服器程式本身的軟體錯誤。
當然,你也可以執行一個沒有為任何域授權的名字伺服器。[5] 不過這類伺服器也是有用的,因為它還是可以為執行於本地網路上的應用程式管理DNS查詢的,並緩衝所得資訊。因此,它被稱為只緩衝(caching-only)伺服器。
2.6.5 DNS資料庫
透過上面我們已經知道,DNS不僅僅是隻處理主機的IP地址,而且還交換名字伺服器上的資訊。實際上,DNS資料庫可以有許多不同型別條目。
DNS資料庫上的一條資訊稱為一個資源記錄(re record),或簡寫成RR。每一條記錄都有一種與之關聯的型別,描述了它所表示的資料,以及一個指明它所適用的網路型別的類。後者用於適應(或調節)不同編址方案的需要,象IP地址(IN類)、或Hesiod網路的地址(在MIT使用)、以及其它一些。原型資源記錄型別是A記錄,它將一個全資域名與一個IP地址相聯合。
當然,一臺主機可以有不止一個名字。然而,其中一個名字必須指定為正式的,或者是正規主機名(canonical host name),而其它的名字只是前者的別名。它們之間的區別在於正規主機名是與一個A記錄關聯的,而其它名字只有一個指向正規主機名的CNAME型別的記錄。
這裡我們將不討論所有的記錄型別,而是留在後面的章節中討論。這裡只給出一個簡短的例子。圖2.4顯示出了裝入physics.groucho.edu區的名字伺服器中的域名資料庫的一部分。
;
; Authoritative Information on physics.groucho.edu
@ IN {
niels.physics.groucho.edu.
hostmaster.niels.physics.groucho.edu.
1034 ; serial no
360000 ; refresh
3600 ; retry
3600000 ; expire
3600 ; default ttl
}
;
; Name servers
IN NS niels
IN NS gauss.maths.groucho.edu.
gauss.maths.groucho.edu. IN A 149.76.4.23
;
; Theoretical Physics (subnet 12)
niels IN A 149.76.12.1
IN A 149.76.1.12
nameserver IN CNAME niels
otto IN A 149.76.12.2
quark IN A 149.76.12.4
down IN A 149.76.12.5
strange IN A 149.76.12.6
...
; Collr Lab. (subnet 14)
boson IN A 149.76.14.1
muon IN A 149.76.14.7
bogon IN A 149.76.14.12
...
圖2.4 物理系named.hosts檔案的摘錄。
除了A和CNAME記錄以外,在該檔案的頂部還可以看到一條特殊的記錄,延伸了幾行。這是SOA資源記錄,意思是授權的開始(Start of Authority),它保留著伺服器授權的區的常用資訊。例如,它包括所有記錄預設的存活期資訊。
注意,例子檔案中所有不以點結尾的名字將被解釋成是相對於groucho.edu域的。用於SOA記錄的特別名字“@”是指域名本身。
從上面我
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988445/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Linux網路管理員手冊(1) (轉)Linux
- Linux網路管理員手冊(目錄) 協議 (轉)Linux協議
- Linux 管理員手冊(8)--備份(轉)Linux
- Linux網路管理員手冊(13) 第十三章 電子郵件 (轉)Linux
- Linux 管理員手冊(4)--記憶體管理(轉)Linux記憶體
- 中文《linux 新手管理員手冊》下載(轉)Linux
- Linux 管理員手冊(9)--Keeping Time(轉)Linux
- Linux 管理員手冊(1)--Linux系統概述(轉)Linux
- Linux 管理員手冊(2)--目錄樹概述(轉)Linux
- Linux 管理員手冊(6)--登入和登出(轉)Linux
- Linux 管理員手冊(7)--管理使用者帳戶(轉)Linux
- Linux 管理員手冊(5)--引導和關機(轉)Linux
- Linux網路管理員手冊(8) 第八章 點對點協議 PTP PPP LCP (轉)Linux協議
- GOLDENGATE管理員手冊Go
- Database Firewall管理員手冊Database
- Oracle SecureBackup管理員手冊Oracle
- ASP網路安全手冊(1) (轉)
- Linux 管理員手冊(3)--磁碟和其他存貯介質的使用(轉)Linux
- GOLDENGATE管理員手冊總結Go
- Database Firewall管理員手冊總結Database
- Solaris管理員常用168條命令簡明手冊(轉)
- 面向系統管理員的容器手冊
- Oracle GoldenGate OGG管理員手冊OracleGo
- HP-UX系統管理員手冊UX
- 標籤安全管理員手冊總結
- 10 殺手級的網路管理員的工具
- DHCP---網路管理員的新利器(轉)
- 1.1.3 網路管理員
- Linux下的網路協議分析工具-tcpdump 快速入門手冊(轉)Linux協議TCP
- Linux網路管理員手冊(5) 第五章 配置TCP/IP網路 proc檔案系統 設定主機名 分配IP地址 IP的介面配置 乙太網介面 (轉)LinuxTCP
- 網路管理員基礎
- Linux學習手冊(轉)Linux
- Solaris管理員常用命令簡明手冊
- 超級網管員——網路管理
- 網路管理員指南 -10.網路資訊系統 -1>熟悉NIS(轉)
- linux基本安全配置手冊(轉)Linux
- LCM產品管理員操作手冊讀後感
- 關於linux的網路管理(請教網路高人)(轉)Linux