深入探索 Android 網絡優化(一、網絡築基篇)下

八、網絡層

1、網絡層主要功能

數據路由。

2、IP 協議

1)、IP 協議拆解

虛擬互聯網絡

  • 1)、實際的計算機網絡是錯綜複雜的。

  • 2)、物理設備通過使用 IP 協議,屏蔽了物理網絡之間的差異。

  • 3)、當網絡中的主機使用 IP 協議連接時,則無需關注網絡細節。

計算機 A 與 B 之間的數據通信可以認爲是通過一個虛擬的互連網絡進行傳輸的。

IP 協議的作用

  • 1)、IP 協議 「使得複雜的實際網絡變爲一個虛擬互連的網絡」

  • 2)、IP 協議 「使得網絡層可以屏蔽底層細節而專注網絡層的數據轉發」

  • 3)、IP 協議 「解決了在虛擬網絡中數據報傳輸路徑的問題」

IP 地址

「每一個唯一的網絡設備都有一個唯一的 IP 地址。不同於 MAC 地址是不可改變的,IP 地址會根據當前設備所連接的網絡環境的變化而發生變化」

例如一個 IP 地址:192.168.11.11 => 11000000.10101000.00001011.00001011

特點

  • IP 地址長度爲 32位,常分爲4個8位。

  • IP 地址常使用點分十進制來表示,即 0~255.0~255.0~255.0~255。

  • IP 地址最多有 2 ^ 32 = 4294961296 => 42 億。

IP 數據報 = IP 首部 + IP 數據報的數據,「IP 數據報的報文格式」 如下所示:

版本

佔4位,指的是 IP 協議的版本,通信雙方的版本必須一致,當前主流版本是4,即 IPv4,也有 IPv6。

首部位長度

佔4位,最大數值爲15,表示的是 IP 首部長度,單位是 32位字(4個字節)。所以 IP 首部的 「最大長度爲 15 * 4 = 60字節」

服務類型(TOS)

表示當前的數據包是高優先級的,還是低優先級的。數據包是按照 TOS 被分配到3個波段(band0、band1、band2)裏面的。

總長度

佔16位,最大數值爲65535,表示的是 IP 數據報的總長度(IP 首部 + IP 數據)。

需要注意的是,「數據在數據鏈路層中的傳輸受最大傳輸單元 MTU 的限制,而 MTU 一般爲爲 1500 個字節,如果 IP 數據報的長度高於 MTU 的話,數據鏈路層將會把 IP 數據報進行 分片,即拆分成多個數據幀進行傳輸」

標識

協議內部自身使用,不需要關注。

標誌

佔3位,目前只有兩位是有意義的,「標識是否進行分片」

片偏移

佔 13 位,「如果發生了分片,這裏將會記錄當前的數據幀保存的是第幾個偏移的 IP 數據」

TTL

  • 「佔8位,表明 IP 數據報文在網絡中的壽命,每經過一個設備,TTL 減1,當 TTL = 0時,網絡設備必須丟棄該報文」

  • 「當 IP 報文在網絡中找不到終點的時候,避免 IP 數據在網絡中無限進行傳輸,消耗帶寬」

協議

佔8位,「表明 IP 數據所攜帶的具體數據是什麼協議的」。(例如:TCP、UPD 等等)

協議
ICMP1
IGMP2
IP4
TCP6
UDP17
OSPF89

首部校驗和

「佔16位,校驗 IP 首部是否有錯,接收方在接收了 IP 數據報文之後會進行頭部的校驗,如果出錯會進行丟棄」

源 IP 地址

發送 IP 數據報文的 IP 地址。

目的 IP 地址

數據報到達的 IP 的地址。

2)、IP 協議的轉發流程

逐跳(hop-by-hop)

數據是從目的設備傳輸到下一個網絡1,又從下一個網絡1傳輸到路由器,又從路由器跳到下一個網絡2,所以是一跳一跳,即 hop-by-hop。

路由表

  • 1)、「不同於 MAC 地址表是由一組一組的 MAC 地址與硬件接口組成的,路由表是由一組一組的 目的 IP 地址與 下一跳的 IP 地址組成的」

  • 2)、「計算機或者路由器都擁有路由表」

轉發流程

  • 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 的數據鏈路層封裝數據幀併發送。

MAC 地址與 IP 地址最大的區別

  • 1)、「數據幀每一跳的 MAC 地址都在變化,而IP 數據報每一跳的 IP 地址始終不變」

  • 2)、「IP 地址具有遠程定位功能,而 MAC 地址更像是身份證號,它的唯一性是爲了組網時可以不用擔心不同的網卡在一個網絡裏會產生衝突,從硬件角度保證不同的網卡有不同的標識」

  • 3)、「相比於 IP 地址,MAC 地址的通信範圍比較小,侷限在一個子網裏。例如:從 192.168.0.1/24 訪問 192.168.0.9/24 是可以用 MAC 地址的」

