當前位置:
首頁 > 科技 > 揭秘計算機之間互發數據的關鍵原理!

揭秘計算機之間互發數據的關鍵原理!

作者 | 帥地

責編 | 胡巍巍

前言

天各一方的兩台計算機是如何通信的呢?在成千上萬的計算機中,為什麼一台計算機能夠準確著尋找到另外一台計算機,並且把數據發送給它呢?

可能很多人都聽說過網路通信的 5 層模型,但是可能並不是很清楚為什麼需要五層模型,五層模型負責的任務也有可能經常混淆。下面是網路通信的五層模型

說實話,五層模型的具體內容還是極其複雜的,不過今天這篇文章,我將用最簡潔的模式,通過網路通信的五層模型來講解一台計算機是如何找到另外一台計算機並且把數據發送給另一台計算機的,就算你沒學過計算機網路,也能夠聽的懂。


物理層

一台計算機與另一台計算機要進行通信,第一件要做的事是什麼?當然是要把這台計算機與另外的其他計算機連起來啊,這樣,我們才能把數據傳輸過去。

例如可以通過光纖啊,電纜啊,雙絞線啊等介質把他們連接起來,然後才能進行通信。

也就是說,物理層負責把兩台計算機連起來,然後在計算機之間通過高低電頻來傳送0,1這樣的電信號。


數據鏈路層

前面說了,物理層它只是單純著負責把計算機連接起來,並且在計算機之間傳輸 0,1 這樣的電信號。如果這些 0,1 組合的傳送毫無規則的話,計算機是解讀不了的。一大堆 0,1 誰知道是什麼鬼啊。

因此,我們需要制定一套規則來進行 0,1 的傳送。例如多少個電信號為一組啊,每一組信號應該如何標識才能讓計算機讀懂啊等等。

於是,有了乙太網協議。

1. 乙太網協議

乙太網協議規定,一組電信號構成一個數據包,我們把這個數據包稱之為幀。每一個楨由標頭(Head)和數據(Data)兩部分組成。

幀的大小一般為 64 - 1518 個位元組。假如需要傳送的數據很大的話,就分成多個楨來進行傳送。

對於表頭和數據這兩個部分,他們存放的都是一些什麼數據呢?我猜你眯著眼睛都能想到他們應該放什麼數據。

毫無疑問,我們至少得知道這個楨是誰發送,發送給誰的等這些信息吧?所以標頭部分主要是一些說明數據,例如發送者,接收者等信息。而數據部分則是這個數據包具體的,想給接守者的內容。

大家想一個問題,一個楨的長度是 64~1518 個位元組,也就是說楨的長度不是固定的,那你覺得標頭部分的位元組長度是固定的嗎?

它當然是固定的啊,假如不是固定的,每個楨都是單獨發的,那計算機怎麼知道標頭是幾個位元組,數據是幾個位元組呢。所以標頭部分的位元組是固定的,並且固定為 18 個位元組。

把一台計算的的數據通過物理層和鏈路層發送給另一台計算機,究竟是誰發給誰的,計算機與計算機之間如何區分,,你總得給他們一個唯一的標識吧?

於是,MAC 地址出現了。

2. MAC 地址

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

MAC 地址由 48 個位元組所構成,在網卡生產時就被唯一標識了。

3. 廣播與 ARP 協議

(1)廣播

如圖,假如計算機 A 知道了計算機 B 的 MAC 地址,然後計算機 A 想要給計算機 B 傳送數據,雖然計算機 A 知道了計算機 B 的 MAC 地址,可是它要怎麼給它傳送數據呢?

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

在同一個子網中,計算機 A 要向計算機 B 發送一個數據包,這個數據包會包含接收者的 MAC 地址。

當發送時,計算機 A 是通過廣播的方式發送的,這時同一個子網中的計算機 C, D 也會收到這個數據包的,然後收到這個數據包的計算機,會把數據包的 MAC 地址取出來,與自身的 MAC 地址對比,如果兩者相同,則接受這個數據包,否則就丟棄這個數據包。

這種發送方式我們稱之為廣播,就像我們平時在廣場上通過廣播的形式呼叫某個人一樣,如果這個名字是你,你就理會一下,如果不是你,你就當作聽不見。

(2)ARP 協議。

那麼問題來了,計算機 A 是如何知道計算機 B 的 MAC 地址的呢?這個時候就得由 ARP 協議這個傢伙來解決了,不過 ARP 協議會涉及到IP地址,我們下面才會扯到IP地址。

因此我們先放著,就當作是有這麼一個 ARP 協議,通過它我們可以知道子網中其他計算機的 MAC 地址。


網路層

上面我們有說到子網這個關鍵詞,實際上我們所處的網路,是由無數個子網路構成的。廣播的時候,也只有同一個子網裡面的計算機能夠收到。

假如沒有子網這種劃分的話,計算機 A 通過廣播的方式發一個數據包給計算機 B , 其他所有計算機也都能收到這個數據包,然後進行對比再捨棄。

世界上有那麼多它計算機,每一台計算機都能收到其他所有計算機的數據包,那就不得了了。那還不得奔潰。 因此產生了子網這麼一個東西。

那麼問題來了,我們如何區分哪些 MAC 地址是屬於同一個子網的呢?假如是同一個子網,那我們就用廣播的形式把數據傳送給對方,如果不是同一個子網的,我們就會把數據發給網關,讓網關進行轉發。

為了解決這個問題,於是,有了 IP 協議。

1. IP 協議

IP 協議,它所定義的地址,我們稱之為 IP 地址。IP 協議有兩種版本,一種是 IPv4,另一種是 IPv6。不過我們目前大多數用的還是 IPv4,我們現在也只討論 IPv4 這個版本的協議。

