在
前面的文章中,我們看到了運輸層是如何工作、並且了解了運輸層的工作特性。而運輸層
依賴於網絡層的主機到主機的通信服務和網絡層提供的各種形式的進程到進程的通信。接下
來,下文將會介紹 網絡層是如何提供這些服務?這種主機到主機通信服務的真是情況是怎樣
的?是什么使它工作起來的?
依賴於網絡層的主機到主機的通信服務和網絡層提供的各種形式的進程到進程的通信。接下
來,下文將會介紹 網絡層是如何提供這些服務?這種主機到主機通信服務的真是情況是怎樣
的?是什么使它工作起來的?
什么是網絡層?
網絡層與運輸層和應用層不同的是,在網絡中每一台主機和路由器都是網絡層的部分,網絡層協議是協議棧中最復雜但卻最有趣的一部分。

網絡層有什么作用?
從表面上看,網絡層的作用很簡單,即將分組從一台主機移動到另一台主機,從而提供了主機到主機的通信服務和各種形式的進程到進程的通信。
與網絡層運輸層相似,網絡層也能夠提供無連接服務或面向連接服務。僅在網絡層提供連接
服務的計算機網絡稱為 虛電路;僅在網絡層提供無連接服務的計算機網絡稱為 數據報網絡。
服務的計算機網絡稱為 虛電路;僅在網絡層提供無連接服務的計算機網絡稱為 數據報網絡。
網絡層提供了什么服務?
網絡服務模型定義了分組在發送與接收端系統之間的端到端運輸特性。下面列出了 網絡層提供的部分特定服務:
確保交付
具有時延上界的確保交付
有序分組交付
確保最小帶寬
確保最大時延抖動
安全性服務
網絡層主體是什么,它又是如何提供上述服務呢?
網絡層具有三個主要組件: IP協議、因特網控制報文協議、因特網路由選擇協議。通過這些組件,網絡層可以復雜的網絡網中尋找到最合適的路徑,將分組從源主機移動到目的主機。
下面將通過具體介紹這三大組件,來介紹網絡層。

