Tommy

Tommy

写代码是热爱,但也是生活 !
github

計算機五層模型通俗易懂的概述

前言#

計算機是我們最熟悉的工具,地球上有很多計算機,那我們的兩台計算機是如何實現相互傳遞信息的呢?
很多人肯定說,這是這是因為計算機的五層模型,但你知道他們的作用嗎?
下面就是這五層模型
網絡通信的五層模型

說實話,這五層模型是十分複雜的,但是今天我要用最簡潔的語言,來講解一下兩台計算機是如何通信的,就算你沒有學過計算機網絡也能聽懂

1. 物理層#

一台計算機和另一台計算機要通信要通信,肯定要將兩台計算機連起來呀

Mermaid Loading...

也就是,物理層將兩台計算機連接起來,然後通過高低電頻來傳輸 0,1 這樣的電信號

2. 數據鏈路層#

前面說了,物理層只是單純的連接兩個計算機,並且在其之間傳輸傳輸電信號,那如果這電信號沒有規範,那誰看的懂呢?

Mermaid Loading...

所以,就有了一套規則可以讓計算機讀懂,於是就有了以太網協議

2.1. 以太網協議#

以太網協議規定,一組電信號就是一個數據包,我們把這個數據包成為‘’。每一個幀由 標頭 (Head) 和 數據 (Data) 兩部分組成

標頭 (Head)數據 (Data)

標頭存放著發送者和接受者的信息,而數據就是存放著要發送的數據了
把一台計算的的數據通過物理層和鏈路層發送給另一台計算機,究竟是誰發給誰的,計算機與計算機之間如何區分,你總得給他們一個唯一的標識吧?
於是,MAC 地址出現了。

2.2.MAC 地址#

連入網絡的每一個計算機都會有網卡接口,每一個網卡都會有一個唯一的地址,這個地址就叫做 MAC 地址。計算機之間的數據傳送,就是通過 MAC 地址來唯一尋找、傳送的。

2.3. 廣播與 ARP 協議#

2.3.1 廣播

再想一個問題,計算機 A 不僅連著計算機 B,而且計算機 A 也還連著其他的計算機。 雖然計算機 A 知道計算機 B 的 MAC 地址,可是計算機 A 卻不知道知道計算機 B 是分布在哪邊路線上,為了解決這個問題,於是,有了廣播的出現。

Mermaid Loading...

在同一個子網中,A 會向 B 發送數據包,這個數據包會包含 B 的 MAC 地址,當發送是,A 是通過廣播的形式發送的,此時 B、C、D 都會接收到這個數據包,然後收到這個數據包的計算機,會把數據包的 MAC 地址取出來,與自身的 MAC 地址對比,如果兩者相同,則接受這個數據包,否則就丟棄這個數據包。
這種方式就像你玩的晚,媽媽們通過廣播的形式叫孩子回家吃飯,如果這個名字是你,你就理會一下,如果不是你,你就當作聽不見。

2.3.2ARP 協議

那我們來思考一個問題,A 是怎麼知道 B 的 MAC 地址的呢?這個時候就得由 ARP 協議這個家伙來解決了,不過 ARP 協議會涉及到 IP 地址,我們下面才會扯到 IP 地址。因此我們先放著,就當作是有這麼一個 ARP 協議,通過它我們可以知道子網中其他計算機的 MAC 地址。

3. 網絡層#

上面我們說了子網這個詞,我們身處的網絡由無數個子網構成,在廣播的時候,也只能在同一個子網內進行。
假如沒有子網這種劃分的話,計算機 A 通過廣播的方式發一個數據包給計算機 B , 其他所有計算機也都能收到這個數據包,然後進行對比再捨棄。世界上有那麼多它計算機,每一台計算機都能收到其他所有計算機的數據包,那就不得了了。那還不得奔潰。 因此產生了子網這麼一個東西。
那麼問題來了,我們是如何區分 MAC 地址屬於哪一個子網呢?假如是同一個子網,那我們就用廣播的形式把數據傳送給對方,如果不是同一個子網的,我們就會把數據發給網關,讓網關進行轉發。
為了解決這個問題,於是,有了 IP 協議

3.1IP 協議#

