網路層概述
網路層的目的是實現兩個端系統之間的資料透明傳送,具體功能包括定址和路由選擇、連線的建立、保持和終止等。它提供的服務使傳輸層不需要了解網路中的資料傳輸和交換技術。如果您想用盡量少的詞來記住網路層,那就是"路徑選擇、路由及邏輯定址"。
網路層中涉及眾多的協議,其中包括最重要的協議,也是TCP/IP的核心協議——IP協議。IP協議非常簡單,僅僅提供不可靠、無連線的傳送服務。IP協議的主要功能有:無連線資料包傳輸、資料包路由選擇和差錯控制。與IP協議配套使用實現其功能的還有地址解析協議ARP、逆地址解析協議RARP、因特網報文協議ICMP、因特網組管理協議IGMP。
IP協議詳解
虛擬互連網路
實際的計算機網路是錯綜複雜的,物理裝置通過使用IP協議,遮蔽了物理網路之間的差異,當網路中的主機使用IP協議連線時,則無需關注網路細節。IP協議使得複雜的實際網路變為一個虛擬互連的網路,還使得網路層可以遮蔽底層細節而專注網路層的資料轉發,IP協議解決了在虛擬網路中資料包傳輸路徑的問題。
IP地址長度為32位,常分成4個8位,IP地址常使用點分十進位制來表示(0~255.0~255.0~255.0~255),也就是共有\(2^{32} = 4294961296\)個IP地址。下圖是IP協議的格式:
我們來看看IP協議的首部:
4位版本 | 4位首部長度 | 8位服務型別(TOS) | 16位總長度(位元組) | ||||
16位標識 | 3位標誌 | 13位片偏移 | |||||
8位生存時間(TTL) | 8位協議 | 16位首部校驗和 | |||||
32位源IP地址 | |||||||
32位目的IP地址 | |||||||
選項options(若有) | |||||||
IP資料 |
版本:佔4位,指的是IP協議的版本,通訊雙方的版本必須一致,當前主流版本是4,即IPv4,也有IPv6
首部位長度:佔4位,最大數值為15,表示的是IP首部長度,單位是“32位字”(4個位元組),也即是IP首部最大長度為60位元組
總長度:佔16位,最大數值為65535,表示的是IP資料包總長度(IP首部+IP資料)
TTL:佔8位,表明IP資料包文在網路中的壽命,每經過一個裝置,TTL減1,當TTL=0時,網路裝置必須丟棄該報文。作用:避免資料在網路中無限傳輸,當這個網路報文找不到目的機器時,而進行無限傳輸,來浪費頻寬資源
協議:佔8位,表明IP資料所攜帶的具體資料是什麼協議的(如:TCP、UDP等)
協議名 | ICMP | IGMP | IP | TCP | UDP | OSPF | … |
---|---|---|---|---|---|---|---|
欄位值 | 1 | 2 | 4 | 6 | 17 | 89 | … |
首部校驗和:佔16位,校驗IP首部是否有出錯
IP協議的轉發流程
在資料鏈路層的學習中我們知道了MAC地址表,由於IP協議的轉發是通過逐跳(hop-by-hop)來實現的,所以在網路層中,存在一個類似於MAC地址表的路由表,路由表是儲存的目的IP地址和下一跳IP地址的對映,計算機或者路由器都擁有路由表。路由表如下:
目的IP地址 | 下一跳IP地址 |
---|---|
IP1 | IP4 |
IP2 | IP5 |
IP3 | IP6 |
… | … |
A裝置是如何跨裝置將資料傳送給C裝置的呢?
A裝置向C裝置在網路層中傳輸資料的過程如下:
- A發出目的地為C的IP資料包,查詢路由表發現下一跳為E
- A將資料包傳送給E
- E查詢路由表發現下一跳為F,將資料包傳送給F
- F查詢路由表發現目的地C直接連線,將資料包傳送給C
現在結合資料鏈路層和網路層,再來看一下跨裝置傳輸資料的過程:
- A發出目的地為C的IP資料包,查詢路由表發現下一跳為E
- A將IP資料包交給資料鏈路層,並告知目的MAC地址是E
- 資料鏈路層填充源MAC地址A和目的MAC地址E
- 資料鏈路層通過物理層將資料傳送給E
- E的資料鏈路層接收到資料幀,把幀資料交給網路層
- E查詢路由表,發現下一跳為F
- E把資料包交給資料鏈路層,並告知目的MAC地址為F
- E的資料鏈路層封裝資料幀併傳送
- F的資料鏈路層接收到資料幀,把幀資料交給網路層
- F查詢路由表,發現下一跳為C
- F把資料包交給資料鏈路層,並告知目的MAC地址為C
- F的資料鏈路層F封裝資料幀併傳送
從IP協議的轉發流程中我們可以看到:資料幀每一跳的MAC地址都在變化,但IP資料包每一跳的IP地址始終不變。但我們會發現一個問題,在網路層中將資料包交給資料鏈路層,並且需要告知目的MAC地址,但是在網路層中只知道IP地址,我們是如何知道目的MAC地址的呢?這就是ARP協議做的事情了。
ARP協議
ARP(Address Resolution Protocol)地址解析協議,將網路層中的32位IP地址,通過ARP協議解析為資料鏈路層中的48位MAC地址。這個對映關係是儲存在ARP快取表中的。arp -a命令:檢視ARP快取表
IP地址 | MAC地址 |
---|---|
192.168.83.254 | 00-50-56-e0-33-40 |
192.168.83.255 | 01-00-5e-00-00-16 |
224.0.0.251 | 01-00-5e-00-00-fc |
239.1.2.3 | 01-00-5e-40-98-8f |
255.255.255.255 | 01-00-5e-7f-ff-fa |
ARP快取表是ARP協議和RARP協議執行的關鍵,ARP快取表快取了IP地址到硬體地址之間的對映關係,ARP快取表中的記錄並不是永久有效的,有一定的期限。這是因為當你的網路裝置,換個網路環境,網路裝置的IP地址就可能會發生改變,ARP快取表中的原來的記錄就失效了。當ARP快取表中有對映關係,就直接查詢ARP快取表;如果沒有這個對映關係,ARP協議就會廣播,並記錄回應得地址資訊。
RARP(Reverse Address Resolution Protocol)逆地址解析協議,其作用與ARP協議相反,即把資料鏈路層中48位MAC地址,解析位網路層中的32位IP地址。(R)ARP協議是TCP/IP協議棧裡面基礎的協議,ARP和RARP的操作對程式設計師是透明的,理解(R)ARP協議有助於理解網路分層的細節。
IP地址的子網劃分
分類的IP地址
最小網路號 | 最大網路號 | 子網數量 | 最小主機號 | 最大主機號 | 主機數量 | |
---|---|---|---|---|---|---|
A | 0(00000000) | 127(01111111) | \(2^7\) | 0.0.0 | 255.255.255 | \(2^{24}\) |
B | 128.0 | 191.255 | \(2^{14}\) | 0.0 | 255.255 | \(2^{16}\) |
C | 192.0.0 | 223.255.255 | \(2^{21}\) | 0 | 255 | \(2^{8}\) |
特殊的主機號:主機號全0表示當前網路段,不可分配為特定主機;主機號為全1表示廣播地址,向當前網路段所有主機發訊息
- A類地址網路段全0(00000000)表示特殊網路
- A類地址網路段後7位全1(01111111:127)表示迴環地址
- B類地址網路段(10000000.00000000:128.0)是不可使用的
- C類地址網路段(192.0.0)是不可使用的
實際可使用各類IP地址如下:
最小網路號 | 最大網路號 | 子網數量 | 最小主機號 | 最大主機號 | 主機數量 | |
---|---|---|---|---|---|---|
A | 1 | 127(01111111) | \(2^7\)-2 | 0.0.1 | 255.255.254 | \(2^{24}\)-2 |
B | 128.1 | 191.255 | \(2^{14}\)-1 | 0.1 | 255.254 | \(2^{16}\)-2 |
C | 192.0.1 | 223.255.255 | \(2^{21}\)-1 | 1 | 254 | \(2^{8}\)-2 |
127.0.0.1,通常被稱為本地迴環地址(Loopback Address),不屬於任何一個有類別地址類。它代表裝置的本地虛擬介面,所以預設被看作是永遠不會宕掉的介面。在Windows作業系統中也有相似的定義,所以通常在安裝網路卡前就可以ping通這個本地迴環地址。一般都會用來檢查本地網路協議、基本資料介面等是否正常的。
劃分子網
隨著互連網應用的不斷擴大,原先的IPv4的弊端也逐漸暴露出來,即網路號佔位太多,而主機號位太少,所以其能提供的主機地址也越來越稀缺,目前除了使用NAT在企業內部利用保留地址自行分配以外,通常都對一個高類別的IP地址進行再劃分,以形成多個子網,提供給不同規模的使用者群使用。這裡主要是為了在網路分段情況下有效地利用IP地址,通過對主機號的高位部分取作為子網號,從通常的網路位界限中擴充套件或壓縮子網掩碼,用來建立某類地址的更多子網。但建立更多的子網時,在每個子網上的可用主機地址數目會比原先減少。
上圖就把原來的C類地址劃分成了兩個子網。
但子網號這麼多,有沒有辦法快速判斷某個IP的網路號?這就是子網掩碼的作用了,子網掩碼是標誌兩個IP地址是否同屬於一個子網的,也是32位二進位制地址,其每一個為1代表該位是網路位,為0代表主機位。它和IP地址一樣也是使用點式十進位制來表示的。如果兩個IP地址在子網掩碼的按位與的計算下所得結果相同,即表明它們共屬於同一子網中。
子網掩碼由連續的1和連續的0組成,某一個子網的子網掩碼具備網路號位數個連續的1
在計運算元網掩碼時,我們要注意IP地址中的保留地址,即" 0"地址和廣播地址,它們是指主機地址或網路地址全為" 0"或" 1"時的IP地址,它們代表著本網路地址和廣播地址,一般是不能被計算在內的。
無分類編址CIDR
CIDR中沒有A、B、C類網路號、和子網劃分的概念,CIDR將網路字首相同的IP地址稱為一個“CIDR地址塊”,注意網路字首是任意位數的。
網路字首 | 主機號 |
---|
斜線記法:193.10.10.129/25 使用二進位制表示:11000001.00001010.00001010.10000001
無分類地址CIDR相比原來的子網劃分更加 靈活:
CIDR字首長度 | 掩碼點分十進位制 | 地址數 |
---|---|---|
/13 | 255.248.0.0 | 512K |
/14 | 255.252.0.0 | 256K |
/15 | 255.254.0.0 | 128K |
/16 | 255.255.0.0 | 64K |
/17 | 255.255.128.0 | 32K |
/18 | 255.255.192.0 | 16K |
/19 | 255.255.224.0 | 8K |
網路地址轉換NAT技術
IPv4最多隻有40+億個IP地址,早期IP地址的不合理規劃導致IP號浪費。在介紹NAT技術之前,首先要知道內網地址和外網地址。
- 內網地址:內部機構使用,避免與外網地址重複。三類內網地址如下:
- 10.0.0.0~10.255.255.255(支援千萬數量級裝置)
- 172.16.0.0~172.31.255.255(支援百萬數量級裝置)
- 192.168.0.0~192.168.255.255(支援萬數量級裝置)
- 外網地址:全球範圍使用,全球公網唯一
網路地址轉換技術是發生在本地路由器的,主要功能就是把內網的IP地址轉成外網的IP地址來進行外部的通訊,並且在接收到資料之後,再把外網IP地址對映成內網IP地址,轉發到具體的某個裝置上面去。
內網多個裝置使用同一個外網IP請求外網的服務,外部怎麼知道具體是哪個裝置在請求的?網路地址轉換NAT的英文全稱是Network Address Translation,NAT技術用於多個主機通過一個公有IP訪問網際網路的私有網路中,外部主要是通過埠號來區分到底是內網的哪一個裝置進行請求的,這其中有一個NA(P)T表表:示例如下:
方向 | 舊的地址和埠號 | 新的地址與埠號 |
---|---|---|
出 | 192.168.2.11:6666 | 173.21.59.10:16666 |
出 | 192.168.2.10:7777 | 173.21.59.10:17777 |
入 | 173.21.59.10:16666 | 192.168.2.11:6666 |
入 | 173.21.59.10:17777 | 192.168.2.10:7777 |
NAT減緩了IP地址的消耗,但是增加了網路通訊的複雜度
ICMP協議
ICMP協議全稱是網際控制報文協議(Internet Control Message Protocol),ICMP協議可以報告錯誤資訊或者異常情況
ICMP協議首部:
8位型別 | 8位程式碼 | 16位校驗和 |
ICMP報文資料 |
ICMP報文分為:差錯報告報文和詢問報文:
ICMP報文種類 | 型別的值 | 報文型別 | 具體程式碼 |
差錯報告報文 | 3(終點不可達) | 網路不可達 | 0 |
主機不可達 | 1 | ||
5(重定向) | 對網路重定向 | 0 | |
對主機重定向 | 1 | ||
11 | 傳輸超時 | - | |
12 | 壞的IP頭 | 0 | |
缺少其他必要引數 | 1 | ||
詢問報文 | 0或8 | 回送(Echo)請求或應答 | - |
13或14 | 時間戳(Timestamp)請求或應答 | - |
ICMP協議的應用
ping應用:我們可以通過ping命令進行簡單的網路故障排查:
- ping本地迴環地址,一般情況下,都會得到返回的,如果得不到返回,則說明你的計算機的協議棧出現了問題,這個時候就可能需要重灌系統,或者是重新安裝這個協議棧
- ping閘道器地址,即路由器地址,如果能得到返回的話,則說明本機到路由器的通路是通的,如果沒有返回的話,則說明你的wifi,或者你的網線連線是有問題的
- ping遠端地址,如果不通的話,則說明你的家到ISP之間的網路是故障的,此時就需要聯絡網路服務商(移動、電信、聯通)進行排查。
Traceroute應用:Traceroute可以探測IP資料包在網路中走過的路徑
路由概述
思考:路由表中的下一跳地址是怎麼來的?下一跳地址是唯一的嗎?下一跳地址是最佳的嗎?路由器怎麼多,他們是怎麼協同工作的?為了解決這些問題,路由表需要一個好的演算法去解決這些事情。路由演算法實際上是圖論的演算法,由於網路環境複雜,使得路由演算法要比圖論的演算法更復雜。
由於網際網路的規模是非常大的,網際網路環境是非常複雜的,所以我們需要對網際網路進行劃分。自治系統(Autonomous System)是指處於一個管理機構下的網路裝置群,AS內部網路自行管理,AS對外提供一個或者多個出(入)口。自治系統內部路由的協議稱為:內部閘道器協議(RIP、OSPF), 自治系統外部路由的協議稱為:外部閘道器協議(BGP)。
路由演算法
路由演算法的本質是距離向量(DV)演算法, 距離向量(DV)演算法介紹如下:
- 每一個節點使用兩個向量\(D_i\)和\(S_i\)
- \(D_i\)描述的是當前節點到別的節點的距離
- \(S_i\)描述的是當前節點到別的節點的下一節點
- 每一個節點與相鄰的節點交換向量\(D_i\)和\(S_i\)的資訊
- 每一個節點根據交換的資訊更新自己的節點資訊
現在假設有A的距離向量資訊,收到的距離向量資訊如下圖:
A通過B到各個節點得距離向量資訊如下:
A通過C到各個節點得距離向量:並更新下一條的節點
A通過D到各個節點得距離向量:並更新下一條的節點
A通過F到各個節點得距離向量:並更新下一條的節點
RIP協議
RIP(Routing Information Protocol)協議,RIP協議是使用DV演算法的一種路由協議。RIP協議把網路的跳數(hop)作為DV演算法的距離,每隔30s交換一次路由資訊,認為跳數>15的路由則為不可達路由。
RIP協議的過程
- 路由器初始化路由資訊(兩個向量\(D_i\)和\(S_i\))
- 對相鄰路由器X發過來的資訊,對資訊的內容進行修改(下一跳地址設定為X,所有距離加1)
- 檢索本地路由,將資訊中新的路由插入到路由表裡面
- 檢索本地路由,對於下一跳為X的,更新為修改後的資訊
- 檢索本地路由,對比相同目的的距離,如果新資訊的距離更小,則更新本地路由表
- 如果3分鐘沒有收到相鄰的路由資訊,則把相鄰路由設定為不可達(16跳)
RIP協議的優缺點:
- 優點:實現簡單,開銷很小。
- 缺點:故障資訊傳遞慢。也就是隨便相信“隔壁老王”,“自己不思考” “視野不夠”。因為RIP協議每一個路由器它只看到相鄰路由器的資訊,而看不到更遠的路由器資訊,這也限制了網路的規模。
內部閘道器路由協議之OSPF協議
鏈路狀態(LS)協議
鏈路狀態(LS)協議:向所有的路由器傳送訊息,也就是一傳十、十傳百,只和相鄰的路由器交換資訊。訊息描述該路由器與相鄰路由器的鏈路狀態,每隔30s交換路由資訊,只有鏈路狀態發生變化時,才傳送更新資訊。
Dijkstra(迪傑斯特拉)演算法
Dijkstra演算法是著名的圖演算法,Dijkstra演算法解決有權圖從一個節點到其他節點的最短路徑問題,“以起始點為中心,向外層層擴充套件”。
Dijkstra(迪傑斯特拉)演算法定義:
- 初始化兩個集合(S, U)(S為只有初始頂點點A的集合,U為其他頂點集合)
- 如果U不為空, 對U集合頂點進行距離的排序,並取出距離A最近的一個頂點D
i. 將頂點D的納入S集合
ii. 更新通過頂點D到達U集合所有點的距離(如果距離更小則更新,否則不更新)
iii. 重複2步驟 - 直到U集合為空,演算法完成
OSPF協議的過程
OSPF(Open Shortest Path First:開放最短路徑優先),OSPF協議的核心是Dijkstra演算法。OSPF協議的過程:路由器接入網路,路由器向鄰居發出問候資訊,與鄰居交流鏈路狀態資料庫,廣播和更新未知路由。
RIP協議 | OSPF協議 |
---|---|
從鄰居看網路 | 整個網路的拓撲 |
在路由器之間累加距離 | Dijkstra演算法計算最短路徑 |
頻繁、週期更新,收斂很慢 | 狀態變化更新,收斂很快 |
路由間拷貝路由資訊 | 路由間傳遞鏈路狀態,自行計算路徑 |
外部閘道器路由協議之BGP協議
BGP(Border Gateway Protocol: 邊際閘道器協議),BGP協議是執行在AS之間的一種協議。由於網際網路的規模很大,AS內部使用不同的路由協議。
AS之間需要考慮除網路特性以外的一些因素(政治、安全…),BGP(Border Gateway Protocol,邊界閘道器協議),BGP協議能夠找到一條到達目的比較好的路由,AS之間通過BGP發言人來進行路由資訊的交換。BGP發言人(speaker):BGP並不關心內部網路拓撲,AS之間通過BGP發言人交流資訊,BGP Speaker可以人為配置策略。
總結:網路層負責對子網間的資料包進行路由選擇。此外,網路層還可以實現擁塞控制、網際互連等功能;網路層的基本資料單位為IP資料包;包含的主要協議:IP協議(Internet Protocol,因特網互聯協議)、ICMP協議(Internet Control Message Protocol,因特網控制報文協議)、ARP協議(Address Resolution Protocol,地址解析協議)以及RARP協議(Reverse Address Resolution Protocol,逆地址解析協議)。網路層重要的裝置是路由器。常見的路由選擇協議有:RIP協議、OSPF協議。RIP協議 :底層是貝爾曼福特演算法,它選擇路由的度量標準(metric)是跳數,最大跳數是15跳,如果大於15跳,它就會丟棄資料包;OSPF協議 :Open Shortest Path First開放式最短路徑優先,底層是迪傑斯特拉演算法,是鏈路狀態路由選擇協議,它選擇路由的度量標準是頻寬,延遲。