IP分組的交付和轉(zhuǎn)發(fā)

《TCP/IP協(xié)議族》筆記



交付(delivery)是指在網(wǎng)絡(luò)層的控制下,底層各網(wǎng)絡(luò)對(duì)分組的處理方式。包括 直接交付間接交付。
轉(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ò)方法、特定主機(jī)方法以及默認(rèn)方法;
  • 討論分類編址和無分類編址時(shí)路由表的內(nèi)容,以及一些搜索路由表的算法;
  • 介紹MPLS技術(shù),并說明如何用它來實(shí)現(xiàn)基于標(biāo)記的轉(zhuǎn)發(fā);
  • 介紹路由器的組成構(gòu)件,并解釋各個(gè)構(gòu)件的作用以及與其他構(gòu)件之間的關(guān)系。


交付

網(wǎng)絡(luò)層監(jiān)視底層物理網(wǎng)絡(luò)對(duì)分組的處理過程,我們把這種處理定義為分組的交付。

直接交付

直接交付(direct delivery)時(shí),分組的終點(diǎn)是一臺(tái)與交互這者連接在同一個(gè)網(wǎng)絡(luò)上的主機(jī)。
在直接交付時(shí),發(fā)送方通過目的IP地址找出目的物理地址,然后IP軟件把目的IP地址和目的物理地址一起交付給數(shù)據(jù)鏈路層用于實(shí)際的交付。 這個(gè)過程稱為把 IP地址映射到物理地址,ARP協(xié)議動(dòng)態(tài)地把IP地址映射為相應(yīng)的物理地址。

間接交付

如果目的主機(jī)與交付者不在同一個(gè)網(wǎng)絡(luò)上,分組就要間接地交付。在間接交付(indirect delivery)時(shí),分組經(jīng)過了一個(gè)又一個(gè)路由器,最后到達(dá)與終點(diǎn)在同一個(gè)網(wǎng)絡(luò)上的路由器。


轉(zhuǎn)發(fā)

如今因特網(wǎng)是由許多鏈路組合構(gòu)成的,所以轉(zhuǎn)發(fā)也就是將分組交付給下一跳。
雖然IP協(xié)議在最初設(shè)計(jì)時(shí)是一個(gè)無連接的協(xié)議,但是將IP作為面向連接的協(xié)議來使用也是當(dāng)前的一種趨勢(shì)。
當(dāng)IP作為無連接的協(xié)議時(shí)轉(zhuǎn)發(fā)的基礎(chǔ)是IP數(shù)據(jù)報(bào)的目的地址;而當(dāng)IP作為面向連接的協(xié)議時(shí),轉(zhuǎn)發(fā)的基礎(chǔ)則是附加在IP數(shù)據(jù)報(bào)上的標(biāo)記。

基于目的地址的轉(zhuǎn)發(fā)

傳統(tǒng)方式---基于目的地址的轉(zhuǎn)發(fā),要求主機(jī)或路由器具有一張路由表才能進(jìn)行轉(zhuǎn)發(fā)。
當(dāng)主機(jī)有分組要發(fā)送,或路由器收到分組來進(jìn)行轉(zhuǎn)發(fā)時(shí),就搜索路由表。因?yàn)槁酚杀淼谋眄?xiàng)數(shù)量過多將導(dǎo)致路由表的查找效率非常低。

轉(zhuǎn)發(fā)技術(shù)

使用一些技術(shù)可以使路由表的規(guī)模變?yōu)榭晒芾淼?,同時(shí)還能處理一些如安全性這樣的問題。

下一跳方法

下一跳方法(next hop method)的技術(shù)可以減少路由表中的內(nèi)容。
這種技術(shù)就是在路由器中只保留下一跳的地址,而不是保留完整路由的信息。

下一跳方法
特定網(wǎng)絡(luò)方法

特定網(wǎng)絡(luò)方法(network-specific method)能夠使路由表長度變小并簡(jiǎn)化查找過程。
此時(shí),路由表并不是對(duì)連接在同一個(gè)物理網(wǎng)絡(luò)上的每一臺(tái)主機(jī)都設(shè)置一個(gè)表項(xiàng),而是只用一個(gè)表項(xiàng)來定義目的網(wǎng)絡(luò)本身的地址。

