[網絡]-網絡通信原理

一:概述

本文為自己看阮一峰文章后的筆記.加入了一些自己類比的比喻.

原地址: 互聯網協議入門

互聯網的實現原理->五層模型.png

二.實體層(電腦)

實體層.png

全世界各個電腦想相互通信.首先要把各個電腦連接起來.
可以通過光纜.電纜.電磁波等連接起來.
這就叫做實體層.他主要規定了網絡的一些電氣特性.負責傳送0/1電信號.

實體層類比.png

類比: 電腦 ==>> 人 && 0/1信號 ==>> 聲音
每臺電腦就像我們每個人.我們發出的聲音就是0/1電信號

三.鏈路層(以太網)

單純的0/1沒有任何意義.鏈路層就是制定一套規則.讓0/1變得有意義.

類比: 以太網協議 ==>> 語言協議
就像人發出聲音.沒有任何意義.
但是通過語言這個規則.讓聲音可以表達信息.

3.1.以太網協議

以太網數據包(幀).png

舉例如語言規定 矮老虎油 這句話發音表達的意思是我愛你.
以太網也規定一組0/1電信號構成一個數據包.叫做. 每一幀分成兩個部分: 表頭(Head)和數據(Data)

表頭: 包含 發送者.接收者.數據類型 ==>> 對應語言就是主語(我). 謂語(你). 語言類型(中文)
數據: 具體內容 ==>> 對應語言就是我愛你中的.

3.2.MAC地址

上面提到.以太網數據包中標頭包含了發送者.接收者.那么如何標識發送者和接收者呢?

MAC地址.png

以太網規定.連入網絡的所有設備.都必須具有網卡接口(理論上是唯一的也是必須有的).

數據包必須從一塊網卡傳送到另一塊網卡.網卡的地址就是發送地址和接收地址.也叫做MAC地址.

每塊網卡出廠的時候.都伴有獨一無二的MAC地址.長度48個二進制單位.通常用12個十六進制數表示.

前6個十六進制數是廠商編號.后6個是該廠商的網卡流水號.

MAC地址類比.png

類比: MAC地址 ==>> 傳聲筒的杯子(如下圖)
每個杯子上都有一個名字.標識這是你的杯子.

3.3.廣播

3.3.1問題一:

但是一塊網卡怎么知道另一塊網卡的MAC地址呢.就像傳聲筒的一端杯子怎么知道另一端的杯子是誰的呢.

這個時候就有ARP協議可以解決這個問題.后面介紹.

3.3.2問題二:

就算我知道了對方的MAC地址.但我怎么準確的將幀發送給他呢.

以太網采用了一種很原始的方式.他不是吧數據包準確送到接收方.而是想本子網絡內所有計算機發送.讓每臺計算機自己判斷是否為接收方.

如: 電腦A像電腦B發送一個數據包.
那么電腦A會給子網絡里所有電腦B.C.D.E.F都發送數據包.
然后電腦B.C.D.E.F電腦接收到數據包后拿到接收地址跟自己的MAC地址比較.如果相同就接收.不相同就丟棄.

廣播類比.png

類比: 廣播 ==>> 村喇叭
現在傳聲筒升級了.每個人手里的傳聲筒都連接村里的大喇叭
這是小明說了一句話.小明愛小紅.發送給村喇叭.這句話包含了發送地址(小明).接收地址(小紅).
然后村喇叭再向全村人廣播這句話.
這時全村人都聽到了這句話
小紅一聽.接受者是自己.那他就知道了小明對他說的內容了.
村里其他人聽到后手里碗一摔.md.又撒狗糧.然后就無視這段話了.

四.網絡層(IP)

以太網協議依靠MAC地址發送數據.理論上單單依靠MAC地址.上海的網卡就可以找到洛杉磯網卡了.

村喇叭在一個村傳播還好.那要是全世界都用這一個喇叭.

那么30億人每人用傳聲筒說一句話.那每個人都要聽到30億句話.那不炸了嗎.

子網絡.png

因此必須找到一個方法.能夠區分哪些MAC地址屬于同一個子網絡.哪些不是.