3)、IP 地址的子網劃分

爲什麼要對 IP 地址進行劃分?

因爲規劃和分配 IP 地址非常麻煩。

分類的 IP 地址

組成形式:網絡號 + 主機號

通常有如下三種類型的 IP 地址:

  • 「A 類:首位爲0,網絡號爲 8 位,主機號爲24位」

  • 「B 類:首位爲10,網絡號爲 16 位,主機號爲16位」

  • 「C 類:首位爲110,網絡號爲 24 位,主機號爲8位」

展示圖

特殊的網絡號

  • 「A 類地址網絡段全0(00000000)表示特殊網絡」

  • 「A 類地址網絡段後7位全1(01111111:127)表示迴環地址」

  • 「B 類地址網絡段(10000000.00000000:128.0)是不可使用的」

  • 「C 類地址網絡段(192.0.0)是不可使用的」

特殊的主機號

  • 「主機號全0表示當前網絡段,不可分配爲特定主機。例如:1.0.0.0」

  • 「主機號爲全1表示廣播地址,向當前網絡段所有主機發消息。例如:0.1.11.111」

表格圖

「本地迴環地址(Loopback Address):127.0.0.1,不屬於任何一個有類別地址類。它代表設備的本地虛擬接口,所以默認被看作是永遠不會廢棄的接口。在 Windwos 操作系統中也有相似的定義,所以一般在安裝網卡前就可以 ping 通這個本地迴環地址。一般都會用來檢查本地網絡協議、基本數據接口等是否是正常的」。代碼如下所示:

quchao@quchaodeMacBook-Pro EMC-MBANK-ANDROID % ping 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.068 ms
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.103 ms
64 bytes from 127.0.0.1: icmp_seq=2 ttl=64 time=0.081 ms
64 bytes from 127.0.0.1: icmp_seq=3 ttl=64 time=0.081 ms
複製代碼

分類地址的補充

  • D 類地址:1110.....

  • E 類地址:1111.....

它們都僅用作特殊用途。

劃分子網

某公司擁有256名員工,每人配備一個計算機,請問該公司應該申請哪種網絡段?

分配 B 類地址,但是一個 B 類地址所能容納的主機數量爲 2^16-2,這會造成極大的浪費。爲了解決這個問題,需要劃分子網。

例如:將 193.10.10.0 這個 IP 劃分爲 193.10.10.0 ~ 193.10.10.127 與 193.10.10.128 ~ 193.10.10. 255。

子網這麼多,如何判斷某個 IP 的網絡號?

子網掩碼

「快速地判斷某一個 IP 屬於哪一個子網號,通過 IP & 子網掩碼 = 該 IP 對應的子網號」。子網掩碼的組成特點如下所示:

  • 1)、「與 IP 地址一樣,都是32位」

  • 2)、「由連續的1和連續的0組成」

  • 3)、「某一個子網的子網掩碼具備網絡號位數個連續的1」

例如 A、B、C 類的子網掩碼地址:A類:255.0.0.0,B類:255.255.0.0,C類:255.255.255.0

無分類編址 CIDR

  • 1)、「CIDR 中沒有 A、B、C 類網絡號 和 子網劃分的概念」

  • 2)、「CIDR 將 網絡前綴 相同的 IP 地址稱爲一個 CIDR 地址塊」

  • 3)、「網絡前綴是任意位數的」

  • 4)、「相比原來子網劃分更加靈活」

「CIDR 使用了斜線記法,例如:193.10.10.129/25 表示網絡號爲 25 位,主機號爲 7位」。一般家裏都是使用 /24 的 CIDR,此時整個網絡裏面的第一個地址爲 192.168.0.1,往往就是私網的出口地址。例如:家裏面的電腦連接 WIFI,WIFI 路由器的地址就是 192.168.0.1,而 192.168.0.255 就是廣播地址。

loopback 是什麼?

「即環回接口,通常會被分配到 127.0.0.1 這個地址,它用於本機內部通信,經過內核處理後直接返回,不會再任何網絡中出現」

某公司總共有 200 名員工,需要拆分成兩個部分,每個部分使用一個小型網絡,如何使用 CIDR 進行劃分?

可以使用一個 /24 作爲一箇中型網絡(在 CIDR 中被稱爲超網),旗下有兩個 /25 作爲一個小型網絡(在 CIDR 中被稱爲子網)。

3、ARP 協議與 RARP 協議

在 IP 數據的轉發過程中,A 將 IP 數據報交給數據鏈路層,並告知其目的 MAC 地址是 E。這裏 A 是如何知道目的 MAC 地址是 E 的呢?

1)、ARP(Address Resolution Protocol)地址解析協議

「ARP 協議將網絡層 IP 32位地址轉換爲數據鏈路層 MAC 48位地址」

ARP 緩存池表

「緩存了 IP 地址到硬件地址之間的映射關係。有緩存時直接從緩存中取出即可,沒有緩存時則會和 MAC 地址表獲取地址時使用的廣播形式類似」,即

  • 1)、「E 檢查 MAC 地址表,發現沒有 C 的信息」

  • 2)、「E 將廣播 A 的數據包到除 A 以外的端口」

  • 3)、「E 將收到來自 B、C 的迴應,並將地址記錄」

「ARP 緩存是 ARP 協議和 RARP 協議運行的關鍵。此外,ARP 緩存表中的記錄並不是永久有效的,有一定的期限」

查看 ARP 緩存表

使用 arp -a 命令,如下所示:

quchao@quchaodeMacBook-Pro EMC-MBANK-ANDROID % arp -a
? (22.1.253.254) at 0:10:db:ff:10:0 on en0 ifscope [ethernet]
? (224.0.0.251) at 1:0:5e:0:0:fb on en0 ifscope permanent [ethernet]
? (239.255.255.250) at 1:0:5e:7f:ff:fa on en0 ifscope permanent [ethernet]
複製代碼

ARP 協議

「ARP 協議被直接封裝在了數據鏈路層中的數據幀裏面的」

既然 ARP 協議是直接被封裝在數據鏈路層中的數據幀裏面的,那麼爲什麼它是屬於網絡層的內容?

主要是因爲 「ARP 協議使用到了網絡層的 IP 地址」

ARP 協議內容

2)、RARP(Reverse Address Resolutioni Protocol)逆地址解析協議

  • 1)、「將數據鏈路層 MAC 48位地址轉換爲網絡層 IP 32位地址」

  • 2)、「除了類型 8035 標識爲 RARP 協議,其它內容與 ARP 協議類似」

3)、小結

  • RARP 協議與 ARP 協議是 TCP/IP 協議棧裏面的基礎協議,它們的操作對程序員是透明的。

  • 理解它們有助於我們理解網絡分層的細節。

  • 「它們是協調數據鏈路層和網絡層配合工作的重要協議」

4、網絡地址轉換 NAT(Network Address Translationn) 技術

「不改變 IP 地址的網關,我們稱爲轉發網關;改變 IP 地址的網關,我們稱爲 NAT 網關」

爲什麼要使用 NAT?

  • 1)、「IPv4 最多隻有40+億個 IP 地址」

  • 2)、「早期 IP 地址的不合理規劃導致 IP 號浪費」

1)、內網地址

特點

  • 1)、內部機構使用。

  • 2)、避免與外網地址重複。

三類內網地址

  • 「A 類:10.0.0.0~10.255.255.255(支持千萬數量級設備)」

  • 「B 類:172.16.0.0~172.31.255.255(支持百萬數據級設備)」

  • 「C 類:192.168.0.0~192.168.255.255(支持萬數量級設備)」

對於公司,它可以在外部使用全球唯一的外網 IP 地址,通常在內部使用一個 B 類內網地址即可。

同理,對於家庭可以在外部使用全球唯一的外網 IP 地址,通常在內部使用一個 C 類內網地址即可。

問題:內網的多個設備使用同一個外網 IP 請求外網服務,外部是怎麼樣才能知道是哪一個內網設備請求的呢?

「使用 NAT ,它用於多個主機通過一個公有 IP 訪問互聯網的私有網絡,並減緩了 IP 地址的消耗,但是增加了網絡通信的複雜度」

2)、外網地址

  • 全球範圍使用。

  • 全球公網唯一。

3)、端口映射

例如如下兩個 NAT 轉換過程:發送數據時,A 設備內網地址和端口號 => 外網地址與端口號:192.168.2.11:6666 => 173.21.59.10:16666,B 設備內網地址和端口號 => 外網地址與端口號:192.168.2.10:7777 => 173.21.59.10:17777。

「由於同時轉換了 Port ,即進行了 端口映射,NAT 也可稱爲 NA(P)T」

5、ICMP(Internet Control Message Protocol)協議

1)、ICMP 協議拆解

功能

ICMP 協議主要是用於 「輔助 IP 協議發送與接收數據的,它可以報告錯誤信息或異常情況」

ICMP 報文結構

