如何理解計(jì)算機(jī)網(wǎng)絡(luò)通信

經(jīng)典五層模型

一. 物理層

  • 兩臺(tái)計(jì)算機(jī)想要通信,按照實(shí)際也能想到需要連接介質(zhì):光纖,電纜,雙絞線等。
  • 這就是物理層,在計(jì)算機(jī)之間通過(guò)高低電頻來(lái)傳送0,1這樣的電信號(hào)。

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

  • 亂七八糟傳0,1電信號(hào)肯定不行啊,鬼知道你什么意思啊。
  • 這時(shí)候就需要規(guī)則了,數(shù)據(jù)鏈路層就是按照規(guī)則來(lái)組合0,1電信號(hào)。

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

image.png

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

對(duì)于表頭和數(shù)據(jù)這兩個(gè)部分,他們存放的都是一些什么數(shù)據(jù)呢? 毫無(wú)疑問,我們至少得知道這個(gè)楨是誰(shuí)發(fā)送,發(fā)送給誰(shuí)的等這些信息吧?所以標(biāo)頭部分主要是一些說(shuō)明數(shù)據(jù),例如發(fā)送者,接收者等信息。而數(shù)據(jù)部分則是這個(gè)數(shù)據(jù)包具體的,想給接收者的內(nèi)容。

一個(gè)楨的長(zhǎng)度是 64~1518 個(gè)字節(jié),也就是說(shuō)楨的長(zhǎng)度不是固定的,但是標(biāo)頭部分的字節(jié)長(zhǎng)度是固定的,每個(gè)楨都是單獨(dú)發(fā)的,并且固定為18個(gè)字節(jié)。

把一臺(tái)計(jì)算的的數(shù)據(jù)通過(guò)物理層鏈路層發(fā)送給另一臺(tái)計(jì)算機(jī),究竟是誰(shuí)發(fā)給誰(shuí)的,計(jì)算機(jī)與計(jì)算機(jī)之間如何區(qū)分,,你總得給他們一個(gè)唯一的標(biāo)識(shí)吧?

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

2. MAC 地址

連入網(wǎng)絡(luò)的每一個(gè)計(jì)算機(jī)都會(huì)有網(wǎng)卡接口,每一個(gè)網(wǎng)卡都會(huì)有一個(gè)唯一的地址,這個(gè)地址就叫做 MAC 地址。計(jì)算機(jī)之間的數(shù)據(jù)傳送,就是通過(guò) MAC 地址來(lái)唯一尋找、傳送的。

MAC地址 由 48 位二進(jìn)制數(shù)所構(gòu)成,在網(wǎng)卡生產(chǎn)時(shí)就被唯一標(biāo)識(shí)了。

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

(1). 廣播

image.png

如圖,假如計(jì)算機(jī) A 知道了計(jì)算機(jī) B 的 MAC 地址,然后計(jì)算機(jī) A 想要給計(jì)算機(jī) B 傳送數(shù)據(jù),雖然計(jì)算機(jī) A 知道了計(jì)算機(jī) B 的 MAC 地址,可是它要怎么給它傳送數(shù)據(jù)呢?計(jì)算機(jī) A 不僅連著計(jì)算機(jī) B,而且計(jì)算機(jī) A 也還連著其他的計(jì)算機(jī)。 雖然計(jì)算機(jī) A 知道計(jì)算機(jī) B 的 MAC 地址,可是計(jì)算機(jī) A 卻不知道計(jì)算機(jī) B 是分布在哪邊路線上,為了解決這個(gè)問題,于是,有了廣播的出現(xiàn)。

