1. 程式人生 > >出了網關,網絡數據包的經歷

出了網關,網絡數據包的經歷

轉發規則 自己的 計算 消息 相關 重要 狀態 發出 保存

出了網關,網絡包的經歷

數據包經過路由從局域網出去後,就變得復雜起來。數據包的傳遞會面臨各種選擇,比如最重要的路徑選擇

路徑選擇就是選擇最短路徑,也即最優路徑來傳遞網絡包到目的地。

在現在網絡世界,個人發出的各種網絡包的傳遞一般經過n多路由,每個路由就相當於關卡,有一些策略算法來保證網絡包的正常傳輸。

所以這裏涉及到路由的配置。路由擁有一張路由表。一張路由表中會有多條路由規則。每一條規則至少包含這三項信息:

  • 1.目的網絡:這個包想去哪兒?
  • 2.出口設備:將包從哪個口扔出去?
  • 3.下一跳網關:下一個路由器的地址。

路由的配置有兩種類型:靜態配置和動態配置。

靜態配置就是直接在配置文件裏規定好路由的各個網口和ip的轉發規則,負載均衡和默認路徑等。

從中可以看到手工配置路由只適合在一些網絡環境簡單的,可控的網絡中使用。不然在復雜的網絡中,靜態路由是不可取的。

動態路由路由器,可以根據路由協議算法生成動態路由表,隨網絡運行狀況的變化而變化。

動態路由主要有兩種算法:

  • 1. 距離矢量路由算法
  • 2. 鏈路狀態路由算法

距離矢量路由算法

每個路由器都保存一個路由表,包含多行,每行對應網絡中的一個路由器,每一行包含兩部分信息,一個是要到目標路由器,另一個是到目標路由器的距離。

所以啊,使用距離矢量路由算法,每個路由都擁有整個自己能感知的網絡的信息。每個路由都知道它能到達的路由的距離。所以,在更新的時候,相關聯的路由就會根據相連的路由的距離和源地址路由的距離來推斷出自己和源地址路由的距離,然後就會被源地址路由來計算出一條最優的路徑。

距離矢量路由算法有個不好的地方,“好事傳千裏,壞事關起門來”的特點。當某個路由加入網絡或更新信息時,就會發起一個廣播,然後全局中的其他路由就會更新自己信息,主要是自己與其他路由的最終距離。

但是當某個路由掛掉時,掛了是不會發廣播的,只能是通過全局所有路由“報告距離掛掉的路由的信息遞增超過閾值“來發現掛掉,所以全局中其他路由更新這個信息的過程是緩慢的。

這個過程是這樣的。當全局網絡中的每個路由器發現原來的路徑到不了這個路由器時,是發現不了它已經掛了,而會試圖通過其他的路徑訪問,直到試過了所有的路徑,才發現這個路由器是真的掛了。

針對距離矢量路由算法,每次更新信息都要發動一次全局更新,這樣一來,網絡大了,這個過程是緩慢,並且是效率低下的。因此,限制了其網網絡規模。

鏈路狀態路由算法

和距離矢量路由算法不同,鏈路狀態路由算法的路由算法中,路由在啟動時,會向相鄰的路由詢問距離,這個詢問是發送一個echo,然後除以2來求出距離。然後把這個距離信息和地址信息一起廣播到全局網絡的路由。每個路由都會構建一個本地的全局地圖。然後針對這個圖使用 Dijkstra 算法,找到兩點之間的最短路徑。

鏈路狀態路由算法和距離距離矢量路由算法不一樣。後者在更新時會發送自己的整個路由表。而前者只廣播更新的或改變的網絡拓撲,這樣更新信息更小,節省了帶寬和 提高效率。當某個路由器掛了,它的鄰居都會廣播這個消息,可以使得壞消息迅速收斂。

出了網關,網絡數據包的經歷