如果是同一子網絡.就采用廣播方式發送.
如果不是就采用路由方式發送.

類比: 路由 ==>>省喇叭
就像一個人說一句話.要區分這句話的接收者是不是該村的.
如果是就用本村的村喇叭喊話.
如果不是就讓村喇叭把話發給省喇叭(如果湖北省總喇叭).

遺憾的是MAC地址本身無法做到區分.他只與廠商有關.與所處網絡無關.
這就導致了網絡層的誕生.網絡層作用就是引進一套新的地址>>IP地址

4.1IP協議

IP地址.png

IP協議規定每臺電腦分配一個IP地址.他由32個二進制數組成.

習慣上我們會分成4段十進制數表示.從0.0.0.0一直到255.255.255.255

IP地址分成兩部分.前一部分代表子網絡(村喇叭).后一部分代表主機(每個人).

比如IP地址172.16.254.1.
那么172.16.254就標識子網絡
最后的1標識主機
這個時候就可以知道與他同一子網的IP地址為172.16.254.xxx

4.2子網掩碼

但是我們怎么知道前多少位標識子網絡呢.
這個時候就引入了子網掩碼.

子網掩碼的 網絡部分全部為1. 主機部分全部為0
如: 11111111.11111111.11111111.00000000
十進制:255.255.255.0

知道子網掩碼我們就能判斷任意兩個IP地址是否是處于同一子網絡.

4.3子網掩碼使用方法

比如IP地址A: 172.16.254.1和IP地址B:172.16.254.233的子網掩碼都是255.255.255.0

拿IP地址A和IP地址B分別與子網掩碼進行AND運算(即運算.兩個數都為1則為1.否則為0)

IP地址A:
10101100.00010000.11111110.00000001
11111111.11111111.11111111.00000000 AND運算
=======================================
10101100.00010000.11111110.00000000 >> 172.16.254.0

IP地址B:
10101100.00010000.11111110.11101001
11111111.11111111.11111111.00000000 AND運算
=======================================
10101100.00010000.11111110.00000000 >> 172.16.254.0

可以發現IP地址A和B的運算結果都是172.16.254.0.因此他們在同一個網絡

假如一個姓氏一個村.比如小崗村的人都姓孫.
類比: AND運算 ==>> AND運算后發現兩個人都姓孫
那么這個姓氏就是小明的子掩碼.其他人拿自己的姓名與這個子掩碼.就能得到是否是一個村的.

4.4IP數據包(幀)

根據IP協議發送的數據.就叫IP數據包.其中必須包括IP地址(姓氏).
但是前面提過以太網數據包只包含MAC地址(名字).
并沒有IP地址的爛尾.那么是否需要修改數據定義呢?

不需要.我們可以把IP數據包直接放進以太網數據包Data部分.
完全不用修改以太網的規格.
這就是互聯網分層結構的好處.

如下.藍色為以太網數據包的Head.紅色為以太網數據包的Data
我們將IP數據包直接放在以太網數據包的Data里

IP數據包(幀).png

類比: 增加IP地址信息 ==>> 相當于增加了姓氏

4.5分段

IP數據包:
Head長度為20-60字節.
Data部分.最長為65515字節.
整個數據包的總長度最大為65535字節.

以太網數據包的Data部分最長只有1500字節.
因此如果IP數據包超過了1500字節.他就需要分割成幾個以太網數據包分開發送了.

類比: 數據分段 ==>> 一句話分段
此時小明向小紅說一段話就相當于分了幾次說.
先說: 我
再說: 愛
再說: 你

4.6ARP協議

即獲取同一子網絡的主機MAC地址的協議方法.

有兩種情況:

4.6.1)情況一

如果兩臺主機不在同一子網絡.那么事實上就沒辦法得到對方的MAC地址.只能把數據包傳送到兩個子網絡連接處的網關(geteway)處理.

4.6.2)情況二

