一个报文的路由器之旅_报文的交换和寻址转发
從“交換”談起
數(shù)據(jù)是通過接口板接收和發(fā)送,通信線纜都要插接到接口板的接口上。那么,把某一 個接口來的數(shù)據(jù)包送到另一個接口發(fā)出去,這兩個接口需要連起來。但實際上,數(shù)據(jù) 包可能從任意接口進(jìn)來,從任意接口出去,都這么點到點連接的話,則需要N*(N-1)/2 根線互聯(lián),太多了。
為了解決這種大量連接的問題,接口板和接口板之間需要通過交換網(wǎng)(Switch Fabric) 板銜接起來,接口板只要通過若干連線跟交換網(wǎng)板連接,就能完成任意接口的互通。
交換網(wǎng)屬于“三無”部件,即與設(shè)備配置無關(guān)、與協(xié)議無關(guān)、與數(shù)據(jù)包類型無關(guān)。交 換網(wǎng)專注于在入接口和出接口之間建立連接,完成數(shù)據(jù)的交換。
上行和下行
以交換網(wǎng)為中心,可將報文在路由器的行程一分為二,前半程稱為“上行”,下半程 稱為“下行”
尋址轉(zhuǎn)發(fā)
可能有人會問,報文從一個接口進(jìn)來,經(jīng)過“交換”,從另一個接口出去,這個交換 機(jī)也會做啊,何必用路由器?是的,交換機(jī)也有交換功能。但是,在互聯(lián)網(wǎng)中,從一 個節(jié)點到另一個節(jié)點,有許許多多的路徑,路由器可以選擇通暢的短的路徑,從而 提高通信速度,減輕網(wǎng)絡(luò)負(fù)荷,節(jié)約網(wǎng)絡(luò)資源,這是交換機(jī)所不具備的能力。為數(shù)據(jù) 包選擇一條合適的(通常指短的)傳輸路徑,然后從對應(yīng)的接口發(fā)送,這個過程就 稱為“尋址轉(zhuǎn)發(fā)”。
路由器所在的網(wǎng)絡(luò)幾乎都是遵循TCP/IP體系的,路由器是工作在該體系的第三層,即 網(wǎng)絡(luò)層。
第三層即網(wǎng)絡(luò)層
所以,剛才提到的“尋址”的”址“是指根據(jù)數(shù)據(jù)包的網(wǎng)絡(luò)層地址——IP地址。為了 尋址,路由器需要一張“地圖”,以目的IP地址為索引的“地圖”,也就是路由表。 每個路由器中都有一張路由表。
路由表長什么樣
實際的路由表跟上圖有些相似。路由表的索引是目的IP地址/掩碼,每個表項中都有對 應(yīng)的下一跳IP地址和出接口信息,如下圖。
路由表
有了這張表,路由器接在收到數(shù)據(jù)包時就能做到心中有數(shù)了。比如收到一個目的地址 為10.0.0.1的報文,路由器就可以查表得知需要將該報文發(fā)送到GE1/0/0這個接口。
這個路由表怎么得來的呢?一種辦法是手工制作,對路由器進(jìn)行手工設(shè)置固定的路 由。但是這種路由不能對網(wǎng)絡(luò)的改變作出反映,如果網(wǎng)絡(luò)拓?fù)渥兓?#xff0c;需要人工去修 改設(shè)置。還有一種辦法就是運(yùn)行動態(tài)路由協(xié)議,讓路由器之間相互傳遞路由信息,利 用收集到的路由信息進(jìn)行計算,生成路由表,這樣就可以讓路由表實時跟進(jìn)網(wǎng)絡(luò)拓?fù)?的變化。在實際應(yīng)用中,這兩個辦法都用上了,當(dāng)動態(tài)路由與靜態(tài)路由發(fā)生沖突時, 以靜態(tài)路由為準(zhǔn)。當(dāng)然,路由表還有一類路由,不是人工配置的,也不是路由協(xié)議的 學(xué)習(xí),而是由鏈路層協(xié)議發(fā)現(xiàn)的,稱為直連路由
路由表放在哪
有了路由表,接下來要考慮的是,路由表放哪合適呢?
前面說過,數(shù)據(jù)包是從某個接口進(jìn)來,經(jīng)過交換網(wǎng),再從另一個接口出去。那路由表 能不能放交換網(wǎng)?答案是不行,因為交換網(wǎng)要完成整個設(shè)備所有報文的交換,為了讓 交換網(wǎng)完成高速交換,不成為瓶頸,不能再讓交換網(wǎng)去運(yùn)行路由協(xié)議、維護(hù)路由表、 做尋址轉(zhuǎn)發(fā)。
那路由表能不能放下行接口板?答案也是不行,交換網(wǎng)做交換的時候,就需要知道要 送往哪塊目的單板,所以尋址轉(zhuǎn)發(fā)需要在上行完成。然而,如果把路由表放上行接口 板,由于報文可能從任意接口板進(jìn)來,那么所有的接口板都需要放一個路由表。其 實,還有更好的辦法,就是將路由表放在一個公共的地方,比如主控板上,由主控板 的CPU運(yùn)行路由協(xié)議,計算路由,生成和維護(hù)路由表。
轉(zhuǎn)發(fā)表與路由表
華為高端路由器采用的是“硬轉(zhuǎn)發(fā)”,業(yè)務(wù)報文不經(jīng)過主控板CPU處理,不能直接用 主控板上的路由表,接口板上也需要有供尋址轉(zhuǎn)發(fā)的信息。所以,主控板CPU生成路 由表之后,還要將相關(guān)信息下發(fā)給各個接口板。這些相關(guān)的信息就是轉(zhuǎn)發(fā)信息,存放 在各個接口板的轉(zhuǎn)發(fā)信息表FIB(Forwarding Information Base)中。各個接口板上的轉(zhuǎn) 發(fā)信息都是相同的,因為它們具有相同的來源,都來自主控板。
實際上,現(xiàn)代高性能路由器在架構(gòu)上都是轉(zhuǎn)發(fā)和控制分離:把轉(zhuǎn)發(fā)層面和控制層面分 配在不同的組件,控制層面運(yùn)行路由協(xié)議,維護(hù)路由表,并下發(fā)轉(zhuǎn)發(fā)表FIB到轉(zhuǎn)發(fā)層 面,由轉(zhuǎn)發(fā)層面負(fù)責(zé)數(shù)據(jù)包轉(zhuǎn)發(fā)。這樣做的基本的好處就是不會相互影響:如果流 量很高導(dǎo)致轉(zhuǎn)發(fā)層面高負(fù)荷,但是其不會影響控制層面進(jìn)行正常的路由學(xué)習(xí);相反 的,如果控制層面對路由信息的處理比較繁忙,也不會影響轉(zhuǎn)發(fā)層面進(jìn)行其高速的數(shù) 據(jù)包轉(zhuǎn)發(fā)。
路由表和轉(zhuǎn)發(fā)表看起來差不多,都有目的IP地址/掩碼、下一跳、 出接口這三個信息。實際上,轉(zhuǎn)發(fā)表是根據(jù)路由表生成的。路由表中可能包含到達(dá)目 的地址的多條路由,但是轉(zhuǎn)發(fā)表里面只取其中的優(yōu)路由。而且,路由表的下一跳是 原始的下一跳,不一定是直接可達(dá)的,FIB是用于指導(dǎo)轉(zhuǎn)發(fā)的,它的下一 跳必須是直接 可達(dá)。根據(jù)“原始下一跳”找到“直接下一跳”的過程就稱為“路由迭代”。
路由器上電啟動之后,就會運(yùn)行路由協(xié)議學(xué)習(xí)網(wǎng)絡(luò)拓?fù)?#xff0c;生成路由表,如果接口板注 冊成功,主控板就可以根據(jù)路由表生成轉(zhuǎn)發(fā)表項并下發(fā)給接口板,這樣路由器就可以 根據(jù)轉(zhuǎn)發(fā)表轉(zhuǎn)發(fā)數(shù)據(jù)包了。執(zhí)行數(shù)據(jù)包轉(zhuǎn)發(fā)的部件是位于接口板上的一個被稱為包轉(zhuǎn) 發(fā)引擎PFE(Packet Forwarding Engine)部件,通常是NP或ASIC芯片。
找不到路怎么辦
上述這種在轉(zhuǎn)發(fā)報文前,提前準(zhǔn)備好轉(zhuǎn)發(fā)表,待收到報文時再查表轉(zhuǎn)發(fā)的方式稱為 “預(yù)路由”,“先鋪路,后通車”?,F(xiàn)在路由器都采用這種方式進(jìn)行IP單播轉(zhuǎn)發(fā)。在 這種方式中,查表轉(zhuǎn)發(fā)時,如果沒有匹配上(如果有默認(rèn)路由,終會匹配上默認(rèn)路 由,默認(rèn)路由不存在“不匹配”的情況),意味著這臺路由器沒有到這個目的地址的 路由(或者還沒有學(xué)習(xí)到這個路由),也就是找不到路,迷路了。數(shù)據(jù)包迷路了怎么 辦,原路返回?想象下,如果迷路了就被原路返回給源端,那源端重發(fā)的還是同樣的 目的地址,那這個報文還是會在同一個地方迷路,再原路返回,死循環(huán)了。所以,數(shù) 據(jù)包迷路了只能被丟棄。出于可維護(hù)方面的考慮,包轉(zhuǎn)發(fā)引擎PFE會記錄丟棄原因和統(tǒng) 計丟棄的報文數(shù)。
預(yù)路由與流觸發(fā)
剛才說到路由器都采用“先鋪路,后通車”的預(yù)路由方式。相對的,“先通車,后鋪 路”的方式,被稱為“流觸發(fā)”。流觸發(fā)方式中,設(shè)備收到報文,查轉(zhuǎn)發(fā)表,如果轉(zhuǎn) 發(fā)表中不存在對應(yīng)的表項,就根據(jù)這個報文生成一個轉(zhuǎn)發(fā)表項。這樣,該用戶流的下 一個報文就可以命中轉(zhuǎn)發(fā)表進(jìn)行轉(zhuǎn)發(fā)了。 目前,路由器和交換機(jī)在進(jìn)行二層轉(zhuǎn)發(fā)時所使用的MAC表,就是采用MAC地址學(xué)習(xí)方 式,類似于“流觸發(fā)”方式。
從安全性角度上,流觸發(fā)顯然容易造成流量攻擊,為攻擊者提供了一個合理合法的攻 擊路徑。攻擊者可以使用各種未知目的報文對系統(tǒng)進(jìn)行遍歷掃描攻擊,形成對路由器 的流量攻擊。所以,華為高端路由器上,除了有MAC學(xué)習(xí)方式機(jī)制外,為了預(yù)防流量 攻擊,還提供了限制MAC地址學(xué)習(xí)的功能,即限制多允許學(xué)習(xí)多少個MAC地址,并 限制每次學(xué)習(xí)的時間間隔;而且還允許去使能MAC地址學(xué)習(xí),允許人們像配置靜態(tài)路 由一樣去手工配置MAC表項。
總結(jié)
以上是生活随笔為你收集整理的一个报文的路由器之旅_报文的交换和寻址转发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css 浮动在最上层_CSS编码规范
- 下一篇: python json库函数_pytho