大白話談互聯(lián)網(wǎng)協(xié)議

你的問題

在這個寧肯不吃一頓飯,不可斷一小時網(wǎng)的時代里,我們對網(wǎng)絡(luò)的依賴已經(jīng)達(dá)到了無以復(fù)加的地步,雖然我們每天在使用網(wǎng)絡(luò),卻并不清楚網(wǎng)絡(luò)通訊到底是如何進(jìn)行的?

比如,你在微信里給苦追了好久的姑娘發(fā)送了一條約會消息,她收到了,并且在微信上回復(fù)給你“不好意思,我今晚有約了”,但是這可能是個誤會,你發(fā)送的消息為什么可以成功到達(dá)她的手機(jī)上,而不是被遠(yuǎn)在大洋彼岸的川普收到呢?她在手機(jī)上看到這條消息后,回復(fù)給你一條拒絕的消息,這條消息也準(zhǔn)確無誤的被你所接收,本來打算和姑娘一塊看電影的計劃泡湯了,雖然你這時候心情很糟,但你也無事可做,所以打算研究研究這該死的網(wǎng)絡(luò)通訊協(xié)議??纯礊槭裁茨惆l(fā)給妹子的消息沒有發(fā)到川普的手機(jī)上。

簡單分析

我們先來看看你給姑娘發(fā)送消息這一過程,它的背后到底發(fā)生了什么。首先,你編輯了一條消息,點(diǎn)擊了發(fā)送按鈕,這時這條消息會被經(jīng)過包裝,然后發(fā)送至騰訊的服務(wù)器上,包裝的過程中,會把發(fā)送人、接收人、消息內(nèi)容等等信息整合在一起,騰訊的服務(wù)器接收的這條信息之后,對應(yīng)的程序就會對這條消息進(jìn)行處理計算,從而得知要把什么內(nèi)容發(fā)送給什么人,然后服務(wù)器也將這一信息進(jìn)行包裝處理,發(fā)送出去,之后姑娘收到消息。這只是一個簡單的消息傳遞流程,要想真正搞清楚消息是怎么發(fā)送的,還需要了解互聯(lián)網(wǎng)通訊的原理。

協(xié)議

首先我們要知道協(xié)議是什么?其實(shí)很簡單,協(xié)議其實(shí)就是一種規(guī)則。比如在社會中,我們有法律來約束每個人的行為,法律就可以看做是一種面向公民的“協(xié)議”。在互聯(lián)網(wǎng)上我們同樣需要一些規(guī)則來約束各個主機(jī)設(shè)備或程序的行為,那么這個規(guī)則就是互聯(lián)網(wǎng)協(xié)議。接下來我們會介紹互聯(lián)網(wǎng)分層模型,互聯(lián)網(wǎng)的每一層都有其特定的功能,要實(shí)現(xiàn)這特定的功能就要有對應(yīng)的協(xié)議。

互聯(lián)網(wǎng)分層模型

為了便于理解,我們一般可以將互聯(lián)網(wǎng)通訊模型分為五層,每個層都有它自己的功能。物理層是最底層,應(yīng)用層是最高層,中間分別是鏈路層、網(wǎng)絡(luò)層和傳輸層,其每一層都是建立在上一層的基礎(chǔ)上的。

osi七層模型可理解為五層模型

(一)物理層

你想給姑娘發(fā)送一條消息,首先你得有個手機(jī)(這TM不是廢話),其次,你的手機(jī)得連上網(wǎng)(這TM也是廢話),或許你這條消息是用電腦版的微信發(fā)送的,那無論你是插網(wǎng)線還是連WIFI,都需要你成功接入互聯(lián)網(wǎng)。

這些連接線路就是互聯(lián)網(wǎng)的物理層,物理層主要功能是提供了數(shù)據(jù)傳輸?shù)慕橘|(zhì),使得電信號可以在設(shè)備之間傳播,這里的電信號也可以簡單的理解為0或1。

