首先考慮一個問題,路由器是如何進行尋址的。可能有兩種方式,一種就像高德地圖一樣,輸入起點和終點後,從起點到終點的幾條完整路線就會出來。另一種則和路標類似,它不指明完整的路線,但會告訴你不同路口下一個目的地在哪裡。
路由器是採用第二種方式,因為第一種不符合實際情況。網路太複雜龐大了,一個路由器不可能知道所有的網路的拓樸結構。即使它真的將所有網路的路由保存下來,那也是效率極低的,需要佔用巨大的存儲,另外查詢路由也會變的極其低效。
所以路由器只會保存和它相連網路的訊息,這樣,當一個封包經過一個路由器,路由器就會根據目的位址選擇下一跳的位址把該封包交付出去,中間可有會經過十幾個路由器的轉發,一個封包才會最後交付給目的主機。
路由器轉送分組是有自己的演算法的,下面我們來看路由器是如何轉送分組的:
#(1)首先從需要從封包中提取目的位址。
(2)看是否可以直接交付。即目的位址所在網路是否與該路由器直接連接,若連接則可直接交付,不需要再經過其他路由器的進行轉送。否則,則執行3。
(3)查看路由表是否有對應的特定主機路由,有的話就轉送給特定主機路由路由指定的下一跳位址,否則執行4。
(4)查看有沒有符合的一般路由,如果有,則根據符合規則的那條一般路由指定的下一跳位址進行轉發,否則執行5。
(5)若該路由器中的路由表設定了預設路由,則將分組轉送至預設路由指明的位址,否則執行6
(6)丟棄該封包,並且回報轉發失敗
推薦:《linux影片教學》
以上是路由器是如何轉發分組的的詳細內容。更多資訊請關注PHP中文網其他相關文章!