《TCP/IP協(xié)議族》筆記
交付(delivery)是指在網(wǎng)絡(luò)層的控制下,底層各網(wǎng)絡(luò)對分組的處理方式。包括 直接交付 和 間接交付。
轉(zhuǎn)發(fā)(forwarding)指的是把分組交付到下一站的方式。有兩種不同形式的轉(zhuǎn)發(fā):基于分組目的地址的轉(zhuǎn)發(fā) 和 基于附加在分組上的標(biāo)記的轉(zhuǎn)發(fā)。
目標(biāo):
- 討論分組在網(wǎng)絡(luò)層的交互以及直接交付和間接交付之間的區(qū)別;
- 討論分組在網(wǎng)絡(luò)層的轉(zhuǎn)發(fā)以及基于目的地址的轉(zhuǎn)發(fā)和基于標(biāo)記的轉(zhuǎn)發(fā)之間的區(qū)別;
- 討論不同的轉(zhuǎn)發(fā)技巧,包括下一跳方法、特定網(wǎng)絡(luò)方法、特定主機方法以及默認(rèn)方法;
- 討論分類編址和無分類編址時路由表的內(nèi)容,以及一些搜索路由表的算法;
- 介紹MPLS技術(shù),并說明如何用它來實現(xiàn)基于標(biāo)記的轉(zhuǎn)發(fā);
- 介紹路由器的組成構(gòu)件,并解釋各個構(gòu)件的作用以及與其他構(gòu)件之間的關(guān)系。
交付
網(wǎng)絡(luò)層監(jiān)視底層物理網(wǎng)絡(luò)對分組的處理過程,我們把這種處理定義為分組的交付。
直接交付
直接交付(direct delivery)時,分組的終點是一臺與交互這者連接在同一個網(wǎng)絡(luò)上的主機。
在直接交付時,發(fā)送方通過目的IP地址找出目的物理地址,然后IP軟件把目的IP地址和目的物理地址一起交付給數(shù)據(jù)鏈路層用于實際的交付。 這個過程稱為把 IP地址映射到物理地址,ARP協(xié)議動態(tài)地把IP地址映射為相應(yīng)的物理地址。
間接交付
如果目的主機與交付者不在同一個網(wǎng)絡(luò)上,分組就要間接地交付。在間接交付(indirect delivery)時,分組經(jīng)過了一個又一個路由器,最后到達(dá)與終點在同一個網(wǎng)絡(luò)上的路由器。
轉(zhuǎn)發(fā)
如今因特網(wǎng)是由許多鏈路組合構(gòu)成的,所以轉(zhuǎn)發(fā)也就是將分組交付給下一跳。
雖然IP協(xié)議在最初設(shè)計時是一個無連接的協(xié)議,但是將IP作為面向連接的協(xié)議來使用也是當(dāng)前的一種趨勢。
當(dāng)IP作為無連接的協(xié)議時轉(zhuǎn)發(fā)的基礎(chǔ)是IP數(shù)據(jù)報的目的地址;而當(dāng)IP作為面向連接的協(xié)議時,轉(zhuǎn)發(fā)的基礎(chǔ)則是附加在IP數(shù)據(jù)報上的標(biāo)記。
基于目的地址的轉(zhuǎn)發(fā)
傳統(tǒng)方式---基于目的地址的轉(zhuǎn)發(fā),要求主機或路由器具有一張路由表才能進(jìn)行轉(zhuǎn)發(fā)。
當(dāng)主機有分組要發(fā)送,或路由器收到分組來進(jìn)行轉(zhuǎn)發(fā)時,就搜索路由表。因為路由表的表項數(shù)量過多將導(dǎo)致路由表的查找效率非常低。
轉(zhuǎn)發(fā)技術(shù)
使用一些技術(shù)可以使路由表的規(guī)模變?yōu)榭晒芾淼模瑫r還能處理一些如安全性這樣的問題。
下一跳方法
下一跳方法(next hop method)的技術(shù)可以減少路由表中的內(nèi)容。
這種技術(shù)就是在路由器中只保留下一跳的地址,而不是保留完整路由的信息。
特定網(wǎng)絡(luò)方法
特定網(wǎng)絡(luò)方法(network-specific method)能夠使路由表長度變小并簡化查找過程。
此時,路由表并不是對連接在同一個物理網(wǎng)絡(luò)上的每一臺主機都設(shè)置一個表項,而是只用一個表項來定義目的網(wǎng)絡(luò)本身的地址。
特定主機方法
在使用 特定主機方法(host-specific method)時,目的主機的地址在路由表中要給出。
默認(rèn)方法
默認(rèn)方法(default method)通常稱為默認(rèn)路由,默認(rèn)表項(通常定義網(wǎng)絡(luò)地址為 0.0.0.0)。
使用分類編址時的轉(zhuǎn)發(fā)
無子網(wǎng)劃分的轉(zhuǎn)發(fā)
全球大多數(shù)路由器都沒有使用子網(wǎng)劃分。
在這種情況下,一個典型的轉(zhuǎn)發(fā)模塊要使用三張表。每個單播類別(A,B,C)三張表;(如果路由器支持多播,那么還要增加一張?zhí)幚鞤類地址的表),有了這三張表就使得搜索的效率更高。
每張路由表至少有下面三列:
- 目的網(wǎng)絡(luò)和網(wǎng)絡(luò)地址;
- 下一跳地址;
- 接口號。
有子網(wǎng)劃分的轉(zhuǎn)發(fā)
在使用分類編址時,子網(wǎng)劃分發(fā)生在組織的內(nèi)部。處理子網(wǎng)劃分的路由器不是在該組織站點的邊界上,就是在站點邊界的里面。
如果這個組織使用了可變長的子網(wǎng)劃分,那么我們就需要多張路由表,否則就只需要一張就夠了。
使用無分類編址時的轉(zhuǎn)發(fā)
在使用無分類編址時,整個地址空間是完整的,沒有劃分類別。
我們需要在路由器表中包含 掩碼(/n)。需要有另外的一列包含對應(yīng)地址塊的掩碼。
換言之,雖然一個分類編址的路由表可以設(shè)計為三列,但無分類編址的路由表至少需要四列。
點對點網(wǎng)絡(luò)通常在路由表中沒有表項,因為沒有主機連接到它們。
地址聚合
當(dāng)我們使用分類編址時,一個組織之外的每一個站點在路由表中只有一個表項。這個表項定義了一個對應(yīng)的站點,而不管該站點是否又劃分了子網(wǎng)。當(dāng)分組到達(dá)路由器時,路由器檢查相應(yīng)的表項并轉(zhuǎn)發(fā)這個分組;
當(dāng)我們使用無分類編址時,路由表的表項數(shù)量很可能會增加,這是因為無分類編制的意圖就是把整個的地址空間劃分為很多可管理的地址塊。
路由表的規(guī)模變大就會導(dǎo)致搜索路由表的時間變長。為了解決這個問題,人們設(shè)計了 **地址聚合(Address aggregation)的概念。
小地址被聚合成為一個更大的地址塊。如果每個組織的地址不能被聚合到一個地址塊中,那么路由器就需要一個更長的路由表。
雖然地址聚合的概念和子網(wǎng)劃分的概念相似,但我們并沒有一個共同的站點,也就是說每一個組織的網(wǎng)絡(luò)是獨立的。另外,我們還可以有多級聚合。
最長掩碼匹配
無分類編址的路由器使用了另一個原則,即 最長掩碼匹配(longest mask matching)。這個原則指出,路由表按照從最長掩碼到最短掩碼來排序。
多級路由選擇
要解決路由表過于龐大的問題,我們可以在路由表中建立分等級的概念。像因特網(wǎng)中的主干ISP、地區(qū)ISP和本地ISP。
地理區(qū)域化路由選擇
為了進(jìn)一步縮小路由表的長度,我們需要把多級路由選擇進(jìn)一步延伸,以包括地理區(qū)域化的路由選擇。
如,把一塊地址塊給歐洲,一塊給亞洲······,這樣對于路由器來說,發(fā)往歐洲的分組在路由表中只需要一個表項。
路由表的查找算法
分類編址搜索路由表的算法必須要做適當(dāng)?shù)恼{(diào)整才能使無分類編址的路由選擇更加有效。
使用分類編址時的查找
在使用分類編址的時候,路由表被組織成列表的形式。通常包括A、B、C類三張表。
在無分類中的查找
在使用無分類編址時,最簡單但不是最有效的搜索方法稱為 最長前綴匹配。但這種類型的
基于標(biāo)記的轉(zhuǎn)發(fā)
在一個無連接的網(wǎng)絡(luò)中(數(shù)據(jù)報方式),路由器根據(jù)分組首部的目的地址來轉(zhuǎn)發(fā)分組;在一個面向連接的網(wǎng)絡(luò)中(虛電路方式),交換機則根據(jù)附加在分組上的標(biāo)記來轉(zhuǎn)發(fā)該分組。
路由選擇通常基于對路由表內(nèi)容的搜索,而交換機則可以用一個索引訪問交換表完成。換言之,路由選擇涉及到搜索過程,而交換則涉及直接的訪問。
當(dāng)轉(zhuǎn)發(fā)短發(fā)得到分組的目的地址后,它就需要埋頭在掩碼列中開始搜索。對于每一個表項,它都要應(yīng)用掩碼來求出分組的目的網(wǎng)絡(luò)地址,然后再查看路由表中的網(wǎng)絡(luò)地址,直到找到相匹配的網(wǎng)絡(luò)地址。然后路由器提取出要傳遞給ARP 協(xié)議的下一跳和接口號,以便將該分組交付到下一跳。
因為標(biāo)記被當(dāng)作是交換表的索引,所以可以立刻在表中找到相應(yīng)的信息。
MPLS
多協(xié)議標(biāo)記交換(Multi-Protocol Label Switching),在這個協(xié)議中,因特網(wǎng)傳統(tǒng)路由器可以被MPLS路由器所取代,這些MPLS路由器既可用作路由器,也可用作交換機。當(dāng)它用作路由器使用時,它可以根據(jù)目的地址來轉(zhuǎn)發(fā)分組;而當(dāng)它用作交換機使用時,又能夠基于標(biāo)記來轉(zhuǎn)發(fā)分組。
一個新的首部
要使用像IP這樣的協(xié)議來模仿面向連接的交換,首先要做的事情就是為分組增加一個字段,以便攜帶標(biāo)記。IPv4分組格式不允許此類擴展(雖然在IPv6分組格式中已提供了這個字段)。
解決辦法就是將IPv4分組封裝在一個MPLS分組中。完整的IP分組作為凈負(fù)荷被封裝到一個MPLS分組中,并附加上MPLS首部。
MPLS首部是32位(4字節(jié))長。
標(biāo)記,這個20位字段定義為標(biāo)記,他在路由器中被用作路由表的索引;
Exp,這個3位字段保留作為實驗用;
S,這個1位的堆棧字段定義了堆棧中的子首部的狀態(tài);
TTL,TTL值。
多級交換
MPLS中的標(biāo)記堆棧使得多級交換成為可能。
路由器的結(jié)構(gòu)
當(dāng)我們討論轉(zhuǎn)發(fā)和路由選擇時,我們把路由器畫成一個黑盒子。它從一個輸入端口接收進(jìn)入的分組,再通過路由器找出分組離開的輸出端口,然后把分組從輸出端口發(fā)送出去。
構(gòu)件
一個路由器有四個構(gòu)件:輸入端口(Input port),輸出端口(Output port),路由選擇處理器(Routing processor),交換結(jié)構(gòu)(Switching fabric)。
輸入端口
輸入端口執(zhí)行路由器的物理層和鏈路層的功能。
它從接收到的信號中得到比特流,并把幀拆裝后得到分組,同時還要進(jìn)行差錯的檢測和糾正。分組準(zhǔn)備就緒后,就可以通過網(wǎng)絡(luò)層進(jìn)行轉(zhuǎn)發(fā)。除了物理層處理器和數(shù)據(jù)鏈路層處理器之外,輸入端口還有一些緩存,用來在分組被傳送到交換結(jié)構(gòu)之前進(jìn)行暫存。
輸出端口
輸出端口與輸入端口功能一樣,但是順序相反。
路由選擇處理器
路由選擇處理器執(zhí)行網(wǎng)絡(luò)層的功能。
它用目的地址來找出下一跳地址,與此同時,還要找出將分組發(fā)送出去的端口號。這個動作有時稱為 查表。
交換結(jié)構(gòu)
在路由器中最困難的任務(wù)就是把分組從輸入隊列搬移到輸出隊列中。完成這件事的速度直接影響到輸入/輸出隊列的大小和分組交付的總延時。
縱橫交換結(jié)構(gòu)
縱橫交換結(jié)構(gòu)(cross switch)把n個輸入和n個輸出連接成一個柵格,在每一個交叉點(cross point)使用了電子微開關(guān)。
榕樹交換結(jié)構(gòu)
比縱橫交換結(jié)構(gòu)更現(xiàn)實一些的是榕樹交換結(jié)構(gòu)(banyan switch)。
Batcher 榕樹交換結(jié)構(gòu)
榕樹交換結(jié)構(gòu)存在的問題是有可能會出現(xiàn)內(nèi)部碰撞,哪怕兩個分組并不是要到相同的輸出端口去。解決這個問題的方法是對到達(dá)的分組根據(jù)他們的目的端口進(jìn)行排序。
重要術(shù)語
榕樹交換結(jié)構(gòu); 間接交付;
Batcher榕樹交換結(jié)構(gòu); 輸入端口;
縱橫交換結(jié)構(gòu); 最長掩碼匹配;
交叉點; 最長前綴匹配;
默認(rèn)方法; 特定網(wǎng)絡(luò)方法;
交付; 下一跳地址;
直接交付; 下一跳方法;
轉(zhuǎn)發(fā); 輸出端口;
特定主機方法; 路由選擇處理器;