大白話談互聯網協議


你的問題

在這個寧肯不吃一頓飯,不可斷一小時網的時代里,我們對網絡的依賴已經達到了無以復加的地步,雖然我們每天在使用網絡,卻並不清楚網絡通訊到底是如何進行的?

比如,你在微信里給苦追了好久的姑娘發送了一條約會消息,她收到了,並且在微信上回復給你“不好意思,我今晚有約了”,但是這可能是個誤會,你發送的消息為什么可以成功到達她的手機上,而不是被遠在大洋彼岸的川普收到呢?她在手機上看到這條消息后,回復給你一條拒絕的消息,這條消息也准確無誤的被你所接收,本來打算和姑娘一塊看電影的計划泡湯了,雖然你這時候心情很糟,但你也無事可做,所以打算研究研究這該死的網絡通訊協議。看看為什么你發給妹子的消息沒有發到川普的手機上。

簡單分析

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

協議

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

互聯網分層模型

為了便於理解,我們一般可以將互聯網通訊模型分為五層,每個層都有它自己的功能。物理層是最底層,應用層是最高層,中間分別是鏈路層、網絡層和傳輸層,其每一層都是建立在上一層的基礎上的。

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

(一)物理層

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

這些連接線路就是互聯網的物理層,物理層主要功能是提供了數據傳輸的介質,使得電信號可以在設備之間傳播,這里的電信號也可以簡單的理解為0或1。

(二)鏈路層

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

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

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

  2. 定義好了數據,我們就該考慮發送給誰的問題了,每台設備都有自己的一個地址,叫做MAC地址。MAC地址在設備出廠時就已經固定了,這個地址在全世界是獨一無二的,這樣我們就可以通過這個地址去向目標設備發送數據。

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

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

(三)網絡層

我們知道全球的可聯網設備都在一個巨型網絡下,按我們上面所說,你的消息會發送給網絡內所有設備,這么說來你的這條消息還是發給川普了嘛,只是人家沒有接收而已。其實,並非如此,如果每發送一條消息都會發送給互聯網上的所有人,那以互聯網這么大的體量,早就癱瘓了。

實際上,“廣播”的方式只能在同一子網絡內發送數據,互聯網是由非常多的子網絡組成的巨型網絡,所以你發給姑娘的消息川普是絕對收不到的。

看到這里你肯定已經明白了,網絡層的作用是可以讓數據在不同子網絡之間也可以傳遞。最常見的網路層通訊協議就是IP協議。

3.1 IP地址

雖然每台設備都有自己獨有的MAC地址,但是通過MAC地址我們是無法判斷該設備是屬於那個子網絡的,所以我們引入了一種其他的地址,叫做IP地址,也稱為“網址”。目前最常使用的是IPv4,是IP協議的第四版。IPv4規定網址是由32位二進制數組成,通常以四段10進制數表示,從0.0.0.0到255.255.255.255,例如:192.168.1.1就是一個IPv4地址。

3.2 子網掩碼

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

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

例如:A設備的IP地址為172.12.214.3,子網掩碼為255.255.0.0,B設備的IP地址為172.12.213.1,子網掩碼同為255.255.0.0,則可以判斷出A設備與B設備處在同一子網絡下。

3.3 相同子網絡間的數據傳輸

好了,看起來費了好大的勁來判斷兩台設備是不是處於同一網絡下,但是相信我,費這么大功夫是絕對值得的。我們馬上就可以在互聯網上任意兩台設備間發送數據了。首先我們要了解,我們想要發送數據,就必須知道目標設備的IP地址和MAC地址。

通過IP協議,我們可以判斷出要傳輸數據的兩台設備是否是在同一子網絡,那現在就會有兩種情況,第一種情況是,兩台設備處在同一子網絡下,那我們就可以利用“廣播”方式去發送數據了,但是問題來了,知道目標設備的IP地址,如何獲得目標的MAC地址呢?這時候ARP協議就登場了。

ARP協議的作用可以簡單的認為是通過IP地址來獲取同一子網絡中設備的MAC地址,那它是如何工作的,其實也很簡單,它也是通過“廣播”的方式向子網絡內所有設備發送一條數據包,數據包中的MAC地址填寫為:FF:FF:FF:FF:FF:FF,這樣當其他設備收到這條數據的時候,就會對比自身的IP與數據包中的IP是否一致,若不一致就丟棄這條數據,若一致就接收這一條數據,並匯報自己的MAC地址,這樣就可以通過IP地址獲取到MAC地址了。

現在我們就可以在兩台設備(同一子網絡)間通訊了。

3.4 不同子網絡間的數據傳輸

第二種情況是,要傳輸數據的兩台設備,不在同一子網絡下,我們知道,要想把數據准確發送到目標設備中,就必須知道兩個地址

  • 目標設備的IP地址
  • 目標設備的MAC地址

但是,不同子網絡間的兩台設備,是無法獲取到對方的MAC地址的,這時候只能將數據包發送給網關,網關通過路由協議再將數據發送到目標設備上。所以這時候需要知道的地址就變成了

  • 目標設備的IP地址
  • 網關的MAC地址

如圖,主機2想向主機4發送一條數據,必須先將數據發送至網關A,由網關A通過路由協議查詢到主機4處於子網絡B,網關A會將數據發送給網關B,網關B再將數據發送給主機4,這樣便完成了主機2到主機4之間的通訊。

至此,我們應該清楚了,在兩台設備間通訊所必須的條件,首先我們需要判斷兩台設備是否處在同一子網絡中,若在同一子網絡,就可以利用ARP協議來獲取MAC地址,得到目標IP和MAC地址,就可以發送數據。若不在同一子網絡,則需要獲取網關的MAC地址,將數據發送到網關,讓網關來轉發。現在我們就可以在互聯網上任意兩台設備間通訊了。

(四)傳輸層

通過上面的介紹,我們已經知道了兩台設備之間是如何通訊的了,但是,當你收到姑娘回給你微信消息的同時,你的手機還在線播放着久石讓的《summer》,那么問題又來了,你的手機同時接收着兩種數據,那系統為什么不會把微信的數據和網易雲音樂的數據搞混呢?

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

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

(五)應用層

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

最后,我們在來看一張圖,想一下互聯網每一層都主要做了什么

數據形式

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

分層來看的話如下

總結

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM