自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

兩臺計算機天各一方,是如何把數(shù)據(jù)發(fā)送給對方的?有多少人被五層模型勸退?

網(wǎng)絡 通信技術
其實在學習網(wǎng)絡通信那會我就很奇怪,天各一方的兩臺計算機是如何通信的呢?也就是說,在成千上萬的計算機中,為什么一臺計算機能夠準確著尋找到另外一臺計算機,并且把數(shù)據(jù)發(fā)送給它呢?為什么有了 MAC 地址還需要 IP 呢?

 今天的這一篇,算是開篇,其實這篇文章,我在之前發(fā)過,不過省略了很多內(nèi)容,今天我把這篇文章給完善了,由于這篇文章涉及到非常多的知識,我覺得作為計算機網(wǎng)絡的開篇,是非常合適的,它可以讓大家先有個概念,后面將會圍繞這些知識深入展開分析,大家敬請期待!

[[325145]]

我學計網(wǎng)時的疑惑

其實在學習網(wǎng)絡通信那會我就很奇怪,天各一方的兩臺計算機是如何通信的呢?也就是說,在成千上萬的計算機中,為什么一臺計算機能夠準確著尋找到另外一臺計算機,并且把數(shù)據(jù)發(fā)送給它呢?為什么有了 MAC 地址還需要 IP 呢?一臺主機里面那么多的應用程序,是如何正確發(fā)給對應的程序呢?怎么保證數(shù)據(jù)正確交付?怎么保證數(shù)據(jù)不會被篡改?等等

對于剛學習計算機網(wǎng)絡的同學,可能都聽說過網(wǎng)絡通信的 5 層模型,教科書里可能會告訴你為什么要分層,然而,結果是你可能看了教科書對應的解釋之后仍然一臉懵逼。

當然,你可能還聽說過四層模型,七層模型,不過,五層模型應該是用的比較廣泛的,五層模型大概長這樣

 

說實話,五層模型的具體內(nèi)容還是極其復雜的,不過今天這篇文章,我將用最簡潔的模式,通過網(wǎng)絡通信的五層模型來講解一臺計算機是如何找到另外一臺計算機并且把數(shù)據(jù)發(fā)送給另一臺計算機的,通過這篇文章,相信可以讓你大致了解五層模型以及網(wǎng)絡通信的一些原理。而且,就算你還沒學過計算機網(wǎng)絡,只有聽說過 ip,端口這些名詞,相信你也是能夠看的懂這篇文章的。

一、物理層

如果一臺計算機要傳輸數(shù)據(jù)給另外一臺計算機,第一件要做的事是什么?最容易想到的就是要把這臺計算機通過某種介質與另外一臺計算機連起來啊,這樣,我們才能把數(shù)據(jù)傳輸過去。例如可以通過光纖啊,電纜啊,雙絞線啊等介質把他們連接起來,然后我們就可以通過這些介質,把數(shù)據(jù)輸出給目標計算機了。

 

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

二、數(shù)據(jù)鏈路層

前面說了,物理層它只是單純著負責把計算機連接起來,并且在計算機之間傳輸0,1這樣的電信號,因為計算機的大腦比較簡單,只認識 0 和 1,并且還是通過高低電壓來區(qū)分的。

很顯然,如果這些 0,1 組合的數(shù)據(jù)毫無規(guī)則的話,計算機是解讀不了的。一大堆0,1誰知道是什么鬼啊。

 

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

于是,有了以太網(wǎng)協(xié)議。

1. 以太網(wǎng)協(xié)議

以太網(wǎng)協(xié)議規(guī)定,一組電信號構成一個數(shù)據(jù)包,我們把這個數(shù)據(jù)包稱之為幀。每一個楨由標頭(Head)和數(shù)據(jù)(Data)兩部分組成。

 

幀的大小一般為 64 - 1518 個字節(jié)。假如需要傳送的數(shù)據(jù)很大的話,就分成多個楨來進行傳送。