特定網(wǎng)絡(luò)方法
特定主機(jī)方法

在使用 特定主機(jī)方法(host-specific method)時(shí),目的主機(jī)的地址在路由表中要給出。

特定主機(jī)方法
默認(rèn)方法

默認(rèn)方法(default method)通常稱為默認(rèn)路由,默認(rèn)表項(xiàng)(通常定義網(wǎng)絡(luò)地址為 0.0.0.0)。


使用分類編址時(shí)的轉(zhuǎn)發(fā)

無子網(wǎng)劃分的轉(zhuǎn)發(fā)

全球大多數(shù)路由器都沒有使用子網(wǎng)劃分。
在這種情況下,一個(gè)典型的轉(zhuǎn)發(fā)模塊要使用三張表。每個(gè)單播類別(A,B,C)三張表;(如果路由器支持多播,那么還要增加一張?zhí)幚鞤類地址的表),有了這三張表就使得搜索的效率更高。

每張路由表至少有下面三列:

  1. 目的網(wǎng)絡(luò)和網(wǎng)絡(luò)地址;
  2. 下一跳地址;
  3. 接口號(hào)。
無子網(wǎng)劃分的無分類編址中簡(jiǎn)化的轉(zhuǎn)發(fā)模塊
有子網(wǎng)劃分的轉(zhuǎn)發(fā)

在使用分類編址時(shí),子網(wǎng)劃分發(fā)生在組織的內(nèi)部。處理子網(wǎng)劃分的路由器不是在該組織站點(diǎn)的邊界上,就是在站點(diǎn)邊界的里面。
如果這個(gè)組織使用了可變長的子網(wǎng)劃分,那么我們就需要多張路由表,否則就只需要一張就夠了。

有子網(wǎng)劃分時(shí)分類編址的簡(jiǎn)化轉(zhuǎn)發(fā)模塊


使用無分類編址時(shí)的轉(zhuǎn)發(fā)

在使用無分類編址時(shí),整個(gè)地址空間是完整的,沒有劃分類別。
我們需要在路由器表中包含 掩碼(/n)。需要有另外的一列包含對(duì)應(yīng)地址塊的掩碼。
換言之,雖然一個(gè)分類編址的路由表可以設(shè)計(jì)為三列,但無分類編址的路由表至少需要四列。

無分類編址簡(jiǎn)化的轉(zhuǎn)發(fā)模塊

點(diǎn)對(duì)點(diǎn)網(wǎng)絡(luò)通常在路由表中沒有表項(xiàng),因?yàn)闆]有主機(jī)連接到它們。

地址聚合

當(dāng)我們使用分類編址時(shí),一個(gè)組織之外的每一個(gè)站點(diǎn)在路由表中只有一個(gè)表項(xiàng)。這個(gè)表項(xiàng)定義了一個(gè)對(duì)應(yīng)的站點(diǎn),而不管該站點(diǎn)是否又劃分了子網(wǎng)。當(dāng)分組到達(dá)路由器時(shí),路由器檢查相應(yīng)的表項(xiàng)并轉(zhuǎn)發(fā)這個(gè)分組;
當(dāng)我們使用無分類編址時(shí),路由表的表項(xiàng)數(shù)量很可能會(huì)增加,這是因?yàn)闊o分類編制的意圖就是把整個(gè)的地址空間劃分為很多可管理的地址塊。
路由表的規(guī)模變大就會(huì)導(dǎo)致搜索路由表的時(shí)間變長。為了解決這個(gè)問題,人們?cè)O(shè)計(jì)了 **地址聚合(Address aggregation)的概念。

地址聚合

小地址被聚合成為一個(gè)更大的地址塊。如果每個(gè)組織的地址不能被聚合到一個(gè)地址塊中,那么路由器就需要一個(gè)更長的路由表。
雖然地址聚合的概念和子網(wǎng)劃分的概念相似,但我們并沒有一個(gè)共同的站點(diǎn),也就是說每一個(gè)組織的網(wǎng)絡(luò)是獨(dú)立的。另外,我們還可以有多級(jí)聚合。