(二)鏈路層

物理層為我們提供了在兩臺設(shè)備之間傳輸0和1的可能,但是只是單純的傳輸0和1是沒有意義的。鏈路層的作用是將這些01信號序列化,轉(zhuǎn)化為有意義的數(shù)據(jù)幀。

那么鏈路層是怎么工作的呢?它工作過程大概可以理解為三個部分,發(fā)送什么數(shù)據(jù)?發(fā)送給誰?怎么發(fā)送?

  1. 首先需要有一個規(guī)則來定義這些01電信號,使得這些電信號變得有意義,這個規(guī)則就是以太網(wǎng)協(xié)議(Ethernet),它規(guī)定了一組電信號為一個數(shù)據(jù)包,每個數(shù)據(jù)包都分標(biāo)頭(head)和數(shù)據(jù)(data)。標(biāo)頭用來存儲發(fā)送人、接收人、數(shù)據(jù)類型等等,數(shù)據(jù)部分就是消息內(nèi)容。這就解決了發(fā)送什么消息的問題。

  2. 定義好了數(shù)據(jù),我們就該考慮發(fā)送給誰的問題了,每臺設(shè)備都有自己的一個地址,叫做MAC地址。MAC地址在設(shè)備出廠時就已經(jīng)固定了,這個地址在全世界是獨(dú)一無二的,這樣我們就可以通過這個地址去向目標(biāo)設(shè)備發(fā)送數(shù)據(jù)。

  3. 雖然我們知道了目標(biāo)設(shè)備的MAC地址,但是怎么才能把把消息準(zhǔn)確的發(fā)送給目標(biāo)設(shè)備呢?其實(shí)解決方法很簡單,發(fā)送數(shù)據(jù)時,將向網(wǎng)絡(luò)中所有設(shè)備都發(fā)送這個消息,然后每一臺設(shè)備自己來判斷數(shù)據(jù)標(biāo)頭中包含的MAC地址是否和自己的MAC地址一致,如果一致就接收這個消息,如果不一致就不接收。這種發(fā)送數(shù)據(jù)的方式叫做“廣播”。通過“廣播”的方式就可以把一條數(shù)據(jù)發(fā)送到指定設(shè)備上了。

好了,讓我們再來看看發(fā)送數(shù)據(jù)這個過程,如我們上面所說,你想給姑娘發(fā)送一條消息,得通過通訊線纜傳輸0或1這種信號,然后有一種叫以太網(wǎng)協(xié)議的東西可以幫你把01信號轉(zhuǎn)化為有意義的數(shù)據(jù),之后你的手機(jī)向網(wǎng)絡(luò)中所有設(shè)備發(fā)出這條消息,姑娘的手機(jī)發(fā)現(xiàn)這條數(shù)據(jù)是發(fā)給她的,便接受了這條數(shù)據(jù),其他人的設(shè)備發(fā)現(xiàn)數(shù)據(jù)中包含的MAC地址和自己的MAC地址不符合,說明這條數(shù)據(jù)是發(fā)送給其他人的,便不接收這條數(shù)據(jù)。這樣便達(dá)到了發(fā)送給姑娘消息的效果。

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

我們知道全球的可聯(lián)網(wǎng)設(shè)備都在一個巨型網(wǎng)絡(luò)下,按我們上面所說,你的消息會發(fā)送給網(wǎng)絡(luò)內(nèi)所有設(shè)備,這么說來你的這條消息還是發(fā)給川普了嘛,只是人家沒有接收而已。其實(shí),并非如此,如果每發(fā)送一條消息都會發(fā)送給互聯(lián)網(wǎng)上的所有人,那以互聯(lián)網(wǎng)這么大的體量,早就癱瘓了。

實(shí)際上,“廣播”的方式只能在同一子網(wǎng)絡(luò)內(nèi)發(fā)送數(shù)據(jù),互聯(lián)網(wǎng)是由非常多的子網(wǎng)絡(luò)組成的巨型網(wǎng)絡(luò),所以你發(fā)給姑娘的消息川普是絕對收不到的。

