網路層:轉送與 IP
轉送與路由(forwarding vs. routing)
想像一座機場。路由(routing)是那種長時間、深思熟慮的規劃:替每一個可能的目的城市,決定旅客接下來該走向哪一個登機門。轉送(forwarding)則是快速、就地的動作:實際把旅客從入境門帶到那個登機門。規劃計算得慢、很少改變;走路的動作卻發生上百萬次。網路層也有同樣的分工:路由算出路徑,轉送則把每個封包沿著路徑送出去。
轉送是路由器上每台機器各自進行的就地動作:封包從某個輸入埠進來,路由器在轉送表裡查出目的位址,再把封包從正確的輸出埠推出去。這必須在奈秒等級、以線速完成,常由專用硬體執行,因為一台繁忙的路由器每秒要轉送數十億個封包。路由則是全網規模的運算,用來填好那張轉送表:路由器彼此交換資訊,執行路由演算法(如連結狀態或距離向量)算出好的路徑。這件事發生的頻率低得多,是在軟體裡、以秒或分鐘為單位進行的。
常見的簡稱把轉送對應到資料平面(碰到每個封包的快速路徑),把路由對應到控制平面(決定政策、計算表格的較慢大腦)。本領域談的是資料平面——轉送這個動作,以及執行它的硬體。轉送表究竟是如何算出來的,屬於路由領域。把兩者分開,正是軟體定義網路(SDN)的核心想法:它把控制平面抽離成一個獨立的控制器。
路由(一次,在軟體裡):各路由器約定送往 203.0.113.0/24 的流量應從第 3 埠離開。轉送(數十億次,在硬體裡):每個符合該前綴的封包都被比對出來、在奈秒內從第 3 埠推出去——完全不需要重新計算。
路由把規則寫好一次;轉送則以全速把它套用到每一個封包上。
初學者常把這兩個詞混為一談。記住:轉送是就地、針對單一封包(現在就把它送出去),路由是全域、偶爾為之(決定所有東西該往哪去)。路由器兩者都做;本領域只談轉送這一半。
又称
另见