「ICMP 協議被封裝在 IP 數據報的數據之中,其也分爲 報文首部與報文數據。如果需要使用 ICMP 協議,則需要在 IP 協議首部的8位協議中寫入1,以表明 IP 數據所攜帶的具體數據是 ICMP 協議的」

類型

1、差錯報告報文

差錯報告報文具體分爲 「七種類型」,而 「大部分的報文類型是由類型的值和具體代碼組成的」。具體如下圖所示:

2、詢問報文

詢問報文具體分爲 「兩類」,它僅僅是由 「類型的值」 決定的。具體如下圖所示:

常用的 ping 就是查詢報文,是一種主動請求並且獲得主動應答的 ICMP 查詢報文,如下:

  • ICMP ECHO REQUESTZ「對 ping 的主動請求進行網絡抓包」

  • ICMP ECHO REPLY「主動請求的回覆」

所以,ping 發的包也是符合 ICMP 格式的,僅僅增加了一些自己的格式。如下所示:

  • 1)、「標識符:派出去兩隊偵察兵,一隊是偵查戰況的,一隊是去查找水源的,要有個標識才能區分」

  • 2)、「序號:派出去的偵察兵,都要進行編號,便於知道前線的戰況」

  • 3)、「發送請求時間值:存放在選項數據中,用來計算往返時間和路程的長短」

ping 命令執行時,源主機會構建一個 ICMP 請求數據包,其中有兩個最重要的字段,如下:

  • 1)、「類型:對於請求數據包,此值爲8」

  • 2)、「順序號:區分連續 ping 時發出的多個請求數據包。每發出一個請求數據包,順序號會自動加1」

2)、ICMP 報文的應用

Ping 應用

例如 ping www.wanandorid.com 網站,如下所示:

quchao@quchaodeMacBook-Pro cmmp-core-client-android % ping www.wanandroid.com
PING www.wanandroid.com (47.104.74.169): 56 data bytes
64 bytes from 47.104.74.169: icmp_seq=0 ttl=51 time=51.877 ms
64 bytes from 47.104.74.169: icmp_seq=1 ttl=51 time=52.416 ms
64 bytes from 47.104.74.169: icmp_seq=2 ttl=51 time=48.942 ms
64 bytes from 47.104.74.169: icmp_seq=3 ttl=51 time=45.816 ms
64 bytes from 47.104.74.169: icmp_seq=4 ttl=51 time=48.336 ms
64 bytes from 47.104.74.169: icmp_seq=5 ttl=51 time=42.358 ms
ç64 bytes from 47.104.74.169: icmp_seq=6 ttl=51 time=49.428 ms
64 bytes from 47.104.74.169: icmp_seq=7 ttl=51 time=41.963 ms
複製代碼

使用 Ping 命令對網絡故障進行排查

遇到網絡不通的問題時,除了直接 ping 目標 IP 地址,頭腦中年還應該有一個清晰的網絡拓撲圖,並且需要清楚地知道一個包從源地址傳到目標地址要經過哪些設備,然後逐個 ping 中間的這些設備或機器,通常的排查步驟如下所示:

  • 1)、「ping 迴環地址 127.0.0.1,不通,說明計算機使用的協議棧有問題,需要重裝系統或協議棧」

  • 2)、「Ping 網關地址(路由地址),內網 ping 192.168.0.1/ 192.168.1.1,通,說明本機到路由器的地址是通的。不通,則說明 WIFI、網線是有問題的」

  • 3)、「Ping 遠端地址 ping www.wanandroid.com,不通,則說明家中到 ISP 的網絡之間是有故障的。這個時候就要從電信、聯通、移動等 ISP 來排查問題了」

此外,除了 ping 之外,我們還可以通過 tcpdump -i eth0 icmp「查看發出的包有沒有到達某個點,以及回覆的包到達了哪個點,以便更容易推斷出錯的位置」

ping 不同一定就代表網絡不通嗎?

不是,如果不在我們的控制範圍內,很多中間設備都是禁止 ping 的,但是 ping 不通不代表網絡不通。這個時候就要使用 Telnet,通過其他協議來測試網絡是否暢通。

Traceoute 應用

「用於探測 IP 數據報在網絡中走過的路徑」

在 IP 數據報的首部中,有一個8位的生存時間 TTL,它表示了 IP 數據報文在網絡中的壽命,每經過一個設備,TTL 減1,「當 TTL = 0時,網絡設備必須丟棄該報文,並會發送 ICMP 終點不可達差錯報文」