看到這里你肯定已經(jīng)明白了,網(wǎng)絡(luò)層的作用是可以讓數(shù)據(jù)在不同子網(wǎng)絡(luò)之間也可以傳遞。最常見的網(wǎng)路層通訊協(xié)議就是IP協(xié)議。

3.1 IP地址

雖然每臺設(shè)備都有自己獨(dú)有的MAC地址,但是通過MAC地址我們是無法判斷該設(shè)備是屬于那個子網(wǎng)絡(luò)的,所以我們引入了一種其他的地址,叫做IP地址,也稱為“網(wǎng)址”。目前最常使用的是IPv4,是IP協(xié)議的第四版。IPv4規(guī)定網(wǎng)址是由32位二進(jìn)制數(shù)組成,通常以四段10進(jìn)制數(shù)表示,從0.0.0.0到255.255.255.255,例如:192.168.1.1就是一個IPv4地址。

3.2 子網(wǎng)掩碼

有了兩臺設(shè)備的IP地址,我們該如何判斷兩臺設(shè)備是不是處在同一子網(wǎng)絡(luò)下呢?這時候就需要另外一種叫做“子網(wǎng)掩碼”的參數(shù)了,“子網(wǎng)掩碼”同IP地址十分類似,也是由32位二進(jìn)制數(shù)組成,不過它的網(wǎng)絡(luò)部分全部為1,主機(jī)部分全部為0,那么什么是網(wǎng)絡(luò)部分?什么是主機(jī)部分呢?

舉例來說,IP地址為192.168.1.1,子網(wǎng)掩碼為“255.255.255.0”,就表示此IP的前24位為網(wǎng)絡(luò)部分,后8位為主機(jī)部分。也就是說通過“子網(wǎng)掩碼”可以確定一個IP地址的網(wǎng)絡(luò)部分和主機(jī)部分。那么問題就變得簡單了,如果兩臺設(shè)備的IP地址網(wǎng)絡(luò)部分是相同的,那么他們就處在同一子網(wǎng)絡(luò)。

例如:A設(shè)備的IP地址為172.12.214.3,子網(wǎng)掩碼為255.255.0.0,B設(shè)備的IP地址為172.12.213.1,子網(wǎng)掩碼同為255.255.0.0,則可以判斷出A設(shè)備與B設(shè)備處在同一子網(wǎng)絡(luò)下。

3.3 相同子網(wǎng)絡(luò)間的數(shù)據(jù)傳輸

好了,看起來費(fèi)了好大的勁來判斷兩臺設(shè)備是不是處于同一網(wǎng)絡(luò)下,但是相信我,費(fèi)這么大功夫是絕對值得的。我們馬上就可以在互聯(lián)網(wǎng)上任意兩臺設(shè)備間發(fā)送數(shù)據(jù)了。首先我們要了解,我們想要發(fā)送數(shù)據(jù),就必須知道目標(biāo)設(shè)備的IP地址和MAC地址。

通過IP協(xié)議,我們可以判斷出要傳輸數(shù)據(jù)的兩臺設(shè)備是否是在同一子網(wǎng)絡(luò),那現(xiàn)在就會有兩種情況,第一種情況是,兩臺設(shè)備處在同一子網(wǎng)絡(luò)下,那我們就可以利用“廣播”方式去發(fā)送數(shù)據(jù)了,但是問題來了,知道目標(biāo)設(shè)備的IP地址,如何獲得目標(biāo)的MAC地址呢?這時候ARP協(xié)議就登場了。

