計算機網絡協議(二)——從二層到三層

這個專欄的計算機網絡協議,我是在極客時間上學習 已經有三萬多人購買的劉超老師趣談網絡協議專欄,講的特別好,像看小說一樣學習到了平時很枯燥的知識點,計算機網絡的書籍太枯燥,感興趣的同學可以去付費購買,絕對物超所值,本文就是對自己學習專欄的總結,評論區可以留下你的問題,咱們一起討論!

我在CSDN寫博客的目的真的不是爲了寫而寫,寫博客的意義一來是方便自己複習,二來是也是想分享知識。我並不會說侵犯 劉超 老師的版權,我也不是照抄,作者的文章內容很精彩,我是記錄自己想學的點,當作一個筆記方便自己複習。大家可能看到這篇文 也會去購買專欄學習,或者看到覺得有一點點用就可以啦!


概述

上一篇文章中對通信網絡協議做了一個綜述,這一篇開始底層網絡知識詳解:從二層到三層 分爲以下五小節去介紹:

  1. 從物理層到MAC層;
  2. 交換機與VLAN;
  3. ICMP和ping;
  4. 網關;
  5. 路由協議;

一、從物理層到MAC層


1.1 第一層(物理層)

電腦連接電腦,除了網線交叉,還需要配置這兩臺電腦的IP地址、子網掩碼和默認網關
IP層封裝了MAC層才能放入物理層,兩臺電腦可以通過網線構成一個局域網,LAN
多臺電腦可以通過Hub集線器進行連接。

1.2 第二層(數據鏈路層)

Hub採取的是廣播的模式,無法確定接收者,數據發送混亂沒有先後順序、發送出錯怎麼辦?

MAC層就是要解決這些問題,MAC全稱是Medium Access Control(媒體訪問控制),其實就是控制數據在媒體上的發送;

多路訪問解決數據發送混亂:

  • 信道劃分,例如分爲多車道,每個車一個道;
  • 輪流協議,單雙號出行;
  • 隨機接入協議,錯峯出行;

爲了解決了媒體接入控制的問題,就要考慮:發給誰,誰接收?這裏用到一個物理地址,叫作鏈路層地址。但是常用於解決流媒體接入控制問題,所以常被稱爲MAC地址

第二層的網絡包的格式如下圖所示,首先是包含目標MAC地址和源MAC地址類型是IP數據包,IP裏面封裝了TCP、UDP,以及HTTP;數據包在鏈路上廣播,MAC網卡通過目標MAC地址接收數據包,打開IP包,發現IP地址也是自己的,再打開TCP包,發現端口是自己,也就是80,而nginx就是監聽80端口;

於是將請求提交給nginx,nginx返回一個網頁。然後將網頁需要發回請求的機器。然後層層封裝,最後到MAC層。因爲來的時候有源MAC地址,返回的時候,源MAC就變成了目標MAC,再返給請求的機器。

第二層的後面是CRC,就是循環冗餘檢測,通過XOR異或的算法,來計算整個包在傳輸過程中是否發生了錯誤。
MAC數據
在一個局域網中如果已知IP地址,求MAC地址,可以採用ARP協議;廣播一個IP包,誰是這個IP誰來回答,回答的報文如下,機器會在本地進行ARP緩存來避免每次都用ARP協議,隨着機器的上下線,緩存也會失效。
回答報文
交換機是一個二層設備,假設一個數據包要從MAC1發送到MAC2,但是交換機不知道在MAC2電腦的哪個口,這個時候會將包發送給所有的口,找到MAC2電腦的接口之後,通過轉發表來記錄下對應的MAC地址,保證下次準確轉發。

當機器的IP地址、端口發生改變,轉發表中的信息也會發生改變。

總結:
第一,MAC地址是用來解決多路訪問的堵車問題;
第二,ARP是通過吼的方式來尋找目標MAC地址,吼完以後,記住一段時間,叫作緩存;
第三,交換機是由MAC地址學習能力的,學完了就知道誰在哪兒了,不用廣播了


