第五章 網絡層-Network Layer(上)
5.1網絡層概述
網絡層是整個計算機網絡體系下最重要的層級之一。一方面,正是網絡層實現了不同類型網絡的互相連接;另一方面,網絡層中同時涵蓋了大量與圖論有關的路由算法,這些對於cs方向的學生來說應該並不陌生。因此,在考試和面試中,網絡層也同樣是考察的重點之一。
網絡層位於本書五層結構的中間一層。在數據鏈路層和傳輸層之間,也是內容最多的一個章節。因為網絡層的內容實在是太多了,所以這里拆分成兩個部分來寫。在這一部分中,我們將介紹一下網絡層的任務、提供的兩種服務、五個重要的路由算法、以及網絡層的擁塞控制和服務質量問題。
5.1.1網絡層的任務
關於網絡層的任務,請讀者重點記住這三個詞:在多條鏈路(mutipal links)的端點(between end points)間傳遞數據包(packets)
5.1.2網絡層提供給上層(傳輸層)的服務(2)
-
- 無連接的服務
這里描述一種網絡層中無連接的服務。在這種協議中,每個數據包被獨立的注入網絡,並獨立路由,不需要提前建立任何設置。這種數據包被成為數據報:Datagram。具體的路由方法(應該選擇哪條鏈路)由網絡層的一系列算法和協議決定。
-
- 面向連接的服務
面向連接的網絡稍有不同。在這種情況下,在發送每個數據包前會先建立一條從原router到目標router的路徑。通過這條連接的所有流量都會經過這條路徑,一直到連接釋放。這個連接稱為虛電路(virtual circuit)。
-
- VC與Datagram網絡的比較
VC與數據報是網絡層的熱門考點之一。在北航的推免面試中我也遇到了這個問題,各位可以參考一下:)
Datagram網絡 | VC網絡 | |
---|---|---|
電路建立 | 不需要 | 需要 |
尋址 | 每個包都包含目標地址與源地址 | 每個包只包含簡短的VC號 |
狀態信息 | 路由器不保留連接狀態 | 每個連接,每條VC |
路由方式 | 每個包單獨路由 | 建立VC時需要路由,之后都遵從原來的規則 |
路由器失效的影響 | 除了崩潰期間丟失的包之外沒有影響 | 穿過故障router的所有VC全部中斷 |
服務質量 | 難 | 易。只需要建立VC的時候有資源來分配 |
擁塞控制 | 難。因為網絡情況復雜 | 易。只需要建立VC的時候有資源來分配 |
英文版本:
5.2 路由算法
在第二節中,我們將具體的研究一些路由算法。所謂路由(routing),是指分組從源到目的地時,決定端到端路徑的網絡范圍的進程。這一講的許多內容對於學過離散數學與圖論的同學來講不算陌生。
5.2.1最短路徑算法
最短路徑算法基本上源於dijkstra算法,需要注意的是,在這里,每一條路徑上的權重一般不再是距離,而是距離、帶寬、平均流量、通信成本等等因素的一個函數。
5.2.2泛洪算法(flooding)
泛洪算法的思想非常簡單。在這種方法下,每個入境數據包都被發送到除了到達路線(來時)以外的每一條路徑
當然它的缺點也很明顯:會產生大量重復的數據包,不適用於大量數據。
對此,一個優化方法是為每一個數據包設置一個計數器。沒經過一跳計數器就-1。這個計數器的最大值也被稱為泛洪上限。
5.2.3距離矢量算法(Distence Vector routing)
- 一個分布式的路由算法,每個節點知道自己到每個鄰居節點的距離與鄰居發來的矢量表。用這兩項來更新自己的矢量表,計算自己出發到每個節點的路徑與權重。(這里的權重同樣是關於距離、帶寬、平均流量、通信成本等等因素的一個函數)
- 缺點/特點:
- 雖然整個系統可以收斂到正確答案,但是速度可能很慢。
- 對於好消息很敏感(如:出現一條損失很小的最短路徑),但是對於壞消息(出現斷路等狀況)很不敏感。
- 出現以上問題的核心:無窮計算問題(Count to infinity)。當X節點告訴Y節點有一條最短路徑時,Y不知道自己是否在其中。
- 一個經典應用:RIP協議(Internet)
5.2.4鏈路狀態路由(Link State routing)(重點)
-
取代了DV,解決了DV中收斂速度慢的問題
-
主要應用於IS-IS/OSPF(今日Internet)等協議下
-
算法主要步驟:(5步)
-
發現鄰居:
在每一條點到點線路上發送一個HELLO數據包,等待應答。
-
設置鏈路成本:
確定每條鏈路的距離或者是成本度量。可以理解成圖中的權重。路由器通過向路線另外一方發送ECHO數據包(對方會立刻發回),測量數據包往返時間。
-
構造鏈路狀態包:
收集到交換信息之后,每個路由器開始構造自己的鏈路狀態包。包中包括了自己的鄰居節點,以及到達他們的權重(鏈路成本)。
-
分發鏈路狀態包:
使用泛洪思想將自己的鏈路狀態包分發給所有路由器。當然,為了避免數據包過多,會設置泛洪上限。
-
計算新路由:
在路由器本地運行Dijkstra算法,構建出本地到達各個節點的最短路徑。
-
5.5.5層次路由
- 各個router被划分成不同的區域(region),甚至簇(cluster)、區(zone)、群(group)。(具體的划分方法取決於系統的規模,需要划分成多少個層級)。每個路由器僅知道自己區域內其他站的目標地址,而對於區域外的情況不知情。
- 用於應對增長的網絡規模
- 減少了路由的計算量,但是會導致比flat routing更長的路徑
5.2.6 廣播路由
-
與鏈路層的廣播含義不同!!
-
使用逆向路徑轉發(reserve path forwarding)思想:
當一個廣播數據包到達一個路由器,該路由器檢查這個數據包的到達路徑是否是通常用來給廣播源端發送數據包的那條。
若是,說明該廣播包正是沿着最佳路徑發送來的,是到達當前路由器的第一份副本;相反,若是從一條非首選的廣播路徑入境,那么路由器會把這個數據包當作重復的數據包處理(丟棄掉)。
廣播路由的優勢在於有效且易於實現。圖二中,匯集樹(Sink tree)是生成樹的一種,屬於網絡的一個子集。它包含所有的路由器,但是不包含環路。如果每個路由器都知道了它的哪些路線屬於生成樹,那么就可以大大減少數據包的發送數量。具體來講,每個路由器能否得到這樣的信息仍舊取決於路由算法:例如鏈路狀態路由可以提供這樣的機會,但是距離矢量路由就不行。
5.3 擁塞控制
當網絡中數據包的數量過大,導致系統性等大大下降時,這種現象被稱作擁塞。
擁塞問題的解決是由網絡層與傳輸層共同承擔的。
擁塞產生的原因(2):
- 延遲到達很久的數據包被當作丟失處理,發送端會重新發送。
- 收到多個數據包后,發送端亦會發送多個ACK確認,加劇了擁塞。
從上圖中可以發現,隨着負載增加,在網絡的實際吞吐量接近理想值后,網絡的實際效率開始大幅降低。
5.3.1擁塞控制途徑
人們提出了一些方法來從網絡層解決擁塞。根據處理問題的速度,下面分別介紹5種處理方法。(這一部分也是一個考點)