ARP協(xié)議的作用可以簡單的認(rèn)為是通過IP地址來獲取同一子網(wǎng)絡(luò)中設(shè)備的MAC地址,那它是如何工作的,其實(shí)也很簡單,它也是通過“廣播”的方式向子網(wǎng)絡(luò)內(nèi)所有設(shè)備發(fā)送一條數(shù)據(jù)包,數(shù)據(jù)包中的MAC地址填寫為:FF:FF:FF:FF:FF:FF,這樣當(dāng)其他設(shè)備收到這條數(shù)據(jù)的時候,就會對比自身的IP與數(shù)據(jù)包中的IP是否一致,若不一致就丟棄這條數(shù)據(jù),若一致就接收這一條數(shù)據(jù),并匯報自己的MAC地址,這樣就可以通過IP地址獲取到MAC地址了。

現(xiàn)在我們就可以在兩臺設(shè)備(同一子網(wǎng)絡(luò))間通訊了。

3.4 不同子網(wǎng)絡(luò)間的數(shù)據(jù)傳輸

第二種情況是,要傳輸數(shù)據(jù)的兩臺設(shè)備,不在同一子網(wǎng)絡(luò)下,我們知道,要想把數(shù)據(jù)準(zhǔn)確發(fā)送到目標(biāo)設(shè)備中,就必須知道兩個地址

  • 目標(biāo)設(shè)備的IP地址
  • 目標(biāo)設(shè)備的MAC地址

但是,不同子網(wǎng)絡(luò)間的兩臺設(shè)備,是無法獲取到對方的MAC地址的,這時候只能將數(shù)據(jù)包發(fā)送給網(wǎng)關(guān),網(wǎng)關(guān)通過路由協(xié)議再將數(shù)據(jù)發(fā)送到目標(biāo)設(shè)備上。所以這時候需要知道的地址就變成了

  • 目標(biāo)設(shè)備的IP地址
  • 網(wǎng)關(guān)的MAC地址

如圖,主機(jī)2想向主機(jī)4發(fā)送一條數(shù)據(jù),必須先將數(shù)據(jù)發(fā)送至網(wǎng)關(guān)A,由網(wǎng)關(guān)A通過路由協(xié)議查詢到主機(jī)4處于子網(wǎng)絡(luò)B,網(wǎng)關(guān)A會將數(shù)據(jù)發(fā)送給網(wǎng)關(guān)B,網(wǎng)關(guān)B再將數(shù)據(jù)發(fā)送給主機(jī)4,這樣便完成了主機(jī)2到主機(jī)4之間的通訊。

至此,我們應(yīng)該清楚了,在兩臺設(shè)備間通訊所必須的條件,首先我們需要判斷兩臺設(shè)備是否處在同一子網(wǎng)絡(luò)中,若在同一子網(wǎng)絡(luò),就可以利用ARP協(xié)議來獲取MAC地址,得到目標(biāo)IP和MAC地址,就可以發(fā)送數(shù)據(jù)。若不在同一子網(wǎng)絡(luò),則需要獲取網(wǎng)關(guān)的MAC地址,將數(shù)據(jù)發(fā)送到網(wǎng)關(guān),讓網(wǎng)關(guān)來轉(zhuǎn)發(fā)。現(xiàn)在我們就可以在互聯(lián)網(wǎng)上任意兩臺設(shè)備間通訊了。

(四)傳輸層

通過上面的介紹,我們已經(jīng)知道了兩臺設(shè)備之間是如何通訊的了,但是,當(dāng)你收到姑娘回給你微信消息的同時,你的手機(jī)還在線播放著久石讓的《summer》,那么問題又來了,你的手機(jī)同時接收著兩種數(shù)據(jù),那系統(tǒng)為什么不會把微信的數(shù)據(jù)和網(wǎng)易云音樂的數(shù)據(jù)搞混呢?

不同的應(yīng)用程序在主機(jī)上發(fā)送或接收數(shù)據(jù),都要通過不同的端口(port),以此來確定數(shù)據(jù)包是歸那個應(yīng)用程序所有。

傳輸層的作用就是定義了端口到端口之間的通訊,最常用的協(xié)議是TCP協(xié)議。這個協(xié)議比較復(fù)雜,它可以保證數(shù)據(jù)不會丟失。常說的“三次握手”和“四次揮手”就是指TCP協(xié)議的建立和斷開,有時間的朋友可以更加深入的了解了解TCP協(xié)議。

