1.網絡出現之始,計算機產品之間無法直接通信,只有同一制造商的產品才能進行通信。於是,后來國際標准化組織(ISO組織)為此提出了開放系統互連(OSI)模型,呼吁各產品都按此模型來進行通信。
OSI參考模型將通信過程分為7大層,如圖所示。從下到上分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層,每一層負責一項或一類具體的工作,然后將數據傳遞給下一層。其中1至4層是底層,5到7層是高層。其實OSI的7層就是分為7個步驟,並指定了每個層次應該實現的功能,如此一來,網絡設備各廠家、軟件開發人員就能根據這些層次設計出能夠和他人正常通信的軟件、硬件。
OSI分層模型非常重要,無論是對於物理層還是軟件層,都需要理解各層功能,這樣以后在理解軟件各種功能的時候就能總結出一些規則,事實上OSI分層模型就是定義這些規則的,只不過在不了解它的時候不會考慮到OSI上去。
另外,OSI模型只是定義了幾乎所有通信各層的規則,但並非所有通信協議都符合OSI模型。了解這一點,預防鑽牛角尖。
2.1)應用層
應用層是常見的一些服務應用程序(比如apache httpd服務、ftp軟件、QQ軟件、網易雲音樂軟件)的數據起始或終止點,它們產生的數據就是應用層數據,它們接收到的數據也是在應用層接收的。
應用層是OSI最高層,所以離物理硬件層次最遠,也是最接近用戶的層次,所以一般用戶所能看到的層,如點擊下一曲音樂時,音樂軟件立即在應用層產生請求數據,經過OSI各層,最終發送過去。
2)表示層
表示層(Presentation Layer)是應用層的下一層,應用層的數據會首先經過表示層。
在表示層,將為應用層產生的數據提供能數據轉換類的服務,也是數據如何展現、如何表示的功能。如格式轉換、編碼轉換、數據壓縮(如圖片壓縮、視頻壓縮、文本壓縮都在這一層)、數據加密與解密等。
3)會話層
跨主機的兩個計算機之間的應用程序要進行通信,需要建立會話。會話層雖然不參與具體的數據傳輸,但它卻對數據傳輸進行管理。會話層在兩個互相通信的應用進程之間建立、組織和協調其交互活動。
4)傳輸層
傳輸層的基本功能就是接收上一層數據,並在必要的時候將數據分割成更小的數據單元,然后把這些數據單元傳遞給網絡層。它是第一個端對端的傳輸控制層:通過指定端口找到對方主機上的對應服務程序。
在傳輸層有兩種協議:UDP和TCP協議。當數據到了傳輸層后,將被封裝成數據報或數據段。如果是采用UDP協議傳輸數據,則數據被封裝成數據報。如果采用TCP協議傳輸數據,則數據被封裝為數據段。
5)網絡層
經過傳輸層封裝后得到的數據報或者數據段要通過網絡傳輸出去,必須指定數據的目標IP地址。
所以,在網絡層會為數據段或數據報繼續封裝,加上源目標和目標IP地址。加上了目標IP地址之后,數據段或數據報就成為數據包。
因為數據包有了IP地址,根據路由規則,可以知道將這個數據包怎么傳遞出去,以及怎么找到目標主機。另一方面,數據包中還有源IP地址,使得對方主機回應的時候,可以將對方產生的數據根據這個源IP路由回來,使得自己能夠收到對方的響應數據。
6)鏈路層
當封裝IP地址的數據包到達數據鏈路層之后,將繼續封裝得到數據幀:將源MAC地址和目標MSC地址加入數據包中,得到的就是數據幀。
因為鏈路層比較接近物理層,所以這次封裝會根據物理物理鏈路上的設備來決定封裝成何種格式的數據幀。
如果是計算機與路由器或交換機之間的數據,那么處在以太網的局域網環境下,那么需要將MAC封裝成以太網幀。
如果是路由器與路由器之間,這兩個端點之間的鏈路沒有其他中間物理設備,所以無需加入物理層地址,而是使用PPP點到點協議,所以,路由器與路由器之間的數據幀是PPP協議幀。
計算機封裝的數據幀中有了目標MAC地址,就能知道這個數據幀下一跳要給局域網內誰的,是給交換機還是本地路由器,但最終要出去還是會經過本地路由器,路由器將解封數據幀,修改源MAC地址為自己的MAC地址,目標MAC地址為路由器的下一跳的目標MAC地址。就這樣不斷修改目標MAC和源MAC,數據能夠到達最終目標主機上,也能最終得到響應數據。
7)物理層
數據最終是通過網卡出去的,數據幀將進入最后一層物理層。在物理層,網卡會將數字信號轉變為電信號傳遞給網線(或其他數據傳輸介質),物理層處理后得到的數據是二進制數據,也稱為bit位數據。
而在網絡上傳輸的很多bit數據就稱為bit流。
3.數據封裝和解除封裝
應用層產生的數據,會經過一層層的處理和封裝,然后通過網絡傳輸出去。最終到達目標主機后,目標主機會將數據一層層的解除封裝,最終在應用層得到最后的數據。
數據封裝的一個簡單示意圖:
數據解除封裝的一個簡單示意圖:
所以,當數據封裝完成的時候,它包含了源和目標MAC、源和目標IP、源和目標端口、被表示層處理過的的真實數據。
在解封數據的時候,將從外層一層層的向里面解封,最終得到最內部的數據部分。
當然,有些時候只會解封到某個層次就再次封裝。例如,路由器要根據IP對數據進行路由,它必須要解封到IP層,也就是解封到第三層,然后路由決策之后,路由器再對數據進行封裝,並傳輸出去。再例如,交換機只能解封到數據鏈路層,它可以識別數據中的MAC地址,而不會去識別網絡層的IP地址,所以通常都說交換機工作在第二層模型,當然,也有比較高級的三層交換機,它可以接觸封裝到IP層並識別IP,而且還會根據IP進行路由。