-
1 網絡供給:(收效最慢)
升級線路和路由器,使其具有更高的帶寬與吞吐量等性能。
-
2 流量感知路由:
在計算路由時,考慮每一條鏈路的負載。使得小權重路徑更加青睞低負載的鏈路
目的:轉移擁塞地區流量。
-
3 准入控制:(針對VC虛擬電路網絡)
除非網絡層可以攜帶額外流量且不發生擁塞,否則不新建VC。
-
4 流量限制:
由擁塞的路由器通知主機減少流量
-
5 負載脫落:(收效最快)
一個選擇丟棄那些數據包的良好策略可以有效方式擁塞
5.4 服務質量Quality of Service
這部分的內容將着眼於如何提供與實際應用更加匹配的服務質量。
一個網絡的帶寬、延遲、抖動、丟失四個參數決定了服務質量
5.4.1 流量整形
流量整形:調整進入網絡數據包的平均速度與突發性,使其以均勻的速度發送。
我們將重點了解流量整形的兩個算法:
- 漏桶(Leakey bucket)
漏桶(Leakey bucket)是對這種算法的一個很形象的比喻。請讀者考慮一個常規的水桶,但是在水桶下方有一個漏洞;那么,只要桶中還有水,從漏洞處就可以得到一個恆定流量的穩定水流。(這里不要考慮什么水壓(深度)不同導致水的流速不同之類的問題,這只是一個理想化的比喻)
- 令牌桶(token bucket)
另一個算法被叫做令牌桶,同樣是一個很形象的說法。令牌桶描述了這樣的情景:一個空空的桶,桶中會定期的補充一些令牌。而每當需要發送數據時,就會從桶中取走若干令牌。(圖片里畫了水桶,上方有一個水龍頭,也是一種比喻。讀者可以把令牌想象成水,定期補充,發送時取走)
令牌桶和漏桶的區別在於,漏桶內只要有水就可以發送,而令牌桶需要等到足夠的量才可以。這也導致令牌桶可以更方便的更改速率,應對突發的傳輸需求。
5.4.2 准入控制
與擁塞控制中的准入控制略微不同:QoS中,用戶向網絡提供一個有QoS需求的流量,隨后網絡根據自己的容量等信息決定是否接受該流。
5.4.3 綜合服務
- RSVP資源預留協議----基於流
缺點:需要為每個流進行預先設置
幾乎沒有實際部署
- 區分服務(IETF)----基於類別
在下一章中,我們將繼續網絡層的內容。這一部分包括了兩個大的知識點:網絡互聯(描述多個網絡連接過程中的一些實際問題),以及最重要的協議之一:IP協議。點擊>這里<轉跳。
主貼連接:>點擊這里<