(五)應(yīng)用層

雖然各個應(yīng)用程序都能拿到自己對應(yīng)的數(shù)據(jù),但是如果不對這些數(shù)據(jù)進(jìn)行規(guī)范,應(yīng)用程序也無法解讀。所以在應(yīng)用層出現(xiàn)很多協(xié)議,用來為應(yīng)用程序提供特定的數(shù)據(jù)服務(wù)接口,這些服務(wù)包括文件傳輸、文件管理以及電子郵件的信息處理等。例如瀏覽網(wǎng)頁需要HTTP協(xié)議、下載文件需要FTP協(xié)議,讀取郵件需要POP3協(xié)議等等。

最后,我們在來看一張圖,想一下互聯(lián)網(wǎng)每一層都主要做了什么

數(shù)據(jù)形式

在這個五層模型中,每一層都有其對應(yīng)的數(shù)據(jù),物理層的數(shù)據(jù)就是0和1,鏈路層將0和1序列化定義為“幀”,“幀”分為標(biāo)頭和數(shù)據(jù)兩部分。網(wǎng)絡(luò)層的數(shù)據(jù)為IP數(shù)據(jù)包,它也有頭部和數(shù)據(jù)兩部分,IP數(shù)據(jù)包是放在幀的數(shù)據(jù)部分中的。傳輸層中的TCP數(shù)據(jù)包也分為頭部和數(shù)據(jù)兩部分,它放在IP數(shù)據(jù)包的數(shù)據(jù)部分。應(yīng)用層的數(shù)據(jù)直接放在TCP數(shù)據(jù)包的數(shù)據(jù)部分。所以最終的數(shù)據(jù)形式就變成了以下形式

分層來看的話如下

總結(jié)

這片文章只是從基礎(chǔ)的角度簡單的介紹了互聯(lián)網(wǎng)通訊的大概原理,其中簡化了很多部分,實(shí)際通訊過程要比文章所寫復(fù)雜的多,要想弄清楚詳細(xì)的互聯(lián)網(wǎng)通訊過程,還需要對各個協(xié)議做更加深入的學(xué)習(xí)。文章參考了阮一峰老師的互聯(lián)網(wǎng)協(xié)議入門,阮老師這兩篇文章寫的都是通俗易懂,是互聯(lián)網(wǎng)協(xié)議入門的不二之選,本文若有描述不清楚的地方,大家可去閱讀阮老師的互聯(lián)網(wǎng)協(xié)議入門。本文是在初步學(xué)習(xí)了互聯(lián)網(wǎng)協(xié)議之后,自己做的一些總結(jié),文中若有不對之處,歡迎指正。

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

相關(guān)閱讀更多精彩內(nèi)容

  • 1.這篇文章不是本人原創(chuàng)的,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,390評論 6 174
  • 個人認(rèn)為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習(xí)博客系列博客是一部非常精彩的學(xué)習(xí)筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,215評論 0 8
  • 某公司常見兩個場景: 場景一: A公司中高層因?yàn)榭蛻衄F(xiàn)場一緊急突發(fā)故障召開一個臨時會議,客服部經(jīng)理說剛接到某區(qū)域工...
    禮小禮er閱讀 334評論 4 4
  • 最近出差都沒有早起,都是六點(diǎn)半到七點(diǎn)起床,有點(diǎn)懶散,想多睡一會兒不想起床。但奇怪的是一回到宿舍,我就能按時起...
    Lisa的小世界閱讀 174評論 0 0
  • 蘇瑩瑩因?yàn)榫o張,將劍心抱得緊緊地,劍心也因此哇哇哭起來。劍仙將蘇瑩瑩護(hù)在身后,這不平的事,她倒想管一管。劍仙幻化出...
    文道山閱讀 777評論 0 0

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