在同一個(gè)子網(wǎng)中,計(jì)算機(jī) A 要向計(jì)算機(jī) B 發(fā)送一個(gè)數(shù)據(jù)包,這個(gè)數(shù)據(jù)包會(huì)包含接收者的 MAC 地址。當(dāng)發(fā)送時(shí),計(jì)算機(jī) A 是通過(guò)廣播的方式發(fā)送的,這時(shí)同一個(gè)子網(wǎng)中的計(jì)算機(jī) C, D 也會(huì)收到這個(gè)數(shù)據(jù)包的,然后收到這個(gè)數(shù)據(jù)包的計(jì)算機(jī),會(huì)把數(shù)據(jù)包的 MAC 地址取出來(lái),與自身的 MAC 地址對(duì)比,如果兩者相同,則接受這個(gè)數(shù)據(jù)包,否則就丟棄這個(gè)數(shù)據(jù)包。

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

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

三. 網(wǎng)絡(luò)層

上面我們有說(shuō)到子網(wǎng)這個(gè)關(guān)鍵詞,實(shí)際上我們所處的網(wǎng)絡(luò),是由無(wú)數(shù)個(gè)子網(wǎng)絡(luò)構(gòu)成的。廣播的時(shí)候,也只有同一個(gè)子網(wǎng)里面的計(jì)算機(jī)能夠收到。

假如沒有子網(wǎng)這種劃分的話,計(jì)算機(jī) A 通過(guò)廣播的方式發(fā)一個(gè)數(shù)據(jù)包給計(jì)算機(jī) B , 其他所有計(jì)算機(jī)也都能收到這個(gè)數(shù)據(jù)包,然后進(jìn)行對(duì)比再舍棄。世界上有那么多臺(tái)計(jì)算機(jī),每一臺(tái)計(jì)算機(jī)都能收到其他所有計(jì)算機(jī)的數(shù)據(jù)包,那就不得了了。那還不得奔潰。 因此產(chǎn)生了子網(wǎng)這么一個(gè)東西。

那么問題來(lái)了,我們?nèi)绾螀^(qū)分哪些 MAC 地址是屬于同一個(gè)子網(wǎng)的呢?假如是同一個(gè)子網(wǎng),那我們就用廣播的形式把數(shù)據(jù)傳送給對(duì)方,如果不是同一個(gè)子網(wǎng)的,我們就會(huì)把數(shù)據(jù)發(fā)給網(wǎng)關(guān),讓網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)。

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

1. IP協(xié)議

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

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

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

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

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

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

image.png

那有了子網(wǎng)掩碼,如何來(lái)判端IP地址是否處于同一個(gè)子網(wǎng)中呢。顯然,知道了子網(wǎng)掩碼,相當(dāng)于我們知道了網(wǎng)絡(luò)部分是幾位,主機(jī)部分是幾位。我們只需要把 IP 地址與它的子網(wǎng)掩碼做與(and)運(yùn)算,然后把各自的結(jié)果進(jìn)行比較就行了,如果比較的結(jié)果相同,則代表是同一個(gè)子網(wǎng),否則不是同一個(gè)子網(wǎng)。

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

2. ARP協(xié)議

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

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

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

ARP協(xié)議也是通過(guò)廣播的形式給同一個(gè)子網(wǎng)中的每臺(tái)電腦發(fā)送一個(gè)數(shù)據(jù)包(當(dāng)然,這個(gè)數(shù)據(jù)包會(huì)包含接收方的IP地址,這個(gè)IP地址怎么來(lái)的,往下看)。對(duì)方收到這個(gè)數(shù)據(jù)包之后,會(huì)取出IP地址與自身的對(duì)比,如果相同,則把自己的MAC地址回復(fù)給對(duì)方,否則就丟棄這個(gè)數(shù)據(jù)包。這樣,計(jì)算機(jī)A就能知道計(jì)算機(jī)B的MAC地址了。