而 Traceoute 則巧妙地應用了 ICMP 終點不可達差錯報文與 TTL 機制,爲了探測 IP 數據報文走過的路徑,它會發送一個 UDP 數據包。將 TTL 設置爲1,一旦遇到一個路由器,它就會犧牲了。接着返回一個 ICMP 包,就是網絡差錯包,類型是時間超時,這樣就能知道一個路由器有多遠。具體機制如下所示:

  • 1)、「首先,會封裝一個 TTL 爲1的數據報文,當到達第一個網絡之後,TTL 會減爲0,第一個網絡會發現 TTL 減爲0了,此時就會往源主機發送 ICMP 終點不可達的差錯報文。這個時候源主機就會把第一個網絡的 IP 地址記錄下來」

  • 2)、「然後,會封裝一個 TTL 爲2的數據報文,當到達第二個網絡之後,TTL 會減爲0,第二個網絡會發現 TTL 減爲0了,此時就會往源主機發送 ICMP 終點不可達的差錯報文。這個時候源主機就會把第二個網絡的 IP 地址記錄下來」

  • 3)、「後面按 TTL + 1,到達的網絡次序 + 1的規律進行,直到到達目的主機,最後得到目的主機的 IP 地址」

這樣,源主機就接收到了所有的路徑信息,就可以輸出該數據報在網絡中的路徑了。traceroute 命令的使用示例如下所示:

tracert github.com (Windows 爲 tracert github.com)
quchao@quchaodeMacBook-Pro cmmp-core-client-android % traceroute github.com
traceroute to github.com (13.250.177.223), 64 hops max, 52 byte packets
1  22.4.93.254 (22.4.93.254)  11.676 ms  7.331 ms  9.620 ms
2  59.40.180.129 (59.40.180.129)  977.679 ms  440.943 ms  10.672 ms
3  49.186.37.59.broad.dg.gd.dynamic.163data.com.cn (59.37.186.49)  9.207 ms  12.436 ms  10.636 ms
4  125.176.37.59.broad.dg.gd.dynamic.163data.com.cn (59.37.176.125)  13.202 ms  10.292 ms  28.478 ms
5  183.56.65.6 (183.56.65.6)  11.763 ms  9.236 ms
183.56.65.18 (183.56.65.18)  11.392 ms
6  202.97.94.134 (202.97.94.134)  18.357 ms
202.97.94.150 (202.97.94.150)  18.175 ms
202.97.94.134 (202.97.94.134)  36.600 ms
7  202.97.94.98 (202.97.94.98)  245.161 ms
202.97.12.29 (202.97.12.29)  19.504 ms
202.97.12.41 (202.97.12.41)  22.256 ms
複製代碼

爲什麼查找一個 IP 地址時可能會看不到中間有些路由器的信息?

因爲有的路由器根本不會返回這個 ICMP 包。

6、路由

1)、路由簡介

路由表包括了 「目的 IP 地址與下一跳 IP 地址的映射關係」

自治系統(Autonomous System)

  • 一個自治系統 AS 是處於一個管理機構下的網絡設備羣。

  • AS 內部網絡自行管理,並提供一個或多個出入口。

「從網絡的分級層級來看,每一個主幹 ISP 都可以認爲是一個主幹 AS,每一個地區 ISP 都可以認爲是一個地區 AS,而每一個公司、校園、家庭都可以認爲是一個小的 AS」

2)、路由協議

  • 自治系統內部路由的協議:內部網關協議(RIP、OSP)

  • 自治系統外部路由的協議:外部網關協議(BGP)

例如家庭 AS1 與公司 AS2 它們直接使用的網關協議示意圖如下所示:

我們可以把網絡拓撲圖轉換爲圖,其中

  • 「每一個頂點表示一個網絡、路由器或計算機」

  • 「每一條邊表示一條網絡路徑」

「路由算法的本質即圖論的算法,但由於複雜的網絡環境,所以路由算法比圖論算法要更加複雜」

如何設計一個好的路由算法?

  • 1)、正確、完整:算法是正確與完整的。

  • 2)、計算簡單:算法在計算上應該儘可能地簡單。

  • 3)、適應變化:算法可以適應網絡中的各種變化。

  • 4)、穩定、公平:算法是穩定與公佈的。

1、內部網關路由協議之 RIP(Routing Information Protocol) 協議

距離矢量(DV)算法
  • 1)、「每一個節點使用兩個向量 Di 和 Si」

  • 2)、「Di 描述的是當前節點到別的節點的距離」

  • 3)、「Si 描述的是當前節點到別的節點的下一節點」

  • 4)、「首先,每一個節點會與相鄰的節點交換向量 Di 和 Si 的信息」

  • 5)、「每一個節點根據交換的信息更新自己的節點信息:首先運算,然後把當前計算的結果和距離矢量進行比較,如果距離更小的話,則更新自己的距離矢量」