對于表頭和數(shù)據(jù)這兩個部分,他們存放的都是一些什么數(shù)據(jù)呢?我猜你瞇著眼睛都能想到他們應該放什么數(shù)據(jù)。 毫無疑問,我們至少得知道這個楨是誰發(fā)送,發(fā)送給誰的等這些信息吧?所以標頭部分主要是一些說明數(shù)據(jù),例如發(fā)送者,接收者等信息。而數(shù)據(jù)部分則是這個數(shù)據(jù)包具體的,想給接收者的內(nèi)容。

大家想一個問題,一個楨的長度是 64~1518 個字節(jié),也就是說楨的長度不是固定的,那你覺得標頭部分的字節(jié)長度是固定的嗎?它當然是固定的啊,假如不是固定的,每個楨都是單獨發(fā)的,那計算機怎么知道標頭是幾個字節(jié),數(shù)據(jù)是幾個字節(jié)呢。所以標頭部分的字節(jié)是固定的,并且固定為18個字節(jié)。

把一臺計算的的數(shù)據(jù)通過物理層和鏈路層發(fā)送給另一臺計算機,究竟是誰發(fā)給誰的,計算機與計算機之間如何區(qū)分,,你總得給他們一個唯一的標識吧?

于是,MAC 地址出現(xiàn)了。

2. MAC 地址

連入網(wǎng)絡的每一個計算機都會有網(wǎng)卡接口,每一個網(wǎng)卡都會有一個唯一的地址,這個地址我們稱之為 MAC 地址。計算機之間的數(shù)據(jù)傳送,就是通過 MAC 地址來唯一確定身份的。

 

MAC地址 由 48 個比特所構成,在網(wǎng)卡生產(chǎn)時就被唯一標識了。

3. 廣播與ARP協(xié)議

(1). 廣播

 

如圖,假如計算機 A 知道了計算機 B 的 MAC 地址,然后計算機 A 想要給計算機 B 傳送數(shù)據(jù),雖然計算機 A 知道了計算機 B 的 MAC 地址,可是它要怎么給它傳送數(shù)據(jù)呢?和計算機 A 連接在一起的計算機有很多臺,雖然計算機 A 知道計算機 B 的 MAC 地址,可是計算機 A 卻不知道知道計算機 B 是分布在哪條路線上,為了解決這個問題,于是,有了廣播的出現(xiàn)。

在同一個子網(wǎng)中,計算機 A 要向計算機 B 發(fā)送一個數(shù)據(jù)包,這個數(shù)據(jù)包會包含接收者的 MAC 地址。當發(fā)送時,計算機 A 是通過廣播的方式發(fā)送的,這時同一個子網(wǎng)中的計算機 C, D 也會收到這個數(shù)據(jù)包的,然后收到這個數(shù)據(jù)包的計算機,會把數(shù)據(jù)包的 MAC 地址取出來,與自身的 MAC 地址對比,如果兩者相同,則接受這個數(shù)據(jù)包,否則就丟棄這個數(shù)據(jù)包。這種發(fā)送方式我們稱之為廣播,這就如同,我們在廣場上通過廣播的形式呼叫某個人一樣,如果這個名字是你,你就理會一下,如果不是你,你就當作聽不見。

(2). ARP 協(xié)議。

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

三、網(wǎng)絡層

1、子網(wǎng)

上面我們有說到子網(wǎng)這個關鍵詞,實際上我們所處的網(wǎng)絡,是由無數(shù)個子網(wǎng)絡構成的。廣播的時候,也只有同一個子網(wǎng)里面的計算機能夠收到。

假如沒有子網(wǎng)這種劃分的話,計算機 A 通過廣播的方式發(fā)一個數(shù)據(jù)包給計算機 B , 其他所有計算機也都能收到這個數(shù)據(jù)包,然后進行對比再舍棄。世界上有那么多它計算機,每一臺計算機都能收到其他所有計算機的數(shù)據(jù)包,那就不得了了。那還不得奔潰,于是,就有了子網(wǎng)這個概念。

