Internet路由-主機路由表和轉發表

轉自:http://blog.csdn.net/dog250/article/details/6596135

1.路由表

路由信息最終要存儲在用於路由器的主機或者專業路由器上,存放這些信息的地方稱爲路由表。其中包含三元素:目標地址,掩碼,下一跳。

1.1.查詢路由表的開銷

有人認爲查詢路由表是一件和交換機查詢MAC地址一樣的事,那就大錯特錯了,查詢MAC地址/端口對是一種固定的數據查找,MAC地址都是固定的48字節,而IP地址呢,自從CIDR出現以後,地址成了“無類”的了,因此任意位的掩碼都能成爲正確的掩碼,另外,聰明的管理員想出了路由匯聚,這些傢伙將負擔轉嫁給了系統的實現者,從而系統實現者必須實現“最長掩碼”匹配,既然掩碼是不固定的,因此查詢就是不固定的,這是很麻煩的事。

2.轉發表

數據包到達路由器的時候,要根據“指示”前往特定的端口,類似交換機的地址信息表,路由器上存放這個“指示”的地方叫做轉發表

3.兩個表的關係

3.1.聯繫

轉發表直接作用於數據包,而路由表是轉發表生成的依據,轉發表通過路由表生成。一個特定的進程可以通過使用路由表中的信息,加上自身的主機方面的信息-比如網卡等信息-加以綜合,得到一張轉發表。路由信息和主機是沒有任何關係的,它只描述網絡鏈路狀態和方向。

3.2.區別

兩表存儲的信息是不同的,路由表只存儲三元素-目標,掩碼,下一跳;而轉發表存儲更詳細的信息,比如輸出端口信息,比如標記信息等。轉發表描述了主機方面的信息,在主機內部將一個數據包從一個端口導向另一端口,而路由表描述網絡信息,將數據包從一個機器導向另一機器。

4.誤區

當前很多人都懂一個系統的實現,這些人不外乎3類,第一類精通linux內核,第二類精通Cisco設備的配置,第三類精通Windows網絡編程以及NDIS。三類人一般的交集很少,因此大部分熟悉Linux內核的人都不會去區分路由表和轉發表,因爲Linux內核本身就不區分這兩個表,每到一個數據包都會查路由表(當然前面還有一個緩存...但這不是轉發表);因此熟悉Cisco的傢伙會認爲兩個表是一定要區分的,否則MPLS怎麼實現?熟悉Windows核心的人呢?可能並不關心這些,因爲Windows幾乎不用於路由器。

5.區分二表的好處之實例

MPLS是區分路由表和轉發表的一個明顯的例子,首先聲明,MPLS是一個網絡,而不是運行特定協議的一個節點。在MPLS中,完全通過標籤進行數據包轉發,在MPLS網絡可用於數據業務之前(中間也可以通過標籤分發協議動態調整),MPLS轉發表就建好了,它的表項包含三元素:來源數據自帶標籤/轉發到的端口/轉發出去攜帶的標籤。這個表項是通過路由表建立的,我們將之視爲轉發表。實現MPLS需要在入口路由器上爲數據包單獨打上一個標籤,這樣直到出去MPLS網絡,數據包就可以快速被轉發了,省去了直接查詢路由表的開銷。

6.Linux中通過NAT原理配置轉發表

如果管理員能事先“打通一條路”,那麼就可以在每一個路由器的入口上配置DNAT,然後在其出口處配置SNAT,從而實現一個標準的點對點的IP鏈路,每一個節點都以爲數據要發往“下一跳”,而不是越過下一跳的“遠端機器”。由於NAT基於連接,它爲無方向的IP網絡增加了方向性,因此配置SNAT後就無需再配置反向路由了。
     鑑於上述的方式,如果我們能在DNAT信息中識別標籤信息然後直接確定輸出端口,同時在輸出端口的SNAT中封裝上新的出口標籤,無需在進入路由模塊,這就是一個MPLS實現。然而目前的標準Linux內核的Netfilter中並沒有如此實現。

7.優勢

除了可以實現MPLS等特定的專用線路網絡之外,轉發表和路由表分開的最大好處在於其可以使用硬件實現轉發表,從而實現高速鏈路層轉發,而路由表很難用硬件實現,原因就是它不是精確匹配的,而是“最長前綴”匹配的,這裏面充滿了變數。
發佈了13 篇原創文章 · 獲贊 7 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章