天天看點

《分布式系統:概念與設計》一3.4.3 IP路由

ip層将資料包從源位址路由到目的位址。網際網路上的每個路由器都實作了ip層的軟體,用以提供一個路由算法。

主幹 網際網路的拓撲圖在概念上被分割成自治系統(autonomous system,as),再被細分為區域。大多數大型機構(如大學和大公司)的企業内部網可看做as,通常它們包含幾個區域。在圖3-10中,校園網是一個as,圖中顯示的部分是一個區域。拓撲圖上的每個as都有一個主幹區域。将非主幹區域連接配接到主幹區域的路由器集合,以及将這些路由器互連的鍊路構成了網絡的主幹。主幹中的鍊路通常帶寬很高,并且為保證可靠性,鍊路都被複制。這樣的層次結構僅存在于概念中,主要用于管理資源與維護元件。它并不影響ip資料包的路由。

路由協定 rip-1作為網際網路上使用的第一個路由算法,是3.3.5節中描述的距離——向量算法的一個版本。rip-2(見rfc 1388[malkin 1993])由它發展而來,但包含了其他需求,如無類别域間路由、更好的多點傳播路由以及認證rip資料包以避免路由器受到攻擊。

随着網際網路規模的擴大,路由器的處理能力也不斷增加,不再使用距離——向量算法已成為一個趨勢,因為它收斂速度慢,并且具有潛在的不穩定性。現在趨向于使用3.3.5節中提到的鍊路-狀态算法,這個算法被稱為開放最短路徑優先(open shortest path first,ospf)。該協定基于dijkstra[1959]的路徑尋找算法,它比rip算法收斂得更快。

應當注意,在ip路由器中可以漸進地采納新路由算法。路由算法的變化将導緻新版本rip協定的誕生,而每個rip資料包會攜帶一個版本号。當引入一個新的rip協定時,ip協定并不改變。無論使用哪個版本的rip協定,ip路由器都會基于一個合理的(未必是最優的)路線,将到達的資料包轉發出去。但是對于那些在更新路由表過程中需要合作的路由器,它們必須使用相同的算法。為此,需要使用上面定義的拓撲區域。在每個區域中使用一個路由協定,區域中的路由器在維護路由表時互相合作。隻支援rip-1的路由器依然很常見,它們利用新版本協定具有的向後相容特性,與支援rip-2和ospf的路由器共存。

1993年,實際觀測獲得的資料[floyd and jacobson 1993]表明,rip路由器的資訊交換頻率為30s,這會使ip傳輸性能産生周期性。ip資料包傳輸的平均延遲每隔30s就會出現一個尖峰。這可以追溯到執行rip協定的路由器的行為——當接收到一個rip資料包時,路由器會延遲ip資料包的向前傳送,113直到路由表對目前收到的所有rip資料包的更新過程結束。這會引起路由器一批一批地執行rip動作。建議路由器采用15~45s範圍内的随機值作為rip的更新周期以進行糾正。

預設路由 到目前為止,我們對路由算法的讨論說明,每個路由器維護了一個完整的路由表,該表顯示了到達網際網路上每個目的地(子網或直接連接配接的主機)的路線。就網際網路目前的規模而言,這顯然不可行(目的地的數目可能已經超過了100萬,而且仍在快速地增長)。

該問題有兩個可能的解決方案,為緩解網際網路的增長所帶來的後果,這兩個方案同時被采納。第一個方案是采用某種形式的ip位址拓撲分組。1993年以前無法從ip位址推斷出有關其位置的任何資訊。1993年,為簡化與節約ip位址的配置設定(這在下文的cidr中讨論),對未來位址的配置設定決定使用下面的地區位置:

位址194.0.0.0~195.255.255.255在歐洲

位址198.0.0.0~199.255.255.255在北美地區

位址200.0.0.0~201.255.255.255在中南美地區

位址202.0.0.0~203.255.255.255在亞太地區

