文章目錄
- 1.1.查詢路由表的開銷
- 3.1.聯絡
- 3.2.區別
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等特定的專用線路網路之外,轉寄表和路由表分開的最大好處在於其可以使用硬體實現轉寄表,從而實現高速鏈路層轉寄,而路由表很難用硬體實現,原因就是它不是精確匹配的,而是“最長首碼”匹配的,這裡面充滿了變數。