計算機網路之網路層

Java伴我餘生發表於2020-06-09

網路層概述

  網路層的目的是實現兩個端系統之間的資料透明傳送,具體功能包括定址和路由選擇、連線的建立、保持和終止等。它提供的服務使傳輸層不需要了解網路中的資料傳輸和交換技術。如果您想用盡量少的詞來記住網路層,那就是"路徑選擇、路由及邏輯定址"。

  網路層中涉及眾多的協議,其中包括最重要的協議,也是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裝置在網路層中傳輸資料的過程如下:

  1. A發出目的地為C的IP資料包,查詢路由表發現下一跳為E
  2. A將資料包傳送給E
  3. E查詢路由表發現下一跳為F,將資料包傳送給F
  4. F查詢路由表發現目的地C直接連線,將資料包傳送給C

現在結合資料鏈路層和網路層,再來看一下跨裝置傳輸資料的過程:

  1. A發出目的地為C的IP資料包,查詢路由表發現下一跳為E
  2. A將IP資料包交給資料鏈路層,並告知目的MAC地址是E
  3. 資料鏈路層填充源MAC地址A目的MAC地址E
  4. 資料鏈路層通過物理層將資料傳送給E
  5. E的資料鏈路層接收到資料幀,把幀資料交給網路層
  6. E查詢路由表,發現下一跳為F
  7. E把資料包交給資料鏈路層,並告知目的MAC地址為F
  8. E的資料鏈路層封裝資料幀併傳送
  9. F的資料鏈路層接收到資料幀,把幀資料交給網路層
  10. F查詢路由表,發現下一跳為C
  11. F把資料包交給資料鏈路層,並告知目的MAC地址為C
  12. 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命令進行簡單的網路故障排查:

  1. ping本地迴環地址,一般情況下,都會得到返回的,如果得不到返回,則說明你的計算機的協議棧出現了問題,這個時候就可能需要重灌系統,或者是重新安裝這個協議棧
  2. ping閘道器地址,即路由器地址,如果能得到返回的話,則說明本機到路由器的通路是通的,如果沒有返回的話,則說明你的wifi,或者你的網線連線是有問題的
  3. 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協議的過程

  1. 路由器初始化路由資訊(兩個向量\(D_i\)\(S_i\))
  2. 對相鄰路由器X發過來的資訊,對資訊的內容進行修改(下一跳地址設定為X,所有距離加1)
    1. 檢索本地路由,將資訊中新的路由插入到路由表裡面
    2. 檢索本地路由,對於下一跳為X的,更新為修改後的資訊
    3. 檢索本地路由,對比相同目的的距離,如果新資訊的距離更小,則更新本地路由表
  3. 如果3分鐘沒有收到相鄰的路由資訊,則把相鄰路由設定為不可達(16跳)

RIP協議的優缺點:

  • 優點:實現簡單,開銷很小。
  • 缺點:故障資訊傳遞慢。也就是隨便相信“隔壁老王”,“自己不思考” “視野不夠”。因為RIP協議每一個路由器它只看到相鄰路由器的資訊,而看不到更遠的路由器資訊,這也限制了網路的規模。

內部閘道器路由協議之OSPF協議

鏈路狀態(LS)協議

  鏈路狀態(LS)協議:向所有的路由器傳送訊息,也就是一傳十、十傳百,只和相鄰的路由器交換資訊。訊息描述該路由器與相鄰路由器的鏈路狀態,每隔30s交換路由資訊,只有鏈路狀態發生變化時,才傳送更新資訊。

Dijkstra(迪傑斯特拉)演算法

  Dijkstra演算法是著名的圖演算法,Dijkstra演算法解決有權圖從一個節點到其他節點的最短路徑問題,“以起始點為中心,向外層層擴充套件”。

Dijkstra(迪傑斯特拉)演算法定義:

  1. 初始化兩個集合(S, U)(S為只有初始頂點點A的集合,U為其他頂點集合)
  2. 如果U不為空, 對U集合頂點進行距離的排序,並取出距離A最近的一個頂點D
    i. 將頂點D的納入S集合
    ii. 更新通過頂點D到達U集合所有點的距離(如果距離更小則更新,否則不更新)
    iii. 重複2步驟
  3. 直到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開放式最短路徑優先,底層是迪傑斯特拉演算法,是鏈路狀態路由選擇協議,它選擇路由的度量標準是頻寬,延遲。

相關文章