這個 IP 地址由 32 位的二進位數組成,我們一般把它分成 4 段的十進位表示,地址範圍為 0.0.0.0~255.255.255.255。

每一台想要聯網的計算機都會有一個 IP 地址。這個 IP 地址被分為兩部分,前面一部分代表網路部分,後面一部分代表主機部分。並且網路部分和主機部分所佔用的二進位位數是不固定的。

假如兩台計算機的網路部分是一模一樣的,我們就說這兩台計算機是處於同一個子網中。例如 192.168.43.1 和 192.168.43.2, 假如這兩個 IP 地址的網路部分為 24 位,主機部分為 8 位。那麼他們的網路部分都為 192.168.43,所以他們處於同一個子網中。

可是問題來了,你怎麼知道網路部分是占幾位,主機部分又是占幾位呢?也就是說,單單從兩台計算機的 IP 地址,我們是無法判斷他們的是否處於同一個子網中的。

這就引申出了另一個關鍵詞————子網掩碼。子網掩碼和 IP 地址一樣也是 32 位二進位數,不過它的網路部分規定全部為 1,主機部分規定全部為 0。也就是說,假如上面那兩個 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,進而他們處於同一個子網中。

2. ARP協議

有了上面 IP 協議的知識,我們回來講一下 ARP 協議。

有了兩台計算機的 IP 地址與子網掩碼,我們就可以判斷出它們是否處於同一個子網之中了。

假如他們處於同一個子網之中,計算機 A 要給計算機 B 發送數據時。我們可以通過 ARP 協議來得到計算機 B 的 MAC 地址。

ARP 協議也是通過廣播的形式給同一個子網中的每台電腦發送一個數據包(當然,這個數據包會包含接收方的 IP 地址)。

對方收到這個數據包之後,會取出 IP 地址與自身的對比,如果相同,則把自己的 MAC 地址回復給對方,否則就丟棄這個數據包。這樣,計算機 A 就能知道計算機 B 的 MAC 地址了。

可能有人會問,知道了 MAC 地址之後,發送數據是通過廣播的形式發送,詢問對方的 MAC 地址也是通過廣播的形式來發送,那其他計算機怎麼知道你是要傳送數據還是要詢問 MAC 地址呢?

其實在詢問 MAC 地址的數據包中,在對方的 MAC 地址這一欄中,填的是一個特殊的 MAC 地址,其他計算機看到這個特殊的 MAC 地址之後,就能知道廣播想幹嘛了。

假如兩台計算機的 IP 不是處於同一個子網之中,這個時候,我們就會把數據包發送給網關,然後讓網關讓我們進行轉發傳送

3. DNS 伺服器

這裡再說一個問題,我們是如何知道對方計算機的 IP 地址的呢?這個問題可能有人會覺得很白痴,心想,當然是計算機的操作者來進行輸入了。

其實當我們輸入這個域名時,會有一個叫做 DNS 伺服器的傢伙來幫我們解析這個域名,然後返回這個域名對應的 IP 給我們的。

因此,網路層的功能就是讓我們在茫茫人海中,能夠找到另一台計算機在哪裡,是否屬於同一個子網等。


傳輸層

通過物理層、數據鏈路層以及網路層的互相幫助,我們已經把數據成功從計算機 A 傳送到計算機 B 了,可是,計算機 B 裡面有各種各樣的應用程序,計算機該如何知道這些數據是給誰的呢?

這個時候,埠(Port)這個傢伙就上場了,也就是說,我們在從計算機 A 傳數據給計算表B的時候,還得指定一個埠,以供特定的應用程序來接受處理。

也就是說,傳輸層的功能就是建立埠到埠的通信。相比網路層的功能是建立主機到主機的通信。

也就是說,只有有了 IP 和埠,我們才能進行準確著通信。這個時候可能有人會說,我輸入 IP 地址的時候並沒有指定一個埠啊。

其實呢,對於有些傳輸協議,已經有設定了一些默認埠了。例如 http 的傳輸默認埠是 80,這些埠信息也會包含在數據包里的。

傳輸層最常見的兩大協議是 TCP 協議和 UDP 協議,其中 TCP 協議與 UDP 最大的不同就是 TCP 提供可靠的傳輸,而 UDP 提供的是不可靠傳輸。


應用層

終於說到應用層了,應用層這一層最接近我們用戶了。

雖然我們收到了傳輸層傳來的數據,可是這些傳過來的數據五花八門,有 html 格式的,有 mp4 格式的,各種各樣。你確定你能看的懂?

因此我們需要指定這些數據的格式規則,收到後才好解讀渲染。例如我們最常見的 Http 數據包中,就會指定該數據包是 什麼格式的文件了。


總結

五層模型至此講到這裡。對於有些層講的比較簡潔,就隨便概況了一下。因為如果我說的詳細一點的話,篇幅肯定會特別特別長,我著已經是盡最大的努力以最簡潔的方式來講的了。

如果你想詳細去了解,可以去買計算機網路相應的資料,強烈推薦《計算機網路:自頂向下》這本書。希望我的講解能讓你對計算機之間數據的傳輸有個大概的了解。

聲明:本文為作者個人投稿,版權歸其所有。文章廣告為微信自動匹配,與本平台無關,如遇假冒偽劣請聯繫微信進行舉報。

【End】

熱 文推 薦

喜歡就點擊「好看」吧!

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 CSDN 的精彩文章:

「5G 是個偽命題?」
王思聰也救不了熊貓直播了?

TAG:CSDN |