那么問題來了,我們?nèi)绾螀^(qū)分哪些 MAC 地址是屬于同一個子網(wǎng)的呢?

假如是同一個子網(wǎng),那我們就用廣播的形式把數(shù)據(jù)傳送給對方,如果不是同一個子網(wǎng)的,我們就會把數(shù)據(jù)發(fā)給網(wǎng)關,讓網(wǎng)關進行轉發(fā)。

為了解決這個問題,于是,有了 IP 協(xié)議。

2、IP協(xié)議

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

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

每一臺想要聯(lián)網(wǎng)的計算機都會有一個IP地址。這個 IP 地址被分為兩部分,前面一部分代表網(wǎng)絡部分,后面一部分代表主機部分。并且網(wǎng)絡部分和主機部分所占用的二進制位數(shù)是不固定的。

剛才我們扯了子網(wǎng),然而并沒有說什么是子網(wǎng),那么什么是子網(wǎng)呢?

假如兩臺計算機的網(wǎng)絡部分是一模一樣的,我們就說這兩臺計算機是處于同一個子網(wǎng)中。例如 192.168.43.1 和 192.168.43.2, 假如這兩個 IP 地址的網(wǎng)絡部分為 24 位,主機部分為 8 位。那么他們的網(wǎng)絡部分都為 192.168.43,所以他們處于同一個子網(wǎng)中。

可是問題來了,你怎么知道網(wǎng)絡部分是占幾位,主機部分又是占幾位呢?也就是說,單單從兩臺計算機的IP地址,我們是無法判斷他們的是否處于同一個子網(wǎng)中的。

這就引申出了另一個關鍵詞————子網(wǎng)掩碼。子網(wǎng)掩碼和 IP 地址一樣也是 32 位的二進制數(shù),不過它的網(wǎng)絡部分全部被規(guī)定為 1,主機部分全部規(guī)定為 0,也就是說,假如上面那兩個IP地址的網(wǎng)絡部分為 24 位,主機部分為 8 位的話,那他們的子網(wǎng)掩碼都為 11111111.11111111.11111111.00000000,用十進制表示的話,就是 255.255.255.0。

 

那有了子網(wǎng)掩碼,如何來判斷IP地址是否處于同一個子網(wǎng)中呢?

顯然,知道了子網(wǎng)掩碼,通過子網(wǎng)掩碼前半部分 1 的個數(shù)和后半部分 0 點個數(shù),,我們可以知道 IP 地址的網(wǎng)絡部分是幾位,主機部分是幾位。然后我們只需要把 IP 地址與它的子網(wǎng)掩碼做與(and)運算,再把各自的結果進行比較就行了,如果比較的結果相同,則代表是同一個子網(wǎng),否則不是同一個子網(wǎng)。

例如,192.168.43.1 和 192.168.43.2 的子碼掩碼都為 255.255.255.0,把IP與子碼掩碼做與運算,可以得到他們都為 192.168.43.0,進而他們處于同一個子網(wǎng)中。

3、ARP協(xié)議

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

有了兩臺計算機的 IP 地址與子網(wǎng)掩碼,我們就可以判斷出它們是否處于同一個子網(wǎng)之中了。

假如他們處于同一個子網(wǎng)之中,計算機 A 要給計算機 B 發(fā)送數(shù)據(jù)時,我們可以通過 ARP 協(xié)議來得到計算機 B 的 MAC 地址。

ARP 協(xié)議會通過廣播的形式給同一個子網(wǎng)中的每臺電腦發(fā)送一個數(shù)據(jù)包(當然,這個數(shù)據(jù)包會包含接收方的 IP 地址,例如 計算機 B 的 IP 地址)。子網(wǎng)中的計算機收到這個數(shù)據(jù)包之后,會取出數(shù)據(jù)包中的 IP 地址與自身的 IP 對比,如果相同,則把自己的 MAC 地址回復給對方,否則就丟棄這個數(shù)據(jù)包。這樣,計算機 A 就能知道計算機 B 的 MAC 地址了。