RIP 協議的特點
  • 1)、「RIP 協議是使用 DV 算法的一種路由協議」

  • 2)、「把網絡條數(hop)作爲 DV 算法的距離」

  • 3)、「RIP 協議每隔30s交換一次路由信息」

  • 4)、「RIP 協議認爲跳數 > 15 的路由則爲不可達路由」

RIP 協議的過程
  • 1、「路由器初始化路由信息(兩個向量 Di 和 Si)」

  • 2、「對相鄰路由器 X 發過來的信息,對信息的內容進行修改」

    • 1)、「檢索本地路由,將信息中新的路由插入到路由表裏面」

    • 2)、「檢索本地路由,對於下一跳爲 X 的,更新爲修改後的信息」

    • 3)、「檢索本地路由,對比相同目的的距離,如果新信息的距離更小,則更新路由表」

  • 3、「如果3分鐘沒有收到相鄰的路由信息,則把相鄰路由設置爲不可達(16跳)」

RIP 協議的優勢

「實現簡單,開銷很小」

RIP 協議的弊端

假設有一個 A-B-C 的鏈路,假如 A 路由節點出現問題無法使用,那麼 B、C 就會互相詢問,知道它們各自的跳數一直累加到超過 15 跳。

  • 1)、「隨便相信相鄰節點」

  • 2)、「自己不思考,視野侷限,導致故障信息傳遞慢」

  • 3)、「限制了網絡的規模,只能在較小的網絡中使用,因爲它把跳數大於15的認爲不可達」

2、內部網關路由協議之 OSPF 協議

鏈路狀態(LS)協議

與 RIP 協議的不同:

  • 1)、「向所有的路由器發送消息」

  • 2)、「消息描述該路由器與相鄰路由器的鏈路狀態」

  • 3)、「只有鏈路狀態發送變化時,才發送更新消息」

因此,可以看到 「LS 協議解決了 RIP 協議 隨便相信隔壁路由、視野不夠的問題」

Dijkstra 算法

特點:

  • 1)、「Dijistra 算法是著名的圖算法,它解決的是計算最短路徑的問題」

  • 2)、「解決有權圖從一個節點到其它節點的最短路徑問題」

  • 3)、「以起始點爲中心,向外層層擴展」

過程:

  • 1、「初始化兩個集合(S,U)(S 爲只有初始頂點點 A 的集合,U 爲其它頂點集合)」

  • 2、「如果 U 不爲空,對 U 集合頂點進行距離的排序,並取出距離 A 最近的一個頂點 D」

    • 1)、「將頂點 D 納入 S 集合」

    • 2)、「更新通過頂點 D 到達 U 集合所有點的距離(如果距離更小則更新,否則不更新)」

    • 3)、「重複2步驟」

  • 3、「直到 U 集合爲空,算法完成」

OSPF(Open Shortest Path First) 開放最短路徑優先協議的過程

核心是 Dijkstra 算法。

  • 1)、「向所有的路由器發送消息,因此每一個路由器都可以獲得網絡中的所有信息,並因此得到完整的網絡拓撲(鏈路狀態數據庫)。而且,每一個路由器都可以使用 Dijikstra 算法找到自己到達某一個頂點的最短路徑」

  • 2)、「消息描述該路由器與相鄰路由器的鏈路狀態(即距離、時延、帶寬),因此 OSPF 協議比 RIP 協議更加客觀與先進」

  • 3)、「只有鏈路狀態發生變化時,才發送更新信息,這使得路由器減少了數據的交換,能夠更快地收斂」

然後,我們再來回顧一下 「完整過程」

  • 首先,「路由器接入網絡」

  • 然後,「路由器向鄰居發出問候信息,以此來確認可達性」

  • 確認後,「就會與鄰居交流鏈路狀態數據庫,並將鏈路狀態數據庫都同步爲最新的」

  • 最後,「路由器會廣播和更新未知路由」

五種消息類型
  • 1)、「問候消息(Hello):測試自身與相鄰路由器的可達性」

  • 2)「、鏈路狀態數據庫描述信息:用於向隔壁路由器發送自己的鏈路狀態的一些簡單的描述信息」

  • 3)、「鏈路狀態請求信息:用於向隔壁路由器請求鏈路狀態數據」

  • 4)、「鏈路狀態更新信息:使用最頻繁也是最重要的信息」

  • 5)、「鏈路狀態確認信息:用於對鏈路更新的一個確認」