二、交換機與VLAN

上文中講了交換機,假如公司越來越大,交換機數目肯定越來越多。交換機之間連接起來,就形成複雜的拓撲結構。這麼多網線,繞過來繞過去,不可避免地會出現一些意料不到的情況,其中常見的問題就是環路問題,如下圖所示:
在這裏插入圖片描述

這就需要採用使用STP協議,解決環路問題:
在數據結構中,有一個方法叫作最小生成樹。有環的我們常稱爲。將圖中的環破了,就生成了。在計算機網絡中,生成樹的算法叫作STP,全稱**Spanning Tree Protocol。**有環路的圖變成沒有環路的樹,從而解決環路問題。這裏我就不細細描述了,感興趣的同學可以去學習一下!

2.1 如何解決廣播問題和安全問題?

交換機數目多,會面臨廣播問題安全問題;一大波機器和交換機,就是想一個公司中相關的部門、不相關的部門,大家都在一個會議室開會吵吵鬧鬧的,亂的很,這種廣播問題就會導致性能下降;

有的部門會議內容需要保密,如果都在一個廣播域裏面,碰到了一個會抓包的程序員,就能抓到這些包,如果沒有加密,就能看到這些敏感信息了。就像是大家都在會議室裏七嘴八舌,討論的問題也能被別人聽見嘍,就會導致安全問題。所以,那就要分部門、分會議室。

方法一:物理隔離
在網絡方面,每個部門都有單獨的交換機,配置着單獨的子網,這樣部門間的溝通就需要路由器;但是部門中的人數不固定,就會導致交換機中的接口空閒較多或者不夠用;

方法二:虛擬隔離
常說的VLAN,或者說是虛擬局域網,使用VLAN,一個交換機上就會連着屬於多個局域網的機器。交換機會根據二層頭上的Tag中的VLAN ID只有相同VLAN的包,纔會互相轉發,不同VLAN的包,是看不到的

對於支持VLAN的交換機,有一種口叫作Trunk口。它可以轉發屬於任何VLAN的口。交換機之間可以通過這種口相互連接。
在這裏插入圖片描述


三、ICMP和ping

當網絡不通,你連不上另一臺機器的時候,一般都會ping一下,ping是基於ICMP協議工作的;

3.1 ICMP協議的格式

ICMP全稱Internet Control Message Protocol,就是互聯網控制報文協議

ICMP是封裝在IP包中的,在傳輸指令的時候,需要源地址和目標地址,其格式如下:
ICMP
ICMP報文有很多的類型,不同的類型有不同的代碼。最常用的類型是主動請求爲8,主動請求的應答爲0。

3.2 ICMP報文類型

查詢報文類型

ping就是查詢報文,是一種主動請求,並且獲得主動應答的ICMP協議;ping發的包符合ICMP協議,只不過在後面增加了自己的格式。

對ping的主動請求,進行網絡抓包,稱爲ICMP ECHO REQUEST,同理主動請求的回覆,稱爲**ICMP ECHO REPLY.**比起原先的ICMP,多了兩個字段,一個是標識符,就像偵察兵,一類是偵察戰況,一類是查找水源,需要採用標識對其進行區分。另一個是序號,ping會存放發送請求的時間值,來計算往返時間,說明路程的長短。

差錯報文類型

ICMP差錯報文的例子:終點不可達爲3,源抑制爲4,超時爲11,重定向爲5

  1. 終點不可達:網絡不可達、主機不可達、協議不可達、端口不可達、需要進行分片但設置了不分片位;
  2. 源站抑制:源站放慢發送速度;
  3. 時間超時:超過網絡包的生存時間還沒送達;
  4. 路由重新定向:下一次發給另一個路由器;

3.3 ping:查詢報文類型的使用