IPv4:
首部檢驗和的計算:
將首部中每兩個字節作為一個數,用反碼運算對這些數字求和,該和的反碼存放在檢驗和字段,被稱為因特網檢驗和。如果數據報首部中攜帶的檢驗和與計算所得不一致,則
認為檢測出現差錯。
我們可能會疑惑,為什么運輸層和網絡層都執行了差錯檢驗?其原因是:
網絡層只對IP首部計算檢驗和,而運輸層是對整個報文段計算的。TCP/UDP與IP不一定必須屬於同一個協議棧,即TCP不一定運行在IP上
IP數據報分片:在鏈路層中我們會看見,並非所有的鏈路層協議都可以承載相同長度的數據
報,它們的最大承載能力各不相同,即一個鏈路層幀能承載的最大數據量 MTU最大傳送單元
當數據報過大時,會將數據報中的數據分片,成為多個更小的數據報然后用幀封裝這些較小
的數據報。這些較小的數據報被稱為 片。在它們達到目的地運輸層前需要重新組裝。分片雖
然在將許多完全不同的鏈路層技術粘合起來的過程中起到了重要作用,但分片也需要開銷。
一些名詞解釋:
子網:互聯某些主機與一個路由器接口的網絡形成一個子網
子網掩碼:IP編址為子網分配一個地址,如:223.1.1.0/24 其中/24記法有時稱為子網
掩碼,指示了32比特中左側24比特定義的子網地址,然和要連接到223.1.1.0/24的網絡
主機地址都是 233.1.1.xxx的形式
因特網地址分配策略被稱為 無類別域間路由選擇CIDR
IP地址是由因特網名字和編號分配機構 ICANN管理分配,而一台主機的IP地址通常由 動態主
機配置協議DHCP來配置。 DHCP具有將一個主機連接進一個網絡的網絡相關方面的自動能力
子網:互聯某些主機與一個路由器接口的網絡形成一個子網
子網掩碼:IP編址為子網分配一個地址,如:223.1.1.0/24 其中/24記法有時稱為子網
掩碼,指示了32比特中左側24比特定義的子網地址,然和要連接到223.1.1.0/24的網絡
主機地址都是 233.1.1.xxx的形式
因特網地址分配策略被稱為 無類別域間路由選擇CIDR
IP地址是由因特網名字和編號分配機構 ICANN管理分配,而一台主機的IP地址通常由 動態主
機配置協議DHCP來配置。 DHCP具有將一個主機連接進一個網絡的網絡相關方面的自動能力
管理IP地址的典型方法:
網絡地址轉換NAT
NAT能使路由器 對於外部世界看起來像一個單一IP的單一設備, 使路由器對外界隱藏內部網
絡的細節。所有離開此內部網絡的報文與進入此網絡的報文都有一個相同的源地址與目的地
址,NAT路由器通過使用一張 NAT轉換表來區分內部網絡中的各個主機,轉換表包含端口號與
其IP地址。NAT轉換表與某台主機中端口號與進程ID號對照表類似。
NAT能使路由器 對於外部世界看起來像一個單一IP的單一設備, 使路由器對外界隱藏內部網
絡的細節。所有離開此內部網絡的報文與進入此網絡的報文都有一個相同的源地址與目的地
址,NAT路由器通過使用一張 NAT轉換表來區分內部網絡中的各個主機,轉換表包含端口號與
其IP地址。NAT轉換表與某台主機中端口號與進程ID號對照表類似。
NAT雖然得到廣泛應用,但很多人反對NAT,原因如下:
1.端口號是用於進程編址,而不是主機編址
2.路由器通常僅應當處理高達第三層的分組
3.主機應彼此直接對話,結點不應該介入修改IP地址與端口號
4.應該使用IPv6來解決IP地址不足的問題
NAT的另一個問題是 妨礙了P2P應用程序, 使得在某個NAT下的主機無法與另一個主機建立對
等方發起的一條TCP連接。
1.端口號是用於進程編址,而不是主機編址
2.路由器通常僅應當處理高達第三層的分組
3.主機應彼此直接對話,結點不應該介入修改IP地址與端口號
4.應該使用IPv6來解決IP地址不足的問題
NAT的另一個問題是 妨礙了P2P應用程序, 使得在某個NAT下的主機無法與另一個主機建立對
等方發起的一條TCP連接。
UPnP:允許外部主機使用TCP或UDP向NAT化的主機發起通信會話。
IPv6:
為什么開發IPv6?
由於新的子網與IP結點以驚人的速度增長,32比特的IP地址空間即將耗盡,為了應對這種對大IP地址空間的需求,開發的一種新的IP協議,IPv6。設計者利用這次機會,在IPv4的基礎
上還強化了協議的其他部分。
相對於IPv4,IPv6的重要變化:
擴大的地址容量:將IP地址長度從32比特增加到128比特, 確保全世界幾乎用不完所有IP地址。IPv6還引入任播地址的新型地址,這種地址可以使數據報交付給一組分組中的任意一個
采用高效的40字節首部:許多IPv4字段被舍棄或作為選項,使得數據報處理更加迅速。
流標簽與優先級:給屬於特殊流的分組加上標簽,表示這些流需要被特殊處理。
IPv6不允許在中間路由器上進行分片與重新組裝:這種操作只能在源與目的地進行。如果數
據報過大而無法轉發到鏈路上,路由器只需要丟棄該數據報,並向發送方發送一個分組太大
的ICMP差錯報文。分片與重新組裝十分耗時,將該功能從路由器刪除並放在端系統中,大大
加快了網絡中的IP轉發速度。
據報過大而無法轉發到鏈路上,路由器只需要丟棄該數據報,並向發送方發送一個分組太大
的ICMP差錯報文。分片與重新組裝十分耗時,將該功能從路由器刪除並放在端系統中,大大
加快了網絡中的IP轉發速度。
去除首部檢驗和:運輸層與鏈路層都有相似功能,在IP層采用此功能有些多余,IP層關注的
重點是快速處理IP分組。
重點是快速處理IP分組。
選項:選項字段不在時標准IP首部的一部分了,使得IP首部稱為定長40字節,但選項並沒有
消失,而是可能出現在下一個首部指出的位置。
消失,而是可能出現在下一個首部指出的位置。
如何將基於IPv4的網絡遷移到到IPv6呢?下面將介紹幾種遷移的方法與其可行性分析:
1.宣布一個標志日,即指定某個時間點,屆時所有的機器都關機並升級為IPv6,就像當初從
使用NCP遷移到使用TCP一樣。但這幾乎是不可行的,因為此時面對如此大規模的機器與用戶
的標志日根本不可能發生。
使用NCP遷移到使用TCP一樣。但這幾乎是不可行的,因為此時面對如此大規模的機器與用戶
的標志日根本不可能發生。
2.雙棧的方法:即使用該方法的IPv6節點還具有IPv4的完整實現,如果發送方與接收方任意
一個是僅IPv4可用時,則必須使用IPv4數據報。
一個是僅IPv4可用時,則必須使用IPv4數據報。
3.建隧道:我們將兩台IPv6路由器之間的中間IPv4路由器的集合稱為一個隧道,隧道中間的
路由器將傳送的IPv6數據當做一個有效載荷,並將其放入一個IPv4數據報在隧道中傳送。
路由器將傳送的IPv6數據當做一個有效載荷,並將其放入一個IPv4數據報在隧道中傳送。
因特網控制報文協議ICMP:
ICMP被主機和路由器用來彼此溝通網絡層的信息。ICMP通常被認為是IP的一部分,但從體系結構上看,它是位於IP之上的,因為ICMP報文時承載在IP分組中。
ICMP報文類型:

