本文從開發(fā)者的角度,從底層往上層進行五層模型的概述。文章底部附一張x-mind結構圖,從上層往底層進行概述蟆盐。
網(wǎng)絡通信概述
網(wǎng)絡通信的實質就是:交換網(wǎng)絡數(shù)據(jù)包。
數(shù)據(jù)包的結構:以太網(wǎng)標頭-IP標頭-TCP標頭-應用層數(shù)據(jù)包
數(shù)據(jù)包能正常交換條件:本端及對端的MAC地址和IP地址
上網(wǎng)設置必要條件:
- 本機IP地址
- 子網(wǎng)掩碼
- 網(wǎng)關IP地址
- DNS的IP地址
因為MAC有局限性蹬碧,若不是在同個子網(wǎng)環(huán)境舱禽,無法知道對方的MAC地址,就需要網(wǎng)關轉發(fā)
- 同一子網(wǎng)絡恩沽,需要知道對方的MAC地址及對方的IP地址
- 非同一子網(wǎng)絡誊稚,需要知道本端的網(wǎng)關MAC地址及對方的IP地址
物理層(實體層)
物理層是把電腦連接起來的物理手段,主要規(guī)定了網(wǎng)絡的一些電氣特性±锊基于電氣特性發(fā)送高低電壓(電信號)城瞎,高電壓對應數(shù)字“1”,低電壓對應數(shù)字“0”
常見物理設備有:中繼線疾瓮、雙絞線脖镀、集線器。
數(shù)據(jù)鏈路層
定義電信號“0”狼电,“1”的分組方式蜒灰,每組電信號是什么意思
常見物理設備
網(wǎng)卡、網(wǎng)橋
以太網(wǎng)協(xié)議
一組電信號構成一個數(shù)據(jù)包肩碟,叫做“幀”强窖,每一幀分成兩個部分:標頭(Head)和數(shù)據(jù)(Data)。
“標頭”包含數(shù)據(jù)包的一些說明項削祈,例如發(fā)送者及源地址翅溺、接受者及目標地址、數(shù)據(jù)類型等髓抑×椋“數(shù)據(jù)”則是數(shù)據(jù)包的具體內容
"標頭"長度固定18字節(jié),“數(shù)據(jù)”長度最低46字節(jié)吨拍。最長1500字節(jié)褪猛。
所以,整個“幀”最低64字節(jié)密末。最長1518字節(jié)握爷。如果數(shù)據(jù)很長,必須分割成多個幀進行發(fā)送(因為分幀后严里,多個被分割的數(shù)據(jù)包能不能按序號重新排序拼接,組成完成的原信息追城,后續(xù)會介紹到TCP和UDP協(xié)議)
MAC地址
以太網(wǎng)規(guī)定刹碾,連入網(wǎng)絡的所有設備都必須具有“網(wǎng)卡”接口,數(shù)據(jù)包必須從一塊網(wǎng)卡座柱,傳送到另一塊網(wǎng)卡迷帜,網(wǎng)卡的地址就是數(shù)據(jù)包的發(fā)送地址和接收地址,即MAC地址
每塊網(wǎng)卡出廠時色洞,都有一個獨一無二的MAC地址戏锹,長度是48個二進制位,通常用12個十六進制數(shù)表示
舉個栗子: 00-B0-D0-86-BB-F7
前6個十六進制數(shù)是廠商編號火诸,后六個是該廠商的網(wǎng)卡流水號
廣播(同一廣播域內)
接下來又有幾個問題:
1.一塊網(wǎng)卡怎么知道另外一塊網(wǎng)卡的MAC地址锦针?
2.系統(tǒng)怎么才能吧數(shù)據(jù)包準確送到接送方?
首先通過ARP協(xié)議,可以知道另一塊網(wǎng)卡的MAC地址(不詳細說明)
其次奈搜,因為數(shù)據(jù)包的Head中含有接收方的MAC地址悉盆,所有以太網(wǎng)采用很原始的方式:向本網(wǎng)絡內所有 計算機發(fā)送數(shù)據(jù)包,讓每臺計算機自己判斷馋吗,自己是否是接收方焕盟。這種發(fā)送方式就是“廣播”。
網(wǎng)絡層
由上述的“廣播”方式可知宏粤,以太網(wǎng)采用廣播方式發(fā)送數(shù)據(jù)包脚翘,不僅效率低。而且局限在發(fā)送者所在的子網(wǎng)絡绍哎。
所以接下來要區(qū)分哪些MAC地址屬于同個子網(wǎng)絡堰怨,那些不是。
如果是同個子網(wǎng)絡采用廣播方式發(fā)送蛇摸,否則就采用“路由”方式發(fā)送备图。
這就導致了“網(wǎng)絡層”的誕生。他的作用是引進一套新的地址赶袄,使我們能區(qū)分不同的計算機是否屬于同個子網(wǎng)絡揽涮,這套地址就是“網(wǎng)絡地址”,簡稱“網(wǎng)址”饿肺。
網(wǎng)絡層的功能即建立主機到主機通信
常見物理設備
路由器蒋困、三層交換機
IP協(xié)議
規(guī)定網(wǎng)絡地址的協(xié)議,即IP協(xié)議敬辣。他所定義的地址雪标,被稱為IP地址。
作用:1. 為每臺計算機分配IP地址溉跃;2. 確定哪些地址屬于同個網(wǎng)絡村刨。
目前廣泛采用的是IP協(xié)議第四版,簡稱IPv4撰茎。IPv4規(guī)定網(wǎng)絡地址由32個二進制位組成嵌牺,習慣用四段十進制表示IP地址,從0.0.0.0 到255.255.255.255龄糊。
互聯(lián)網(wǎng)上每臺計算機會被分配到一個IP地址逆粹。地址分為兩部分,前部分代表網(wǎng)絡炫惩,后部分代表主機僻弹。那么如果從IP地址,判斷兩臺計算機是否屬于同一子網(wǎng)絡他嚷?這時候需要另外一個參數(shù)子網(wǎng)掩碼蹋绽。
子網(wǎng)掩碼:表示子網(wǎng)絡特征的一個參數(shù)芭毙。它在形式上等同于IP地址,也是一個32位二進制數(shù)字蟋字,它的網(wǎng)絡部分全部為1稿蹲,主機部分全部為0。比如鹊奖,IP地址172.16.254.1苛聘,如果已知網(wǎng)絡部分是前24位,主機部分是后8位忠聚,那么子網(wǎng)絡掩碼就是11111111.11111111.11111111.00000000设哗,寫成十進制就是255.255.255.0。
知道"子網(wǎng)掩碼"两蟀,我們就能判斷网梢,任意兩個IP地址是否處在同一個子網(wǎng)絡。方法是將兩個IP地址與子網(wǎng)掩碼分別進行AND運算(兩個數(shù)位都為1赂毯,運算結果為1战虏,否則為0),然后比較結果是否相同党涕,如果是的話烦感,就表明它們在同一個子網(wǎng)絡中,否則就不是膛堤。
舉個栗子:已知IP地址172.16.254.1和172.16.254.233的子網(wǎng)掩碼都是255.255.255.0手趣,請問它們是否在同一個子網(wǎng)絡?
兩者與子網(wǎng)掩碼分別進行AND運算肥荔,結果都是172.16.254.0绿渣,因此它們在同一個子網(wǎng)絡。
IP數(shù)據(jù)包
根據(jù)IP協(xié)議發(fā)送的數(shù)據(jù)就叫IP數(shù)據(jù)包燕耿。IP數(shù)據(jù)包分為“標頭”和“數(shù)據(jù)”兩個部分
IP數(shù)據(jù)包的“標頭”長度為20 ~ 60字節(jié)中符,整個數(shù)據(jù)包做大為65535字節(jié)。
如何在以太網(wǎng)協(xié)議中傳遞IP數(shù)據(jù)包缸棵?
把IP數(shù)據(jù)包把IP數(shù)據(jù)包直接放在以太網(wǎng)數(shù)據(jù)包的“數(shù)據(jù)”部分舟茶,無需修改以太網(wǎng)的規(guī)格。數(shù)據(jù)結構就變?yōu)椋?/p>
以太網(wǎng)標頭-IP標頭-數(shù)據(jù)
傳輸層
由網(wǎng)絡層協(xié)議可知堵第,互聯(lián)網(wǎng)上任意兩臺主機可以建立通信,但是同個主機上運行了多個程序隧出,當一個數(shù)據(jù)包從互聯(lián)網(wǎng)上發(fā)來時踏志,怎么知道這個數(shù)據(jù)包對應是哪個程序上使用?
這時候必須引入端口胀瞪,它實際是每一個使用網(wǎng)卡的程序的編號针余。每個數(shù)據(jù)包都發(fā)到主機的特定端口饲鄙,所以不同的程序就能取到自己所需要的數(shù)據(jù)。
端口是0 ~ 65535之間的整數(shù)圆雁,0 ~1023的端口被系統(tǒng)占用忍级,用戶只能使用>1023的端口。
當啟用某個應用程序時伪朽,若沒有指定某個固定端口(例如NodeJs可以指定常用端口)轴咱,程序會隨機隨機選用一個端口,然后和服務器對應端口聯(lián)系烈涮。
所以傳輸層的功能:網(wǎng)絡中的數(shù)據(jù)包發(fā)到接收方對應的哪個程序中朴肺,即端口到端口的通信
常見物理設備
四層交換機、四層路由器
UDP協(xié)議 和 TCP協(xié)議
數(shù)據(jù)包中加入端口信息坚洽,就需要新的協(xié)議
UDP協(xié)議
UDP數(shù)據(jù)包由“標頭”和“數(shù)據(jù)”兩部分組成戈稿,“標頭”部分包含接收端口和發(fā)出端口,“數(shù)據(jù)”部分就是具體的內容讶舰。
UDP標頭一共8個字節(jié)鞍盗,總長度不超過65535字節(jié),正好放進一個IP數(shù)據(jù)包跳昼。
把整個UDP包放入IP數(shù)據(jù)包的“數(shù)據(jù)”部分般甲。整個IP數(shù)據(jù)包又放在以太網(wǎng)數(shù)據(jù)包的“數(shù)據(jù)”部分,最后形成的數(shù)據(jù)包格式:以太網(wǎng)標頭-IP標頭-UDP標頭-數(shù)據(jù)
特點:網(wǎng)路中UDP數(shù)據(jù)包一旦發(fā)出庐舟,無法知道對方是否收到欣除,不進行確定。容易實現(xiàn)但是網(wǎng)絡可靠性低
TCP協(xié)議
TCP協(xié)議可近似認為挪略,它就是有確認機制的UDP協(xié)議历帚,每發(fā)出一個數(shù)據(jù)包都要求確認。如果有一個數(shù)據(jù)包遺失杠娱,就收不到確認挽牢,發(fā)出方就知道有必要重發(fā)這個數(shù)據(jù)包
特點:能夠確保數(shù)據(jù)不會遺失。它的缺點是過程復雜摊求、實現(xiàn)困難禽拔、消耗較多的資源。
TCP數(shù)據(jù)包和UDP數(shù)據(jù)包一樣室叉,都是內嵌在IP數(shù)據(jù)包的"數(shù)據(jù)"部分睹栖。TCP數(shù)據(jù)包沒有長度限制,理論上可以無限長茧痕,但是為了保證網(wǎng)絡的效率野来,通常TCP數(shù)據(jù)包的長度不會超過IP數(shù)據(jù)包的長度,以確保單個TCP數(shù)據(jù)包不必再分割踪旷。
TCP報文:
TCP三次握手四次揮手
應用層
規(guī)定應用程序的數(shù)據(jù)格式曼氛,以太網(wǎng)數(shù)據(jù)包:(以太網(wǎng)標頭-IP標頭-TCP標頭-應用層數(shù)據(jù)包)
舉個栗子:TCP協(xié)議可以為各種程序傳遞數(shù)據(jù)豁辉,比如網(wǎng)頁、FTP舀患、Email數(shù)據(jù)徽级,應用程序接收到傳輸層的數(shù)據(jù),需要對其進行解讀聊浅,那么餐抢,必須要有不同的協(xié)議規(guī)定網(wǎng)頁、FTP狗超、Email各自不同的格式弹澎。這些應用程序協(xié)議就構成了應用層。
文末加個X-mind結構圖
本文參考博客:
http://www.ruanyifeng.com/blog/2012/05/internet_protocol_suite_part_i.html
http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html