一起來看一下ping的發送和接收過程:
ICMP過程
假定主機A的IP地址是192.168.1.1,主機B的IP地址是192.168.1.2,它們都在同一個子網,當你在主機A上運行“ping 192.168.1.2”後,源主機首先會構建一個ICMP請求數據包,數據包中包含類型字段順序號

然後,由ICMP協議將這個數據包連同地址192.168.1.2一起交給IP層,IP層將以192.168.1.2作爲目的地址,本機IP地址作爲源地址,加上一些其他控制信息,構建一個IP數據包。

接下來,需要加入MAC頭,可以通過ARP查詢MAC地址,之後傳送出去;主機B收到這個數據幀後,先檢查它的目的MAC地址,並和本機的MAC地址對比,如符合,則接收,否則就丟棄。接收後檢查該數據幀,將IP數據包從幀中提取出來,交給本機的IP層。同樣,IP層檢查後,將有用的信息提取後交給ICMP協議。

主機B會構建一個 ICMP 應答包,應答數據包的類型字段爲 0,順序號爲接收到的請求數據包中的順序號,然後再發送出去給主機A。在規定的時候間內,源主機如果沒有接到 ICMP 的應答包,則說明目標主機不可達;反之,即不可達。

如果跨網段的話,還會涉及網關的轉發、路由器的轉發等等。

3.4 Traceroute:差錯報文類型的使用

Traceroute的第一個作用:故意設置特殊的TTL,來追蹤去往目的地時沿途經過的路由器

Traceroute的參數指向某個目的地的IP地址,它會發送一個UDP數據包,將TTL設置爲1,也就是說一旦遇到一個路由器或者一個關卡,表示其犧牲了,如此反覆到達目的地址,就獲取到了所有路由器的IP;

Traceroute的第二個作用:故意設置不分片,從而確定路徑的MTU;

發送分組,並設置“不分片”標誌。每次收到ICMP"不能分片"差錯時就會減少分組的長度,直到到達目標主機。


總結

  • ICMP相當於網絡世界的偵察兵,分爲主動探查的查詢報文,一種異常報告的差錯報文;
  • ping使用查詢報文,Traceroute 使用差錯報文;

四、網關

在進行網卡配置的時候,除了IP地址,還需要配置一個Gateway的東西,這個就是網關

一旦配置了IP地址和網關,往往就能夠指定目標地址進行訪問了。由於在跨網關訪問的時候,牽扯到MAC地址和IP地址的變化,這裏有必要詳細描述一下MAC頭和IP頭的細節,如下圖示:
MAC頭
IP頭
MAC頭裏面,先是目標IP地址,然後是源MAC地址,然後有一個協議類型,說明裏面是IP協議,裏面的版本號主流還是IPv4,TOS代表着數據包的優先級,8位標識協議,指的是到了下一層的協議,是TCP還是UDP,最重要的是源IP和目標IP;

如果是在同一網段,就沒網關啥事,直接將源地址和目標地址放入IP頭中,然後通過ARP獲得MAC地址,將源MAC和目的MAC放入MAC頭中,發出去就可以了。

如果不在同一網段,需要訪問校園網裏面的BBS,這就需要發送給默認的網關Gateway,Gateway的地址一定是和源IP地址是一個網段的。例如:192.168.1.0/24這個網段,Gateway往往會192.168.1.1/24或者192.168.1.2/24.

網關往往是一個路由器,是一個三層轉發的設備;三層設備的含義,就是把MAC頭、IP頭都取下來,根據裏面的內容,看看接下來把包發送到哪的設備。

網關和路由器的關係:這個比喻就是路由器是一臺設備,它有五個網口或者網卡,相當於有五隻手,分別連着五個局域網,每隻手的IP地址都和局域網有相同的網段,每隻手都是它握住的哪個局域網的網關。


靜態路由

靜態路由,其實就是在路由器上配置一條一條規則。
每當要選擇從哪隻手拋出去的時候,就一條一條的匹配規則,找到符合的規則,就按規則中設置的那樣,從某個口拋出去,找下一跳IPX。