因為這些地理區域也對應于網際網路上确切定義的拓撲區域,并且僅有部分網關路由器提供了對每個區域的通路,是以極大地簡化了這些位址範圍的路由表。例如,歐洲以外的路由器對于範圍在194.0.0.0到195.255.255.255的位址,可以隻有一個表項。路由器将所有目的地在這個範圍内的ip資料包使用相同的路由發送到最近的歐洲網關路由器上。注意,在做出這個決策之前,ip位址的配置設定通常與拓撲或地理位置無關,目前這些位址的大部分仍在使用,1993年的決策無法減少這些位址對應路由表項的規模。

解決路由表大小爆炸性增長的第二個解決方案更簡單而且非常有效。它基于下述觀察結果,如果離主幹鍊路最近的關鍵路由器具有比較完整的路由表,那麼大多數路由器中的路由表資訊的精确性可以放寬。放寬的表現形式為路由表中具有預設的目的地項,此預設項指定了所有目的位址不在路由表中的ip資料包所使用的路由。為了說明這種情況,考慮圖3-7與圖3-8,假設結點c的路由表改為:

《分布式系統:概念與設計》一3.4.3 IP路由

結點c忽略了結點a與d。它将所有到達結點a與d的資料包都通過鍊路5路由到e。結果呢?目的地為d的資料包可以到達其目的地,在路由過程中不會損失有效性,但目的地為a的資料包會增加一跳,需要通過e和b進行傳輸。總之,預設路由的使用在表格大小與路由有效性之間作出了折中。但在有些情況下,特别是路由器在中繼點位置時,所有向外發送的消息必須通過某一個點,此時不會損失有效性。預設路由方案在網際網路路由中使用很廣泛,網際網路上沒有一個路由器包含到達所有目的地的路由。

本地子網上的路由 當資料包的目的地主機與發送者在同一網絡上時,利用位址的主機辨別符部分可獲得底層網絡上的目的主機的位址,隻需一跳就能将資料包傳送到目的地。ip層使用arp來獲得目的地的網絡位址,然後使用底層網絡來傳輸資料包。

如果發送方計算機的ip層發現目的地在另一個網絡上,它必須将消息發送到一個本地路由器。它使用arp獲得網關或路由器的網絡位址,再使用底層網絡将資料包傳送給它們。網關和路由器被連接配接到兩個或更多的網絡上,它們具有多個網際網路位址,每個位址對應一個所連接配接的網絡。

無類别域間路由(cidr) 3.4.1節指出,ip位址的短缺導緻1996年引入cidr方案,該方案用于配置設定位址以及管理路由表中的項。主要問題在于b類位址不足,b類位址用于那些具有255個以上主機的子網,同時又有大量的c類位址可用。cidr對這個問題的解決方案是給那些需要255個以上位址的子網配置設定一批連續的c類位址。cidr方案也允許将b類位址空間分割,以便把它配置設定給多個子網。

将c類位址分批似乎是一個簡單的方法,但除非同時改變路由表的格式,它才會對路由表的大小産生顯著的影響,進而影響管理路由表的算法的性能。改變路由表的方法是給路由表增加一個掩碼域。掩碼是一個位模式,用于選擇與路由表項比較的ip位址部分。這有效地使主機/子網位址成為ip位址的任意部分,比a類、b類與c類位址提供了更大的靈活性,無類别域間路由也是以得名。同樣,路由器的這些改變是增量式的,是以有些路由器執行cidr,而其他路由器仍然使用舊的基于類别的算法。

該方案可以工作的原因是新配置設定的c類位址的範圍是256的模,是以每個範圍表示了c類大小的子網位址對應的一個整數值範圍。另一方面,有些子網也使用cidr劃分單個網絡中的位址範圍,這個網絡可以是a類、b類或c類網絡。如果一組子網完全由cidr路由器與外部世界相連接配接,那麼該組子網的ip位址範圍可以成批配置設定到每個子網中,其中由任意大小的二進制掩碼決定子網。

例如,一個c類位址空間可以劃分為32組的8位址空間。圖3-10包含一個使用cidr機制将138.37.95這樣的c類位址規模的子網劃分為多個組,115每組包含8個主機位址,每個位址的路由不同。不同的組用138.37.95.232/29以及138.37.95.248/29等符号表示。這些位址中的/29表示附加一個32的掩碼,前29位是1,後3位是0。