最長掩碼匹配

無分類編址的路由器使用了另一個(gè)原則,即 最長掩碼匹配(longest mask matching)。這個(gè)原則指出,路由表按照從最長掩碼到最短掩碼來排序。

最長掩碼匹配
多級(jí)路由選擇

要解決路由表過于龐大的問題,我們可以在路由表中建立分等級(jí)的概念。像因特網(wǎng)中的主干ISP、地區(qū)ISP和本地ISP。

分層路由選擇
地理區(qū)域化路由選擇

為了進(jìn)一步縮小路由表的長度,我們需要把多級(jí)路由選擇進(jìn)一步延伸,以包括地理區(qū)域化的路由選擇。
如,把一塊地址塊給歐洲,一塊給亞洲······,這樣對(duì)于路由器來說,發(fā)往歐洲的分組在路由表中只需要一個(gè)表項(xiàng)。

路由表的查找算法

分類編址搜索路由表的算法必須要做適當(dāng)?shù)恼{(diào)整才能使無分類編址的路由選擇更加有效。

使用分類編址時(shí)的查找

在使用分類編址的時(shí)候,路由表被組織成列表的形式。通常包括A、B、C類三張表。

在無分類中的查找

在使用無分類編址時(shí),最簡(jiǎn)單但不是最有效的搜索方法稱為 最長前綴匹配。但這種類型的


基于標(biāo)記的轉(zhuǎn)發(fā)

在一個(gè)無連接的網(wǎng)絡(luò)中(數(shù)據(jù)報(bào)方式),路由器根據(jù)分組首部的目的地址來轉(zhuǎn)發(fā)分組;在一個(gè)面向連接的網(wǎng)絡(luò)中(虛電路方式),交換機(jī)則根據(jù)附加在分組上的標(biāo)記來轉(zhuǎn)發(fā)該分組。
路由選擇通?;趯?duì)路由表內(nèi)容的搜索,而交換機(jī)則可以用一個(gè)索引訪問交換表完成。換言之,路由選擇涉及到搜索過程,而交換則涉及直接的訪問。

基于目的地址的轉(zhuǎn)發(fā)

當(dāng)轉(zhuǎn)發(fā)短發(fā)得到分組的目的地址后,它就需要埋頭在掩碼列中開始搜索。對(duì)于每一個(gè)表項(xiàng),它都要應(yīng)用掩碼來求出分組的目的網(wǎng)絡(luò)地址,然后再查看路由表中的網(wǎng)絡(luò)地址,直到找到相匹配的網(wǎng)絡(luò)地址。然后路由器提取出要傳遞給ARP 協(xié)議的下一跳和接口號(hào),以便將該分組交付到下一跳。


因?yàn)闃?biāo)記被當(dāng)作是交換表的索引,所以可以立刻在表中找到相應(yīng)的信息。

基于標(biāo)記的轉(zhuǎn)發(fā)

MPLS

多協(xié)議標(biāo)記交換(Multi-Protocol Label Switching),在這個(gè)協(xié)議中,因特網(wǎng)傳統(tǒng)路由器可以被MPLS路由器所取代,這些MPLS路由器既可用作路由器,也可用作交換機(jī)。當(dāng)它用作路由器使用時(shí),它可以根據(jù)目的地址來轉(zhuǎn)發(fā)分組;而當(dāng)它用作交換機(jī)使用時(shí),又能夠基于標(biāo)記來轉(zhuǎn)發(fā)分組。

一個(gè)新的首部

要使用像IP這樣的協(xié)議來模仿面向連接的交換,首先要做的事情就是為分組增加一個(gè)字段,以便攜帶標(biāo)記。IPv4分組格式不允許此類擴(kuò)展(雖然在IPv6分組格式中已提供了這個(gè)字段)。
解決辦法就是將IPv4分組封裝在一個(gè)MPLS分組中。完整的IP分組作為凈負(fù)荷被封裝到一個(gè)MPLS分組中,并附加上MPLS首部。
MPLS首部是32位(4字節(jié))長。