因特網路由選擇協議:
網絡層最根本的目的是將分組在復雜的網絡中從源傳送到目的地,而這一過程很大程度上依賴於 路由選擇,它決定了數據報從源到目的地所流經的路徑。
在介紹路由選擇之前,我們先區分一下兩個概念:
轉發:當一個分組達到路由器的某個輸入鏈路時,路由器將其移動到合適的輸出鏈路的
過程稱為轉發。
路由選擇:路由選擇是當分組從發送方到接收方時,網絡層選取的整個的分組移動路徑
轉發:當一個分組達到路由器的某個輸入鏈路時,路由器將其移動到合適的輸出鏈路的
過程稱為轉發。
路由選擇:路由選擇是當分組從發送方到接收方時,網絡層選取的整個的分組移動路徑
在選擇分組從源到目的地主機的路徑時,會依據某些路由選擇算法,下面將介紹這些算法。
根據算法是全局式還是分散式分類:
全局式路由選擇算法:用完整的、全局性的網絡知識計算出源到目的地之間的最低費用分散式路由選擇算法:以迭代、分布式的方式計算出最低費用路徑
根據算法是靜態的還是動態的分類:
靜態路由選擇算法:路由的變化隨時間的流逝改變的很慢,通常是人工干預調整轉發表動態路由選擇算法:當網絡流量負載或拓撲發生變化時改變路由選擇路徑
根據算法是負載敏感還是負載遲鈍分類:
負載敏感算法:鏈路費用動態的變化來反映底層鏈路的擁塞程度負載遲鈍算法:某條鏈路的費用不明顯的反映當前擁塞水平
鏈路狀態算法 LS:屬於全局式路由算法,整個網絡狀態已知,作為LS算法的輸入。而整個鏈
路狀態通過鏈路狀態廣播算法來完成。
隨着互聯網規模的擴大,單純的將網絡看做路由器的集合變得不再可行,因為此時涉及的路
由器數目變得龐大,涉及路由選擇算法計算的開銷將大到無法實現。並且可能一組路由器屬
於某個機構,該機構希望在內部使用自己的路由選擇算法的同時還與外部相連。為了解決這
些問題,我們將路由器組織進 自治系統AS。在AS內運行的路由選擇算法叫做 自治系統內部路
由選擇協議。而為了將AS與外界相連,AS中將會有一個或多個路由器負責在AS與外界之間轉
發分組,這些路由器稱為 網關路由器。
由器數目變得龐大,涉及路由選擇算法計算的開銷將大到無法實現。並且可能一組路由器屬
於某個機構,該機構希望在內部使用自己的路由選擇算法的同時還與外部相連。為了解決這
些問題,我們將路由器組織進 自治系統AS。在AS內運行的路由選擇算法叫做 自治系統內部路
由選擇協議。而為了將AS與外界相連,AS中將會有一個或多個路由器負責在AS與外界之間轉
發分組,這些路由器稱為 網關路由器。
自治系統之間的路由選擇:
跨越多個AS之間源與目的地之間的路徑確定是邊界網關協議BGP。廣播與多播路由選擇:
廣播路由選擇:從一個源結點向網絡中的所有其他結點的分組交付多播路由選擇:從一個源結點向其他網絡結點的一個子集發送分組的副本
廣播路由選擇算法:
N次單播:由源結點產生N的分組副本,對不同目的地的每個副本進行編址,再用單播路由選擇對每個目的地發送分組。
缺點:效率低、為了得知每個目的地的地址將需要更大的開銷、我們的目的是廣播
而實際卻是使用單播
實現廣播的方式:
無控制洪泛:要求源結點向所有鄰居發送副本,這種方法的致命缺點是路由圖可能存在圈的情況,此時分組將會在圈內無休止的循環。
受控洪泛
生成樹廣播
多播面對的問題:如何標識接收方、如何為發送到接收方的分組編址
為了解決上述問題,多播數據報使用間接編址,使用一個標識來表示一組接收方多播路由選擇算法:
使用一顆組共享樹的多播路由選擇使用一顆基於源的樹的多播路由選擇