未注冊的位址和網絡位址翻譯(nat) 不是所有通路網際網路的計算機和裝置都需要配置設定全局唯一的ip位址。區域網路中的計算機通過具有nat功能的路由器通路網際網路,它依靠路由器将到達的udp和tcp包重定向。圖3-18給出了一個典型的家庭網絡,其中的計算機和其他網絡裝置通過一個具有nat功能的路由器與網際網路相連。網絡包括能通路網際網路的計算機,它們通過有線以太網連接配接到路由器,還包括通過wifi接入點連接配接的裝置。為了保證完整性,圖中給出了一些具有藍牙功能的裝置,但它們不是與路由器連接配接,是以不能直接通路網際網路。家庭網絡具有由網際網路服務提供商配置設定的一個已注冊的ip位址(83.215.152.95)。這裡描述的方法适合任何希望其沒有注冊ip位址的計算機連接配接到網際網路的組織。

家庭網絡上所有能通路網際網路的裝置都被配置設定了192.168.1.x c類子網上的一個未注冊的ip位址。大多數的内部計算機和裝置由路由器上運作的動态主機配置協定116(dynamic host configuration protocol,dhcp)動态配置設定一個ip位址。在圖3-18中,192.168.1.100以上的數字由dhcp服務使用,數字較小的結點(例如pc 1)已經以手工方式配置設定了數字,這樣做的理由将在後面解釋。雖然nat路由器使得這些位址對網際網路的其他部分完全隐藏,但通常使用iana為私有互連網保留的三塊位址(10.z.y.x,172.16.y.x或192.168.y.x)之一中的一段。

nat的介紹見rfc 1631[egevang and francis 1994],它的擴充見rfc 2663[srisuresh and holdrege 1999]。具有nat功能的路由器維護一個位址翻譯表,使用udp和tcp包中源端口和目的地端口号域,将每個到達的應答消息配置設定到發送該請求消息的内部計算機。注意,請求消息中給定的源端口總是被用做相應的應答消息中的目的地端口。

《分布式系統:概念與設計》一3.4.3 IP路由

最常用的nat尋址算法的工作流程如下:

1)當内部網絡上的計算機發送一個udp或tcp包給網絡外的計算機時,路由器接收到資料包并将源ip位址和端口号儲存為位址翻譯表中一個可用的項。

2)路由器用路由器的ip位址替換包中的源位址,用虛拟端口号替換源端口,虛拟端口号指向包含發送計算機的位址資訊的位址翻譯表項。

3)已修改源位址和端口位址的資料包經路由器向它的目的地轉發。現在,位址翻譯表包含最新的從内部網上計算機發出的包的端口号和從虛拟端口号到實際内部ip位址的映射。

4)當路由器從外部計算機處接收到一個udp或tcp包時,它使用包中的目的地端口号通路位址翻譯表中的項。它用存儲在表項中的值替換已接收包中的目的位址和端口号,然後将修改後的包轉發到由目的地位址辨別的内部計算機。

隻要該端口還在使用,路由器就将保留端口映射并重用它。每次路由器通路表中的一項,就重設計時器。如果在計時器過期之前沒有通路該表項,那麼就從表中删除該表項。

上述方案很好地解決了未注冊計算機的通信模式,在這種模式下,未注冊計算機可以作為外部服務(例如web伺服器)的客戶。但未注冊計算機不能作為處理到達請求的伺服器。為了處理這種情況,可以手工配置nat路由器,将某個指定端口上所有到達的請求轉發到一台指定的内部計算機上。作為伺服器的計算機必須保留同樣的内部ip位址,這一點可通過手工配置設定它們的位址(類似對pc1所做的操作)來達到。隻要不要求多于一台内部計算機在指定端口提供服務,這種提供對服務的外部通路的解決方法是令人滿意的。

nat是一種解決個人和家庭計算機配置設定ip位址的短期解決方案。它使得網際網路使用的擴張得比預期的更大,但它也有一些限制,例如上例中的最後一點。117ipv6被看成是未來趨勢,它将使得所有計算機和便攜裝置能全方位地參與網際網路。

繼續閱讀