而這種通過廣播獲取對方 MAC 地址的協(xié)議,我們也稱之為 ARP 協(xié)議。

 

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

為了解決這個問題,其實我們可以做一些約定。如果是要獲取地方的 MAC 地址,我們可以在發(fā)廣播的時候,在對方的 MAC 地址這一欄中,填一個特殊的 MAC 地址,其他計算機看到這個特殊的 MAC 地址之后,就能知道廣播是想獲取 MAC 地址了。

假如兩臺計算機的 IP 不是處于同一個子網(wǎng)之中,這個時候,我們就會把數(shù)據(jù)包發(fā)送給網(wǎng)關,然后讓網(wǎng)關幫我們進行轉發(fā)。

4、 DNS服務器

有人可能會問,在使用 ARP 協(xié)議獲取對方的 MAC 地址的時候,我們是需要知道對應的 IP 地址的,有人可能會問,我們是如何知道對方計算機的 IP 地址的呢?

這個問題可能有人會覺得很白癡,心想,當然是計算機的操作者來進行輸入了。這沒錯,當我們想要訪問某個網(wǎng)站的時候,我們可以輸入IP來進行訪問,但是我相信絕大多數(shù)人是通過輸入一個網(wǎng)址來進行訪問的,因為網(wǎng)址容易記,而 IP地址,太特么難記了。例如訪問百度是輸入 www.baidu.com 這個域名。

其實,當我們輸入這個域名時,會有一個叫做 DNS 服務器的家伙來幫我們解析這個域名,通過 DNS 服務器的幫忙,我們就可以獲取到對應的 IP 地址了。

因此,網(wǎng)絡層的功能就是讓我們在茫茫人海中,能夠找到另一臺計算機在哪里,是否屬于同一個子網(wǎng)等。

四、傳輸層

通過網(wǎng)絡層的 IP 地址,我們可以知道對方位于哪一個子網(wǎng)之中,通過 ARP 協(xié)議,我們知道了對方的 MAC地址,通過廣播發(fā)送數(shù)據(jù)包,我們成功把數(shù)據(jù)包發(fā)給了對方。

也就是說,通過物理層、數(shù)據(jù)鏈路層以及網(wǎng)絡層的互相幫助,我們已經(jīng)把數(shù)據(jù)成功從計算機 A 傳送到計算機 B 了??墒?,計算機 B 里面有各種各樣的應用程序,計算機該把這些數(shù)據(jù)發(fā)給誰的呢?

為了解決這個問題,我們需要給每個程序做一個表示,于是,端口(Port)這個家伙就上場了,每個應該程序啟動時,都有產(chǎn)生一個進程,而每一個想要接受網(wǎng)絡數(shù)據(jù)的進程,都會給他分配一個端口號。

和網(wǎng)絡層相比,傳輸層的功能就是建立端口到端口的通信,而網(wǎng)絡層的功能是建立主機到主機的通信。

也就是說,只要有了IP和端口,我們才能進行準確著通信。這個時候有人可能會說,我在瀏覽器輸入 IP 地址或者網(wǎng)址的的時候并沒有指定一個端口啊。其實呢,對于有些傳輸協(xié)議,已經(jīng)有設定了一些默認端口了。例如 http 的傳輸默認端口是80,也就是說,雖然你在輸入地址時沒有指定端口時,會默認幫你指定 80 這個端口,而這些端口信息也會包含在數(shù)據(jù)包里的。

TCP 和 UDP

有人可能會問,在傳輸數(shù)據(jù)包的時候,萬一有些數(shù)據(jù)包丟了怎么辦?萬一數(shù)據(jù)包里的數(shù)據(jù)出現(xiàn)了錯誤怎么辦?