IP頭和MAC頭哪些變、哪些不變?
將變與不變的問題分爲兩種類型,一個是“歐洲十國遊”和“玄奘西行

MAC只在一個局域網內有效,只要過網關,必須要改變,因爲已經換了局域網,兩者主要的區別在於IP地址是否改變不改變IP地址的網關,稱爲轉發網關改變IP地址的網關,稱爲NAT網關;


歐洲十國遊
歐洲十國遊
每到一個新的局域網,MAC都是要變的,但是IP地址都不變。在ip頭裏面,不會保存任何網關的IP地址。所謂的下一跳是,某個IP要將這個IP地址轉換爲MAC放入MAC頭

整個過程中,IP頭裏面的地址都是不變的。IP地址在三個局域網都可見,在三個局域網之間的網段都不會衝突。在三個網段之間傳輸包,IP頭不改變。這就像在歐洲各國之間旅遊,一個簽證就能搞定。


玄奘西行
局域網之間各定各的網段,導致IP段衝突,如果單從IP地址上看,簡直是自己訪問自己,其實是大唐的192.168.1.101要訪問印度的192.168.1.101;

但其實就像咱們出國一樣,不用國內的身份證,改用護照;

首先,目標服務器B在國際上要有一個國際的身份,我們給它一個192.168.56.2。在網關B上,我們記下來,國際身份192.168.56.2對應國內身份192.168.1.101。凡是要訪問192.168.56.2,都轉成192.168.1.101。於是,源服務器A要訪問目標服務器B,要指定的目標地址爲192.168.56.2

當網絡包發送到中間的局域網的時候,服務器A也需要有一個國際身份,因此在國際上,源ip地址不能用192.168.1.101,需要改成192.168.56.1;

而中間的路由器用來做NAT(Network Address Translation),用來轉換對應的國際與國內的ip地址,並且配置了對應的靜態路由規則

現在大家每家都有家用路由器,家裏的網段都是192.168.1.x,所以你肯定訪問不了你鄰居家的這個私網的IP地址的。所以,當我們家裏的包發出去的時候,都被家用路由器NAT成爲了運營商的地址了。

很多辦公室訪問外網的時候,也是被NAT過的,因爲不可能辦公室裏面的IP也是公網可見的,公網地址實在是太貴了,所以一般就是整個辦公室共用一個到兩個出口IP地址。你可以通過 查看出口ip 查看自己的出口IP地址。


總結

  • 如果離開局域網,就需要經過網關,網關是路由器的一個網口;
  • 路由器是一個三層設備,裏面有如何找下一跳的規則;
  • 經過路由器後MAC頭要變,如果IP不變,相當於不換護照的歐洲旅遊,如果IP變,相當於換護照的玄奘西行。

五、路由協議

路由器就是一臺網絡設備,它有多張網卡。當一個入口的網絡包送到路由器時,它會根據一個本地的轉發信息庫,來決定如何正確地轉發流量。這個轉發信息庫通常被稱爲路由表

路由器會根據路由表去正確的轉發信息,路由表中有多條路由規則,需要根據目的IP地址來配置路由

  • 目的網絡:數據包想去哪?
  • 出口設備:將包從哪個口扔出?
  • 下一跳網關:下一個路由器的地址;

5.1 如何配置策略路由?

真實複雜的網絡環境中,除了根據目的ip地址配置路由之外,還可以根據多個參數來配置路由,就是策略路由,可以配置多個路由表,根據源ip地址、入口設備、TOS等選擇路由表;

ip rule add from 192.168.1.0/24 table 10
ip rule add from 192.168.2.0/24 table 20
表示從192.168.1.10/24這個網段來的,使用table 10中的路由表,
而從192.168.2.0/24網段來的,使用table20的路由表