IP 協議,它所定義的地址,我們稱之為 IP 地址。IP 協議有兩種版本,一種是 IPv4, 另一種是 IPv6。不過我們目前大多數用的還是 IPv4,我們現在也只討論 IPv4 這個版本的協議
每一台聯網的計算機都有一個 IP 地址,IP 地址分為兩部分,前面代表網絡部分,後面代表主機部分並且網絡部分和主機部分所佔用的二進制位數是不固定的。
那麼問題又來了,既然不固定,那怎麼知道網絡部分是佔幾位,主機部分又是佔幾位呢?也就是說,兩個 IP 地址,我們如何判斷他們是否在同一個子網中呢?
這就引申出來一個關鍵字:子網掩碼
網掩碼和 IP 地址一樣也是 32 位二進制數,不過它的網絡部分規定全部為 1,主機部分規定全部為 0
例如:192.168.43.1 和 192.168.43.2,這兩個 IP 地址的網絡部分為 24 位,主機部分為 8 位的話,那他們的子網掩碼都為 11111111.11111111.11111111.00000000,即 255.255.255.0
那我們知道了子網掩碼,如何來判端 IP 地址是否處於同一個子網中呢?我們只需要把 IP 地址與它的子網掩碼做與 (and) 運算,然後把各自的結果進行比較就行了,如果比較的結果相同,則代表是同一個子網,否則不是同一個子網。
例如,192.168.43.1 和 192.168.43.2 的子碼掩碼都為 255.255.255.0,把 IP 與子碼掩碼相與,可以得到他們都為 192.168.43.0,進而他們處於同一個子網中。

3.2ARP 協議#

接著上面沒有講完的繼續講,計算機 A 要給計算機 B 發送數據時。我們可以通過 ARP 協議來得到計算機 B 的 MAC 地址。那 ARP 協議是如何工作的呢?
例如:計算機 A 給計算機 B 要發送數據,此時 A 還不知道 B 的 MAC 地址,這時 A 就會給子網的每一個計算機發送包含接收方IP 地址的數據包,對方收到這個數據包之後,會取出 IP 地址與自身的對比,如果相同,則把自己的 MAC 地址回復給對方,否則就丟棄這個數據包。這樣,計算機 A 就能知道計算機 B 的 MAC 地址了。

3.3 DNS 服務器#

那麼問題又來了,我們時如何知道接收方的 IP 地址的呢?
當我們想要訪問某個網站的時候,我們可以輸入 IP 來進行訪問,但是我相信絕大多數人是輸入一個網址域名的,例如訪問百度是輸入 www.baidu.com 這個域名。其實當我們輸入這個域名時,會有一個叫做 DNS 服務器的家伙來幫我們解析這個域名,然後返回這個域名對應的 IP 給我們的。
因此,網絡層的功能就是讓我們在茫茫人海中,能夠找到另一台計算機在哪裡,是否屬於同一個子網等。

4. 傳輸層#

通過物理層、數據鏈路層以及網絡層的互相幫助,我們已經把數據成功從計算機 A 傳送到計算機 B 了,可是,計算機 B 裡面有各種各樣的應用程序,計算機該如何知道這些數據是給誰的呢?這個時候,** 端口 (Port)** 這個家伙就上場了,也就是說,我們在從計算機 A 傳數據給計算表 B 的時候,還得指定一個端口,以供特定的應用程序來接受處理。
傳輸層最常見的兩大協議是 TCP 協議和 UDP 協議,其中 TCP 協議與 UDP 最大的不同就是 TCP 提供可靠的傳輸,而 UDP 提供的是不可靠傳輸。
也就是說,傳輸層的功能就是建立端口到端口的通信。相比網絡層的功能是建立主機到主機的通信。

5. 應用層#

終於到最後一層了,應用層是距離我們用戶最近的一層
雖然我們收到了傳輸層傳來的數據,可是這些傳過來的數據五花八門,有 html 格式的,有 mp4 格式的,各種各樣。你確定你能看的懂?
因此我們需要指定這些數據的格式規則,收到後才好解讀渲染。例如我們最常見的 Http 數據包中,就會指定該數據包是 什麼格式的文件了。

#

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。