化繁為簡:計算機網(wǎng)絡(luò)分層的詳解
哈嘍,大家好呀,我是呼嚕嚕,好久沒更新文章了,還記得當初在學(xué)校學(xué)習(xí)網(wǎng)絡(luò)的歲月,直接上來就是各種分層模型,各種協(xié)議,各種參數(shù)配置,天花亂墜,只能死記硬背,但很容易就忘記了。
今天我們就來講講,計算機網(wǎng)絡(luò)為什么要分層?分層模型有哪些?網(wǎng)絡(luò)各層的作用?并手畫了多張動圖幫助大家理解,全程干貨滿滿,通俗易懂。
我們知道在計算機網(wǎng)絡(luò)中一般有OSI七層模型、TCP/IP四層模型和TCP/IP五層模型,這些模型將復(fù)雜的網(wǎng)絡(luò)通信過程劃分為不同的層次,每一層次都有其特定的功能和協(xié)議,共同協(xié)作完成網(wǎng)絡(luò)通信。那這些模型分別是什么、相互之間有什么區(qū)別呢?
OSI七層模型產(chǎn)生的歷史
為了讓世界上各個國家或地區(qū),各個不同計算機廠家,生產(chǎn)出的各個不同體系結(jié)構(gòu)的計算機設(shè)備,各種網(wǎng)絡(luò)協(xié)議,能夠互相通信(這是一個非常復(fù)雜的過程)。
國際標準化組織ISO于1977年提出了"開放系統(tǒng)互聯(lián)參考模型",即著名的OSI模型, Open System Interconnection Model,一個試圖使各種不同的計算機或者設(shè)備在世界范圍內(nèi)互連為網(wǎng)絡(luò)的標準模型,使得計算機所依賴硬件和軟件技術(shù)跨越地理和政治界限協(xié)同工作,允許兩個獨立系統(tǒng)通過基于當前操作層的標準化接口或協(xié)議進行通信,來在更大的范圍內(nèi)建立計算機網(wǎng)絡(luò)
OSI模型包括七個層次,自上而下依次為:應(yīng)用層(Application Layer)、表示層(Presentation Layer)、會話層(Session Layer)、傳輸層(Transport Layer)、網(wǎng)絡(luò)層(Network Layer)、數(shù)據(jù)鏈路層(Data Link Layer)、物理層(Physics Layer)
圖片
將計算機網(wǎng)絡(luò)進行分層,是為了簡化網(wǎng)絡(luò)設(shè)計和實現(xiàn)的復(fù)雜性,將復(fù)雜的通信過程分為若干個相對獨立的層次。每一層都負責(zé)特定的功能,進行跨軟件和硬件組件封裝每種類型的網(wǎng)絡(luò)通信,例如數(shù)據(jù)格式化、數(shù)據(jù)傳輸控制、路由選擇等,這樣較高層可以直接使用較低層技術(shù),而不必關(guān)心底層的實現(xiàn)細節(jié)
TCP/IP四層模型和TCP/IP五層模型
我們再來看看,什么是TCP/IP四層模型和TCP/IP五層模型,它們其實都和OSI七層模型有關(guān)
圖片
OSI模型提出時,英特網(wǎng)已搶先在全世界范圍內(nèi)廣泛流行起來,全部推倒重來已不可能,它使用TCP/IP協(xié)議族,通過與OSI模型的結(jié)合,從理論上補足了?絡(luò)接?層的缺失,最終演變成如今的TCP/IP四層模型,用于從理論上描述互聯(lián)網(wǎng)協(xié)議(IP)的工作方式。它包括四個層次:應(yīng)用層、傳輸層、網(wǎng)絡(luò)層和網(wǎng)絡(luò)接口層,其中應(yīng)用層由OSI模型的應(yīng)用層、表示層、會話層合并而來,網(wǎng)絡(luò)接口層由OSI模型的數(shù)據(jù)鏈路層和物理層合并而來。
OSI七層模型雖然是理論上標準,但既復(fù)雜?不實?,部分功能在多個層次中重復(fù)出現(xiàn),TCP/IP四層模型則是個更為實用的模型,也是如今事實標準,但最下?的?絡(luò)接?層并沒有具體內(nèi)容,所以我們用來學(xué)習(xí)或者講解的話,一般都采用TCP/IP五層模型,它在TCP/IP四層模型基礎(chǔ)上,將網(wǎng)絡(luò)接口層重新劃分為數(shù)據(jù)鏈路層和物理層,更接近實際應(yīng)用的網(wǎng)絡(luò)結(jié)構(gòu)。
本文也將用TCP/IP五層模型來講述,許多初學(xué)者不理解這些層為什么要這樣劃分?我們接下來將這些層串起來,看看他們是如何互相配合作用的。
物理層
物理層,主要規(guī)定網(wǎng)絡(luò)的傳輸媒介的物理特性,來傳遞0和1的電信號,即它負責(zé)在傳輸媒介上傳輸原始比特流。物理層傳輸?shù)膯挝皇潜忍?,比?臺主機直接通過雙絞線電纜來連接,傳遞信號,但是如果隨著網(wǎng)絡(luò)中加入的主機變多,每臺直接相連,會讓接口數(shù)和網(wǎng)線數(shù)幾何式上升,布線變得異常復(fù)雜。所以引入中間設(shè)備,每個主機只需和這個中間設(shè)備相連即可,比如總線、集線器等,當然這個中間設(shè)備需要足夠的穩(wěn)定,不然一旦掛了,會影響整個網(wǎng)絡(luò)。
圖片
物理層確定傳輸媒介的接口特征:
- 機械特征:接口所用接線器的一些物理屬性如接口范圍,接口尺寸,引線數(shù)目及排列;
- 電氣特征:接口電纜的各條線上出現(xiàn)電壓的范圍,阻抗匹配,傳輸速度,距離等;
- 功能特征:某條線上出現(xiàn)的某一電平的電壓的意義,接口部件信號線的用途;
- 過程特征:對于不同功能的各種可能事件的出現(xiàn)順序,定義各條物理線路的工作規(guī)程和時序關(guān)系。
物理層連接多個電腦設(shè)備的常用傳輸媒介有:集線器、同軸電纜、雙絞線電纜、光纖、光纜、無線電波等,這些媒介嚴格上不在物理層協(xié)議之內(nèi)的而是在物理層協(xié)議之下
另外不同的傳輸媒介,需要選擇合適的編碼方式以及調(diào)制技術(shù),來將原始比特流變換成相應(yīng)的電信號,以保證數(shù)據(jù)的可靠傳輸和抗干擾能力
數(shù)據(jù)鏈路層
數(shù)據(jù)鏈路層,主要是解決數(shù)據(jù)包在一個網(wǎng)絡(luò)或一段一段的鏈路上可靠傳輸問題。在物理層我們把各個主機物理上連在一起,現(xiàn)在需要解決的是信號如何傳遞給對應(yīng)主機,這個時候就需要來標識網(wǎng)絡(luò)中的每一個主機,這個叫做網(wǎng)卡(MAC)地址,是硬件的唯一標識符。所以數(shù)據(jù)鏈路層也被稱為MAC層
MAC地址: 設(shè)備的硬件地址,也是網(wǎng)絡(luò)中計算機設(shè)備的唯一標識,12位十六進制的數(shù),它由設(shè)備出廠時就決定了,一般無法修改。比如07:00:20:0A:6C:6D就是一個MAC地址,其中前6位16進制數(shù)07:00:20代表網(wǎng)絡(luò)硬件制造商的編號,即組織唯一標識符OUI,它由IEEE分配,而后6位16進制數(shù)0A:6C:6D代表該制造商所制造的某個產(chǎn)品的系列號,即擴展唯一標識符EUI。以此來保證世界上每個以太網(wǎng)設(shè)備都具有唯一的MAC地址
圖片
集線器功能比較簡單粗暴,只能將信息廣播到整個網(wǎng)絡(luò)的所有主機上,各個主機在通過消息中的MAC地址,來確認是否是發(fā)給自己的消息,這樣既不安全也浪費網(wǎng)絡(luò)的帶寬。所以在數(shù)據(jù)鏈路層采用交換機,自學(xué)習(xí)維護一個轉(zhuǎn)發(fā)表,來轉(zhuǎn)發(fā)幀,記錄消息從哪里來,到哪里去,來實現(xiàn)主機接入控制
圖片
數(shù)據(jù)鏈路層還解決了數(shù)據(jù)包的封裝格式問題,將數(shù)據(jù)包封裝成幀,同時負責(zé)建立和管理節(jié)點間的鏈路,通過各種控制協(xié)議,實現(xiàn)差錯控制
數(shù)據(jù)鏈路層傳輸單位是幀frame,每幀的組成是由幀頭、數(shù)據(jù)、幀尾組成:
- MAC子層幀頭構(gòu)成:目標MAC地址(6字節(jié)),源MAC地址(6字節(jié)),類型(2字節(jié)),總的大小=6+6+2 = 14字節(jié)
- FCS幀尾:提供了一種錯誤檢測機制,用來驗證幀在傳輸過程中的完整性(4個字節(jié))
- 數(shù)據(jù),存放整個數(shù)據(jù)包的具體內(nèi)容,比如文件、字符串之類的,數(shù)據(jù)部分的長度最小至少為46個字節(jié),最長1500個字節(jié);如果超過1500個字節(jié)就分割
圖片
數(shù)據(jù)鏈路層還實現(xiàn)了透明傳輸,不必考慮物理層如何實現(xiàn)比特傳輸?shù)募毠?jié),這個由物理層進行保證
透明傳輸是指不管所傳輸?shù)臄?shù)據(jù)是什么樣的比特組合,都應(yīng)當能夠在鏈路上傳送。盡可能地屏蔽掉不同傳輸媒體和通信手段的差異。通俗點講,就是鏈路層就“看不見”有什么妨礙數(shù)據(jù)傳輸?shù)臇|西
常用協(xié)議有:以太網(wǎng)(Ethernet)、高級數(shù)據(jù)鏈路控制協(xié)議HDLC、點對點協(xié)議PPP等,常用設(shè)備有:網(wǎng)橋、交換機
網(wǎng)絡(luò)層
網(wǎng)絡(luò)層,對應(yīng)OSI模型的網(wǎng)絡(luò)層,提供主機間的通信服務(wù),負責(zé)數(shù)據(jù)包在多個網(wǎng)絡(luò)之間的路由和尋址(IP 地址),確保數(shù)據(jù)可以在不同網(wǎng)絡(luò)間傳輸;也叫網(wǎng)際層或IP層
在數(shù)據(jù)鏈路層,我們實現(xiàn)了在單個網(wǎng)絡(luò)中網(wǎng)絡(luò)的通信,但在世界上各個不同的地理位置上,有幾十億個設(shè)備互相組成大大小小的異構(gòu)網(wǎng)絡(luò),要想把它們連在一起,交換機+MAC地址就遠遠不夠了,IP互聯(lián)網(wǎng)協(xié)議就應(yīng)運而生,提供的一種統(tǒng)一的地址格式,為互聯(lián)網(wǎng)上的每一個網(wǎng)絡(luò)和每一臺主機分配一個邏輯地址,以此來屏蔽物理地址的差異,來解決多網(wǎng)絡(luò)互連的問題
IP互聯(lián)網(wǎng)協(xié)議,是TCP/IP協(xié)議棧中最核心的協(xié)議之一,通過IP地址(邏輯地址),來標識網(wǎng)絡(luò)和網(wǎng)絡(luò)中的各主機,實現(xiàn)了網(wǎng)絡(luò)通信的面向無連接和不可靠的傳輸功能。IP地址可以表達網(wǎng)絡(luò)中的子網(wǎng)的概念(子網(wǎng)掩碼)
以常見的IPv4協(xié)議為例,IP地址共32位,分成了四段如192.168.0.1,IP地址得向IANA機構(gòu)申請,一旦分配后一般不會改變,IPv4總共有43億個地址,由于歐美的先發(fā)優(yōu)勢,分到的IP地址資源非常豐富,我們國內(nèi)就嚴重不足,早在2011年IPv4地址就被分配完了。如今的解決辦法,是采用NAT技術(shù)或者IPv6(增加IP地址長度)
網(wǎng)絡(luò)層傳輸單位是包packet,在數(shù)據(jù)鏈路層的幀基礎(chǔ)上,繼續(xù)封裝數(shù)據(jù)包成IP數(shù)據(jù)包
網(wǎng)絡(luò)層還有一個作用就是,路由選擇,通過路由選擇算法,為數(shù)據(jù)包選擇最適當?shù)穆窂?,控制?shù)據(jù)鏈路層與傳輸層之間的信息轉(zhuǎn)發(fā),建立、維持和終止網(wǎng)絡(luò)的連接,將信息從一個網(wǎng)絡(luò)設(shè)備傳送到另一個網(wǎng)絡(luò)設(shè)備
常用設(shè)備:路由器,主要用來連接不同的網(wǎng)絡(luò)時,交換機無法再維護龐大的轉(zhuǎn)發(fā)表,而路由器會自動?成路由表,依據(jù)路由表轉(zhuǎn)發(fā)數(shù)據(jù)包?下?個網(wǎng)絡(luò)
圖片
路由器的每個端口都會有一個自己的MAC地址。路由器能將一個IP分配給超多個主機使用,主機對外ip也是同一個。而交換機是可以將不同的主機連接起來,對外表現(xiàn)的IP也可各有不同;交換機隔離沖突域,但不隔離廣播域,而路由器既隔離沖突域又隔離廣播域,不會轉(zhuǎn)發(fā)廣播數(shù)據(jù),減少廣播風(fēng)暴和安全漏洞。路由器還提供防火墻的服務(wù)
常用協(xié)議:IP(IPv4、IPv6)、地址解析協(xié)議ARP、網(wǎng)際控制報文協(xié)議ICMP、網(wǎng)際組管理協(xié)議IGMP等
傳輸層
傳輸層,對應(yīng)OSI模型的傳輸層,建立主機端到端的連接,為主機中的進程之間通信,提供數(shù)據(jù)傳輸服務(wù),為應(yīng)用層提供端到端可靠且透明的數(shù)據(jù)傳輸服務(wù),包括全雙工或半雙工、流控制和錯誤恢復(fù)服務(wù),確保數(shù)據(jù)能完整的傳輸?shù)骄W(wǎng)絡(luò)層。
建立主機端到端的連接,這里的端是端口port,當通過網(wǎng)絡(luò)層獲取IP地址后,數(shù)據(jù)包可以通過IP地址找到對應(yīng)的主機,但是主機一般是多進程,每一個進程都是一個任務(wù),那么如何確定是哪一個任務(wù)?
所以引入端口的概念,當進程需要網(wǎng)絡(luò)通信服務(wù)時,向操作系統(tǒng)申請一個端口,通過端口號來標識這個進程,從而讓網(wǎng)絡(luò)中數(shù)據(jù)包,分辨出主機中哪一個進程是接收者
傳輸層主要有兩個協(xié)議:
- TCP傳輸控制協(xié)議,提供?向連接的、可靠的數(shù)據(jù)傳輸服務(wù),傳輸單位為報?段segment
- UDP用戶數(shù)據(jù)報協(xié)議,提供?連接的、盡最大努力交付(不可靠性)的數(shù)據(jù)傳輸,傳輸單位為數(shù)據(jù)報Datagram
為什么在這層引入這2個協(xié)議呢?
這是因為在網(wǎng)絡(luò)層上,IP協(xié)議沒法區(qū)分端口,UDP協(xié)議在IP協(xié)議的基礎(chǔ)上增加了源端口和目的端口字段,這樣就可以區(qū)分端口了,另外IP協(xié)議又是無連接不可靠的,傳輸數(shù)據(jù)容易差錯,引入TCP協(xié)議,通過三次握手四次揮手等一系列機制,來確保數(shù)據(jù)的可靠傳輸
傳輸層有復(fù)用和分用的功能,一個主機可以同時運行多個進程,應(yīng)用進程又可以利用傳輸層傳送應(yīng)用層報文
- 復(fù)用就是多個應(yīng)用層進程可同時使用下面的運輸層的服務(wù)
- 分用就是把運輸層收到的信息分別交付給上面應(yīng)用層中的響應(yīng)進程
應(yīng)用層
應(yīng)用層,是最上層,也是我們用戶能夠直接接觸到的,比如手機、電腦、各種家庭設(shè)備等等,它對應(yīng)OSI的應(yīng)用層、表示層和會話層
主要專注于為用戶提供網(wǎng)絡(luò)服務(wù),直接面對應(yīng)用程序,如文件傳輸、電子郵件、遠程登錄等,它并不需要關(guān)心數(shù)據(jù)是如何傳輸?shù)?,但需要?shù)據(jù)的格式進行轉(zhuǎn)換表示,讓目的應(yīng)用程序能看懂數(shù)據(jù)的內(nèi)容
常用應(yīng)用層的協(xié)議有:網(wǎng)絡(luò)請求協(xié)議HTTP、文件傳輸協(xié)議FTP、簡單郵件傳輸協(xié)議SMTP、域名解析協(xié)議DNS等
應(yīng)用層傳輸單位是報文message,是對傳輸層的數(shù)據(jù)包進一步封裝。
我們再來看看,TCP/IP模型的應(yīng)用層對應(yīng)OSI的應(yīng)用層、表示層和會話層,分別有什么作用:
- 應(yīng)用層:為應(yīng)用程序或用戶請求提供各種請求服務(wù)。OSI參考模型最高層,也是最靠近用戶的一層,為計算機用戶、各種應(yīng)用程序以及網(wǎng)絡(luò)提供接口,也為用戶直接提供各種網(wǎng)絡(luò)服務(wù)。
- 表示層:數(shù)據(jù)編碼、格式轉(zhuǎn)換、數(shù)據(jù)加密。提供各種用于應(yīng)用層數(shù)據(jù)的編碼和轉(zhuǎn)換功能,確保一個系統(tǒng)的應(yīng)用層發(fā)送的數(shù)據(jù)能被另一個系統(tǒng)的應(yīng)用層識別。如果必要,該層可提供一種標準表示形式,用于將計算機內(nèi)部的多種數(shù)據(jù)格式轉(zhuǎn)換成通信中采用的標準表示形式。數(shù)據(jù)壓縮和加密也是表示層可提供的轉(zhuǎn)換功能之一。
- 會話層:創(chuàng)建、管理和維護會話。接收來自傳輸層的數(shù)據(jù),負責(zé)建立、管理和終止表示層實體之間的通信會話,支持它們之間的數(shù)據(jù)交換。該層的通信由不同設(shè)備中的應(yīng)用程序之間的服務(wù)請求和響應(yīng)組成
最后筆者再吐血畫了張圖,幫助大家快速回顧,網(wǎng)絡(luò)的各個分層的作用和重點信息:
圖片
補充:數(shù)據(jù)是如何傳遞的?
在上文,我們分別介紹了網(wǎng)絡(luò)的各層的特點,其中每層的數(shù)據(jù)單元大家是不是比較模糊,我們這就梳理HTTP報文傳輸過程,來將這些全部串起來,來體會在TCP/IP協(xié)議的數(shù)據(jù)封裝和分用過程中,數(shù)據(jù)包是如何網(wǎng)絡(luò)各層中傳遞的
本文這里以一個HTTP請求的傳輸為例,請求從HTTP客戶端(如瀏覽器)和HTTP服務(wù)端應(yīng)用(比如QQ郵箱、知乎)的傳輸過程,如下圖所示:
圖片
數(shù)據(jù)在客戶端發(fā)送時在經(jīng)過每一層的時候都要被該層對應(yīng)的協(xié)議包裝(添加上對應(yīng)層的頭部,其中包含了協(xié)議標識),這個過程叫封裝;而到達終端的時候,又要被一層一層的解包,這個過程叫分用。
另外在網(wǎng)絡(luò)傳輸中,網(wǎng)絡(luò)包都必須是完整的,可以沒有上層只有下層,但一定不能只有上層而沒有下層,基礎(chǔ)不牢,大廈不穩(wěn)
理解這些網(wǎng)絡(luò)分層模型,會讓我們對計算機網(wǎng)絡(luò)的世界有更宏觀的認識,后續(xù)再配合抓包工具,會對于我們進行網(wǎng)絡(luò)的學(xué)習(xí)與實踐,有非常不錯的幫助。