RIP 協議 與 OSPF 協議的對比
RIPOSPF
從鄰居看網絡整個網絡的拓撲
在路由器之間累加距離Dijkstra 算法計算最短路徑
頻繁、週期更新,收斂很慢狀態變化更新,收斂很快
路由間拷貝路由信息路由間傳遞鏈路狀態,自行計算路徑
OSPF 的缺點

雖然 OSPF 協議解決了 RIP 協議的問題,對整個網絡有了一定的全局觀,但是 「OSPF 協議本身較爲複雜,實現開銷較大」

3)、外部網關路由協議之 BGP(Border Gateway protocol) 邊際網關協議(很複雜、瞭解即可)

  • BGP 協議是運行在 AS(自治系統)之間的一種協議。

  • BGP 協議是因爲計算機網絡中人爲因素的複雜性而提出的,在實際的網絡環境中,數據的傳輸還受整治、安全等因素的影響。

爲什麼要在 AS 之間使用 BGP 協議呢?

  • 1)、「互聯網的規模很大,這使得在 AS 之間選擇路由非常困難,如果我們在 AS 之間選擇鏈路狀態協議,每個路由器都需要存儲很多鏈路狀態的數據,並且如果使用 Dijikstra 算法,運行會很慢,因此需要使用 BGP 協議」

  • 2)、「AS 內部使用不同的路由協議,例如在一個 AS 中使用了 RIP 協議,而另一個 AS 中則使用了 OSPF 協議。對於使用不同的協議的路由器,在它們之間是無法通信的,因此它們之間便需要藉助 BGP 協議來進行協調」

  • 3)、「AS 之間需要考慮除網絡特性之外的一些因素,例如 政治、安全」

「由於各個 AS (國家、地區)之間政策、安全等原因,BGP 僅能夠找到一個到底目的地的比較好的路由。而 AS 之間是通過 BGP 發言人來進行路由信息的交換的」

九、數據鏈路層

1、主要功能

1)、封裝成幀

什麼是數據幀?

  • 「幀是數據鏈路層數據的基本單位」

  • 「發送端在網絡層的一段數據前後添加特定標記形成幀」

  • 「接收端根據前後特定標記識別出幀」

數據幀結構

  • 「網絡層將 IP 數據報 傳送到 數據鏈路層時,在數據鏈路層會給 IP 數據報 的前後添加 幀首部與幀尾部」

  • 「幀首部與尾部都是特定的控制字符,即一些特定的比特流,例如幀首部的 SOH:00000001,幀尾部的EOT:00000100」

如果數據裏面剛好有這些比特流怎麼辦?

2)、透明傳輸

透明傳輸是什麼?

  • 1)、「計算機領域中非常重要的一個術語。例如對於數據鏈路層來說,物理層所做的工作就是透明的,物理層只需向外暴露接口即可」

  • 2)、「一種實際存在的事物但是看起來像不存在一樣」

  • 3)、「即使控制字符在幀數據中,但是要當做不存在一樣去處理」

透明傳輸的應用

如果數據裏面剛好有這些控制字符該怎麼辦?

在該控制字符前面加上一個 ESC 轉義字符,如果數據中也包含有 ESC 轉義字符時,則可以在前面再加一個 ESC 轉義字符。而數據鏈路層的轉義字符可以類比與編程語言中的轉義字符。

3)、差錯監測

爲什麼要進行差錯監測?

「因此物理層只管傳輸比特流,無法控制是否出錯。所以數據鏈路層需要負責 差錯監測 的工作」

差錯監測的方式

1、奇偶校驗碼

「在比特流的後面加上 奇偶校驗碼(1/0).例如:00110100 => 所有位數和爲3,是基數,在該比特流後面加1。(偶數加0)」

它的侷限性在於 「當比特流中出錯兩位時,無法檢測出錯誤」

2、CRC(循環冗餘校驗碼)
  • 1)、「一種根據傳輸或保存的數據而產生固定位數校驗碼的方式」

  • 2)、「檢測數據傳輸或保存後可能出現的錯誤」

  • 3)、「生成的數字計算出來並且附加到數據後面」

CRC 使用了 「模 2 除法」,即:「當最高位爲0時,則認爲餘數不夠除,取商爲0」

「發送端增加校驗碼:」

  • 1)、「選定一個用於校驗的多項式 G(x)(例如:CRC-7、CRC-8 就代表 G(x) 中最高位爲8),並在數據尾部添加 r 個0」

  • 2)、「將添加 r 個0後的數據,使用模 2 除法除以多項式的位串」

  • 3)、「將得到的餘數填充在原數據 r 個0的位置得到可校驗的位串」

「接收端驗證校驗碼:」

  • 「接收數據除以 G(x) 的位串,如果餘數爲0,則校驗成功」