如果兩臺主機在同一個子網絡.那么我們可以使用ARP協議.得到對方的MAC地址.
ARP協議也是發出一個數據包(包含在以太網數據包中).其中包含他所要查詢的IP地址.
在對方的MAC地址這一欄.填的是FF:FF:FF:FF:FF:FF.表示這是一個廣播地址.
他所在子網絡的每一臺主機.都會收到這個數據包.
從中取出IP地址.與自身的IP地址進行比較.如果相同.則回復.向對方報告自己的MAC地址.

五.傳輸層(端口)

5.1由來

有了MAC地址和IP地址.我們已經可以在全世界任意兩臺主機上建立通信.

接下來的問題是.同一臺主機上有許多APP都需要用到網絡.比如.你一邊瀏覽網頁.一邊與朋友在線聊天.
當一個數據包從網上發來的時候.你怎么知道.他是表示網頁的內容還是表示在線聊天的內容.

也就是說.我們還需要一個參數.表示這個數據包到底供哪個APP(進程)使用.
這個參數就叫做端口(Port).他其實就是每個APP的編號.

每個數據包都發到主機的特定端口.所以不同的程序能取到自己所需要的數據.

5.2端口

端口是0到65535之間的一個整數.正好16個二進制位.
0-1023的端口被系統占用.
APP只能選用大于1023的端口.
不管是瀏覽網頁還是在線聊天.APP會隨機選用一個端口.然后與服務器的相應端口聯系.

現在傳聲筒又升級啦.每個傳聲筒的兩端都有多個杯子.
類比: 端口 ==>> 傳聲筒一端的不同杯子
相當于你對著不同的杯口說話.對方就能分辨出來你說的是哪件事.(這比喻有點牽強.尷尬??)

5.3套接字(socket)

傳輸層的功能就是建立端口與端口的通信.
相比之下.網絡層的功能是建立主機到主機的通信.
只要確定主機和端口.我們就能實現程序之間的交流.
因此Unix系統就把主機+端口 叫做 套接字.
有了它.就可以進行網絡APP開發了.

5.4UDP/TCP協議

現在.我們必須在數據包中加入端口信息.這就需要新的協議.最簡單的實現叫做UDP協議.
其實就是添加一個端口信息的協議方法.

如下.藍色為以太網數據包的Head.
紅色和藍色為以太網數據包的Data

我們將UDP數據包直接放在以太網數據包的Data里.
即將端口信息放在紅色Head里

UDP/TCP數據包.png

除了UDP協議.還有另一個協議叫TCP協議.他們功能是一樣的.

5.5UDP/TCP區別

UDP:
協議簡單.容易實現.可靠性差.一旦數據包發出.無法知道對方是否收到.

TCP:
3次握手.4次揮手確保了可靠性.但是過程復雜.實現困難.消耗較多資源.

5.6UDP/TCP應用

對實時性要請高的場景:如實時會議.實時視頻.多點通訊
這些場景如果用TCP.當網絡不好會發生重傳.畫面會有延遲.甚至越堆越多.選擇UDP就會好很多.

除了這些場景.其他都用TCP準備錯.

六:應用層

應用層數據包.png

應用程序收到傳輸層的數據.接下來就要進行解讀了.
由于互聯網的開放架構.數據來源五花八門.
必須實現規定好格式.否則根本無法解讀.
應用層的作用就是規定應用程序的數據格式.

比如.TCP協議可以為各種各樣的APP傳遞數據.
如Email.WWW.FTP.HTTP等等.這些應用程序協議就構成了應用層.
這是最高的一層.直接面對用戶.他的數據就放在TCP數據包的Data部分.

像平常我們都是使用HTTP協議獲取傳輸數據.
其實也可以直接繞過應用層(HTTP協議)
直接使用傳輸層的TCP協議來獲取傳輸數據.

類比: 應用層協議 ==>> 英語/日語/法語
? 應用層的各種協議就相當于各個國家制定的語言協議一樣.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,119評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,382評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,038評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,853評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,616評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,112評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,192評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,355評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,869評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,727評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,928評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,467評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,165評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,570評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,813評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,585評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,892評論 2 372

推薦閱讀更多精彩內容