IP分組上添加MPLS首部
MPLS首部由標(biāo)記的堆棧組成

標(biāo)記,這個(gè)20位字段定義為標(biāo)記,他在路由器中被用作路由表的索引;
Exp,這個(gè)3位字段保留作為實(shí)驗(yàn)用;
S,這個(gè)1位的堆棧字段定義了堆棧中的子首部的狀態(tài);
TTL,TTL值。

多級(jí)交換

MPLS中的標(biāo)記堆棧使得多級(jí)交換成為可能。




路由器的結(jié)構(gòu)

當(dāng)我們討論轉(zhuǎn)發(fā)和路由選擇時(shí),我們把路由器畫成一個(gè)黑盒子。它從一個(gè)輸入端口接收進(jìn)入的分組,再通過路由器找出分組離開的輸出端口,然后把分組從輸出端口發(fā)送出去。

構(gòu)件

一個(gè)路由器有四個(gè)構(gòu)件:輸入端口(Input port),輸出端口(Output port),路由選擇處理器(Routing processor),交換結(jié)構(gòu)(Switching fabric)

路由器構(gòu)件

輸入端口

輸入端口執(zhí)行路由器的物理層和鏈路層的功能。
它從接收到的信號(hào)中得到比特流,并把幀拆裝后得到分組,同時(shí)還要進(jìn)行差錯(cuò)的檢測(cè)和糾正。分組準(zhǔn)備就緒后,就可以通過網(wǎng)絡(luò)層進(jìn)行轉(zhuǎn)發(fā)。除了物理層處理器和數(shù)據(jù)鏈路層處理器之外,輸入端口還有一些緩存,用來在分組被傳送到交換結(jié)構(gòu)之前進(jìn)行暫存。

輸出端口

輸出端口與輸入端口功能一樣,但是順序相反。

路由選擇處理器

路由選擇處理器執(zhí)行網(wǎng)絡(luò)層的功能。
它用目的地址來找出下一跳地址,與此同時(shí),還要找出將分組發(fā)送出去的端口號(hào)。這個(gè)動(dòng)作有時(shí)稱為 查表。

交換結(jié)構(gòu)

在路由器中最困難的任務(wù)就是把分組從輸入隊(duì)列搬移到輸出隊(duì)列中。完成這件事的速度直接影響到輸入/輸出隊(duì)列的大小和分組交付的總延時(shí)。

縱橫交換結(jié)構(gòu)

縱橫交換結(jié)構(gòu)(cross switch)把n個(gè)輸入和n個(gè)輸出連接成一個(gè)柵格,在每一個(gè)交叉點(diǎn)(cross point)使用了電子微開關(guān)。

縱橫交換結(jié)構(gòu)
榕樹交換結(jié)構(gòu)

比縱橫交換結(jié)構(gòu)更現(xiàn)實(shí)一些的是榕樹交換結(jié)構(gòu)(banyan switch)。

榕樹交換結(jié)構(gòu)
榕樹交換結(jié)構(gòu)選路的栗子
Batcher 榕樹交換結(jié)構(gòu)

榕樹交換結(jié)構(gòu)存在的問題是有可能會(huì)出現(xiàn)內(nèi)部碰撞,哪怕兩個(gè)分組并不是要到相同的輸出端口去。解決這個(gè)問題的方法是對(duì)到達(dá)的分組根據(jù)他們的目的端口進(jìn)行排序。

Batcher 榕樹




重要術(shù)語

榕樹交換結(jié)構(gòu);                 間接交付;
Batcher榕樹交換結(jié)構(gòu);          輸入端口;
縱橫交換結(jié)構(gòu);                 最長掩碼匹配;
交叉點(diǎn);                       最長前綴匹配;
默認(rèn)方法;                     特定網(wǎng)絡(luò)方法;
交付;                         下一跳地址;
直接交付;                     下一跳方法;
轉(zhuǎn)發(fā);                         輸出端口;
特定主機(jī)方法;                 路由選擇處理器;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容