可能有人會(huì)問,知道了MAC地址之后,發(fā)送數(shù)據(jù)是通過(guò)廣播的形式發(fā)送,詢問對(duì)方的MAC地址也是通過(guò)廣播的形式來(lái)發(fā)送,那其他計(jì)算機(jī)怎么知道你是要傳送數(shù)據(jù)還是要詢問MAC地址呢?其實(shí)在詢問MAC地址的數(shù)據(jù)包中,在對(duì)方的MAC地址這一欄中,填的是一個(gè)特殊的MAC地址,其他計(jì)算機(jī)看到這個(gè)特殊的MAC地址之后,就能知道廣播想干嘛了。

假如兩臺(tái)計(jì)算機(jī)的IP不是處于同一個(gè)子網(wǎng)之中,這個(gè)時(shí)候,我們就會(huì)把數(shù)據(jù)包發(fā)送給網(wǎng)關(guān),然后讓網(wǎng)關(guān)讓我們進(jìn)行轉(zhuǎn)發(fā)傳送

3. DNS服務(wù)器

這里再說(shuō)一個(gè)問題,我們是如何知道對(duì)方計(jì)算機(jī)的IP地址的呢?這個(gè)問題可能有人會(huì)覺得很白癡,心想,當(dāng)然是計(jì)算機(jī)的操作者來(lái)進(jìn)行輸入了。這沒錯(cuò),當(dāng)我們想要訪問某個(gè)網(wǎng)站的時(shí)候,我們可以輸入IP來(lái)進(jìn)行訪問,但是我相信絕大多數(shù)人是輸入一個(gè)網(wǎng)址域名的,例如訪問百度是輸入 http://www.baidu.com 這個(gè)域名。其實(shí)當(dāng)我們輸入這個(gè)域名時(shí),會(huì)有一個(gè)叫做DNS服務(wù)器的家伙來(lái)幫我們解析這個(gè)域名,然后返回這個(gè)域名對(duì)應(yīng)的IP給我們的。

因此,網(wǎng)絡(luò)層的功能就是讓我們?cè)诿CH撕V?,能夠找到另一臺(tái)計(jì)算機(jī)在哪里,是否屬于同一個(gè)子網(wǎng)等。

四. 傳輸層

通過(guò)物理層、數(shù)據(jù)鏈路層以及網(wǎng)絡(luò)層的互相幫助,我們已經(jīng)把數(shù)據(jù)成功從計(jì)算機(jī)A傳送到計(jì)算機(jī)B了,可是,計(jì)算機(jī)B里面有各種各樣的應(yīng)用程序,計(jì)算機(jī)該如何知道這些數(shù)據(jù)是給誰(shuí)的呢?

這個(gè)時(shí)候,端口(Port)這個(gè)家伙就上場(chǎng)了,也就是說(shuō),我們?cè)趶挠?jì)算機(jī)A傳數(shù)據(jù)給計(jì)算表B的時(shí)候,還得指定一個(gè)端口,以供特定的應(yīng)用程序來(lái)接受處理。

也就是說(shuō),傳輸層的功能就是建立端口到端口的通信。相比網(wǎng)絡(luò)層的功能是建立主機(jī)到主機(jī)的通信。

也就是說(shuō),只有有了IP和端口,我們才能進(jìn)行準(zhǔn)確著通信。這個(gè)時(shí)候可能有人會(huì)說(shuō),我輸入IP地址的時(shí)候并沒有指定一個(gè)端口啊。其實(shí)呢,對(duì)于有些傳輸協(xié)議,已經(jīng)有設(shè)定了一些默認(rèn)端口了。例如http的傳輸默認(rèn)端口是80,這些端口信息也會(huì)包含在數(shù)據(jù)包里的。

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

五. 應(yīng)用層

終于說(shuō)到應(yīng)用層了,應(yīng)用層這一層最接近我們用戶了。

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

因此我們需要指定這些數(shù)據(jù)的格式規(guī)則,收到后才好解讀渲染。例如我們最常見的 Http 數(shù)據(jù)包中,就會(huì)指定該數(shù)據(jù)包是 什么格式的文件了。

喜歡點(diǎn)個(gè)贊

原文看這里

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容