「缺點」

  • 1)、「位串的階數 r 越大,CRC 的錯誤檢測能力越強。(階數爲1時,退化爲奇偶校驗碼)」

  • 2)、「數據鏈路層只進行數據的檢測,不進行糾正,如果檢測出錯誤數據會把該數據丟棄」

2、最大傳輸單元 MTU(Maximum Transmission Unit)

1)、MTU

爲什麼要設計出 MTU?

數據幀過大或過小都會影響傳輸的效率。例如會增加數據傳輸時的總時延。以太網 MTU 一般爲 1500 字節。

2)、路徑 MTU

由傳輸鏈路中所有 MTU 中的最小 MTU 決定。

3、以太網協議

1)、MAC 地址(物理地址、硬件地址)

特點

  • 每一個設備都擁有唯一的 MAC 地址。

  • MAC 地址共 48 位,使用十六進制表示。例如:30-B4-9E-ED-85-DA 。

查看計算機的 MAC 地址

  • MAC:ifconfig

  • Windows:ipconfig /all

MAC 地址表

「存有 MAC 地址和硬件接口的映射關係。其中每一個 MAC 地址都有與之對應的硬件接口」

2)、協議內容

特點

  • 一種使用廣爲使用的局域網技術。

  • 一種應用於數據鏈路層的協議。

  • 藉助其可以完成相鄰設備間的數據幀傳輸。

數據格式

單位爲 「字節」

其中的幀數據具體是什麼數據?

  • 「如果是網絡層的 IP 數據,則 類型爲 0800,幀數據 = IP 數據報」

  • 「如果是 ARP 請求/應答,則 類型爲 0806,幀數據 = ARP 請求/應答(28字節) + PAD(18字節)」

  • 「如果是 RARP 請求/應答,則 類型爲 8035,幀數據 = RARP 請求/應答(28字節) + PAD(18字節)」

數據傳輸過程

  • 1)、「設備 A 通過網卡發出數據幀」

  • 2)、「數據幀到達路由器,路由器取出前6字節,即目的設備 B 的 MAC 地址」

  • 3)、「路由器匹配 MAC 地址表,找到目的設備 B 的網絡接口」

  • 4)、「路由器往該網絡接口發送數據幀」

如果 MAC 地址並不知道 B 的硬件接口,路由器如何處理?

  • 1)、E 檢查 MAC 地址表,發現沒有 C 的信息。

  • 2)、E 將廣播 A 的數據包到除 A 以外的端口。

  • 3)、E 將收到來自 B、C 的迴應,並將地址記錄。

十、物理層

1、作用

  • 1)、「連接不同的物理設備」

  • 2)、「傳輸比特流」

什麼是比特流?

「由高低電頻表示的數據流,1 => 高電頻,0 => 低電頻」,例如由比特流 100110101010 轉化成的數字信號如下圖所示:

2、常見的傳輸介質

1)、有線介質

1、雙絞線

無屏蔽雙絞線

從外至內由 「聚氯乙烯套層、絕緣層、銅線」 組成。

雙絞線

不同於 無屏蔽雙絞線,其在第二層 「加了屏蔽層」

2、同軸電纜

從外至內由 「絕緣保護套層、外導體屏蔽層、絕緣層、內導體」 組成。

3、光纖

光纖由 「包層(低折射率的媒體)、纖芯(高折射率的媒體)」 組成。

2)、無線介質

  • 1)、紅外線

  • 2)、無線(例如 4G、WIFI)

  • 3)、激光

3、信道基本概念

  • 信道是往一個方向傳送信息的媒體。

  • 一條通信電路包含一個接受信道和一個發送信道。

如何處理髮送與接受出現衝突的情況?

信道的分類

  • 1)、「單工信道:只能往一個方向通信,沒有反方向反饋的信息。例如 有線電視、無線電收音機等等」

  • 2)、「半雙工信道:雙方都可以發送和接受信息。不能雙方同時發送,也不能同時接受」

  • 3)、「全雙工信道:雙方都可以同時發送和接收信息。例如網線、網絡等等」

4、分用與複用

複用的分類

  • 1)、頻分複用

  • 2)、時分複用

  • 3)、波分複用

  • 4)、碼分複用

十一、總結

計算機網絡是一個需要我們持續深入探索的一門基礎學科,在本篇中我們全面瞭解了計算機網絡的核心基礎知識,這爲我們之後探討移動網絡優化相關的問題打下了一定的網絡基礎。

作者:jsonchao❞

鏈接:https://juejin.im/post/5ebb3db16fb9a0438e2396af

關注我獲取更多知識或者投稿

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章