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