在一條路由規則中,也可以走多條路徑,在下面的路由規則中:
ip route add default scope global nexthop via 100.100.100.1 weight 1 nexthop via 200.200.200.1 weight 2

家裏的網是私有網段,出去的包需要NAT成公網的IP地址,因而路由器是一個NAT路由器;

例如,運營商1給路由器分配的地址是183.134.189.34/32,而運營商網絡裏面的網關是183.134.188.1/32。有的是/30的,也就是分了一個特別小的網段。運營商2給路由器分配的地址是60.190.27.190/30,運營商網絡裏面的網關是60.190.27.189/30。
在這裏插入圖片描述

5.2 動態路由算法

網絡環境簡單的時候,自己可控,可以採用靜態路由,一旦網絡結構發生變化,就需要動態路由算法;

使用動態路由器,可以根據路由協議算法生成動態路由表,類似於唐僧西天取經一樣,轉化爲如何在途中找最短路徑的問題


1、距離矢量路由算法

算法:每個路由器都會保存一個路由表,包含多行,每行對應一個路由器,每一行包含兩部分信息,一個是要到目標路由器,另一個是到目標路由器的距離;

每個路由器都是知道全局信息的,每個路由器都知道自己和鄰居之間的距離;每個路由器都會根據自己新收集的信息,計算和其他路由器之間的距離。

第一個問題就是好消息傳的快,壞消息傳的慢:壞消息是指,一旦某個路由器掛了不會主動發消息,需要訪問全部路徑才能知道這個路由器掛了;

第二個問題就是每次發送的時候,要發送整個全局路由表:網絡規模大了,這誰頂的住啊;

所以上面的兩個問題,限制了距離矢量路由的網絡規模


2、鏈路狀態路由算法

鏈路狀態路由(link state routing) 基於Dijkstra算法

算法:當一個路由器啓動時,首先是發現鄰居,向他們say hello,然後計算和鄰居之間的距離,發送一個echo,馬上返回/2,就是距離;然後將自己和鄰居之間的鏈路狀態包廣播出去,發送到整個網絡的每個路由器,這樣每個路由器都能收到它和鄰居之間的關係的信息,每個路由器都可以在本地構建完整的圖,採用Dijkstra算法找到兩點之間的最短路徑;

5.3 動態路由協議:


1、基於鏈路狀態路由算法的OSPF

OSPF(Open Shortest Path First,開放式最短路徑優先),廣泛應用於數據中心的協議,主要用於數據中心內部,用於路由決策,因而稱爲內部網關協議(Interior Gateway Protocol,簡稱IGP)

內部網關協議的重點是找到最短的路徑,OSPF可以發現多個最短的路徑,在這多個路徑中進行負載均衡,常常被稱爲等價路由。
OSPF


2、基於距離矢量路由算法的BGP
外網路由協議(Broder Gateway Protocol,簡稱BGP)

在網絡世界中,可以讓一個國家成爲自治系統AS(Autonomous System),自治系統分爲:

  • Stub AS:對外只有一個連接。這類AS不會傳輸其他AS的包。例如,個人或者小公司的網絡
  • Multihomed AS:可能有多個連接到其他的AS,但是大多拒絕幫其他的AS傳輸包,例如一些大公司的網絡;
  • Transit AS:有多個連接到其他的AS,並且可以幫其他的AS傳輸包,例如:主幹網。

在這裏插入圖片描述
BGP又分爲兩類,eBGP和iBGP。自治系統中,邊界路由器之間使用eBGP廣播路由,內部網絡也需要訪問其他的自治系統。邊界路由器通過運行iBGP,使得內部的路由器能夠找到到達外網目的地最好的邊界路由器


總結

  • 路由分靜態路由和動態路由,靜態路由可以配置複雜的策略路由,控制轉發策略
  • 動態路由分爲兩種主流算法:距離矢量算法和鏈路狀態算法,基於兩種算法產生兩種協議,BGP協議和OSPF協議
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章