其實,在傳輸層,主要有兩大協(xié)議,分別是 TCP 和 UDP,TCP 是一種可靠傳輸協(xié)議,什么是可靠?意思就是 TCP 協(xié)議可以保證數(shù)據(jù)正確傳輸,不用擔心數(shù)據(jù)包丟了出現(xiàn)數(shù)據(jù)缺失,TCP 協(xié)議還擁有流量控制和擁塞控制等功能。

關于 TCP 和 UDP 協(xié)議的故事,我們后面再講。

五、 應用層

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

我們前面的四層,我們的應用程序終于收到了數(shù)據(jù),可是,計算機只認識 0 和 1,我們收到的數(shù)據(jù)也都是 0 和 1 的組合。通過前面說的以太網(wǎng)協(xié)議楨,雖然我們可以把這些 0 和 1 進行組合,知道了多少個 0 和 1 為一組。

但是,單單依靠這些是不夠的,對于不同格式以及不同編碼的數(shù)據(jù),我們的渲染方式和解碼是不同,例如對于 html,mp3,txt 等格式,我們會采取不同的處理方式。

我們該如何知道收到的數(shù)據(jù)是什么格式的呢?

這,就是應用層需要幫我們搞定的事情了。對于應用層協(xié)議,最常見的就是 http 協(xié)議了,我們可以從 http 數(shù)據(jù)包中,看到這些數(shù)據(jù)的格式,編碼方式等,有了這些格式、編碼的說明,我們就可以根據(jù)對應的規(guī)則來進行解碼,渲染了。

總結

這篇文章,通過講解一臺計算機是如何找到另外一臺計算機并且把數(shù)據(jù)發(fā)送給另一臺計算機的,向大家介紹了網(wǎng)絡通信的五層模型。

并且為了讓大家容易懂,為屏蔽了很多細節(jié),這也導致了我的一些講解,可能不是那么的嚴謹。沒辦法,有時候嚴謹,就意味著晦澀難懂,而我這篇文章,選擇了先讓大家有個大概的模型,后面再圍繞著這些知識點來講解,例如 https 是如何保證數(shù)據(jù)不被篡改的啊,DNS 又是如何找到 IP的啊……總之,每個協(xié)議,深入下去的話,都有非常多可以講的知識,并且這些基礎知識,對一個人的影響,是潛移默化的。

本文轉載自微信公眾號「帥地玩編程」,可以通過以下二維碼關注。轉載本文請聯(lián)系帥地玩編程公眾號。

 

責任編輯:武曉燕 來源: 帥地玩編程
相關推薦

2023-07-02 16:53:34

計算機網(wǎng)絡網(wǎng)絡

2014-11-25 15:36:47

雙主機計算機ITM

2024-02-20 08:23:35

LookupSpringbeans

2009-11-03 22:38:11

安全數(shù)據(jù)

2013-08-20 15:27:59

Linux操作系統(tǒng)

2023-04-09 15:23:58

Python編程開發(fā)

2018-09-30 14:45:15

IPFSHTTP互聯(lián)網(wǎng)協(xié)議

2019-08-08 16:27:36

自動駕駛無人駕駛駕駛

2011-10-17 09:50:38

編程

2013-07-22 10:28:00

大數(shù)據(jù)谷歌亞馬遜

2009-09-29 09:21:39

計算機60年

2020-04-02 14:33:42

MySQLBUG解決方案

2009-09-16 16:18:51

2021-09-03 08:48:22

路由協(xié)議計算機通信

2010-08-30 11:12:42

2009-08-13 11:00:09

WindowsLinuxlinux操作系統(tǒng)

2020-07-20 09:40:49

MySQLBUG數(shù)據(jù)庫

2022-11-12 12:32:39

.NET微軟

2010-07-01 14:35:57

Windows 7
點贊
收藏

51CTO技術棧公眾號