最近研究IOT相關的技術與架構,由于網路上的資料質量并不是很好,很多文章把一些網路模型與協議混淆,因此梳理了一下這些概念,無論是做IOT平臺還是微服務都是離不開網路開發這個一個重要的環節,
首先先說一下什么是網路七層模型,如下圖(網路盜圖)
物理層:解決兩個硬體之間怎么通信的問題,常見的物理媒介有光纖、電纜、中繼器等,它主要定義物理設備標準,如網線的介面型別、光纖的介面型別、各種傳輸介質的傳輸速率等,它的主要作用是傳輸位元流(就是由1、0轉化為電流強弱來進行傳輸,到達目的地后在轉化為1、0,也就是我們常說的數模轉換與模數轉換),這一層的資料叫做位元,
資料鏈路層:在計算機網路中由于各種干擾的存在,物理鏈路是不可靠的,該層的主要功能就是:通過各種控制協議,將有差錯的物理信道變為無差錯的、能可靠傳輸資料幀的資料鏈路,它的具體作業是接收來自物理層的位流形式的資料,并封裝成幀,傳送到上一層;同樣,也將來自上層的資料幀,拆裝為位流形式的資料轉發到物理層,這一層的資料叫做幀,
網路層:計算機網路中如果有多臺計算機,怎么找到要發的那臺?如果中間有多個節點,怎么選擇路徑?這就是路由要做的事,該層的主要任務就是:通過路由選擇演算法,為報文(該層的資料單位,由上一層資料打包而來)通過通信子網選擇最適當的路徑,這一層定義的是IP地址,通過IP地址尋址,所以產生了IP協議,
傳輸層:當發送大量資料時,很可能會出現丟包的情況,另一臺電腦要告訴是否完整接收到全部的包,如果缺了,就告訴丟了哪些包,然后再發一次,直至全部接收為止,
簡單來說,傳輸層的主要功能就是:監控資料傳輸服務的質量,保證報文的正確傳輸,
會話層:雖然已經可以實作給正確的計算機,發送正確的封裝過后的資訊了,但我們總不可能每次都要呼叫傳輸層協議去打包,然后再呼叫IP協議去找路由,所以我們要建立一個自動收發包,自動尋址的功能,于是會話層出現了:它的作用就是建立和管理應用程式之間的通信,
表示層:表示層負責資料格式的轉換,將應用處理的資訊轉換為適合網路傳輸的格式,或者將來自下一層的資料轉換為上層能處理的格式,
應用層:應用層是計算機用戶,以及各種應用程式和網路之間的介面,其功能是直接向用戶提供服務,完成用戶希望在網路上完成的各種作業,
這七層是OSI開放性的通信系統模型,組成了網路互通的基礎,作為應用軟體開發者來說,我們只需關注傳輸層(TCP/UDP)以上網路層的開發,傳輸層,我們只需知道TCP協議,提供可靠性的服務連接,UDP協議提供不可靠性的服務連接,下層的網路協議大學的時候課堂都講得非常清晰了,
我們著重研究一下上三層模型,這三層是最容易讓人混淆的,因為會話層、表示層、應用層在四/五層模型里面統稱為應用層,在應用層里面最容易混淆的就是把 TCP/IP,HTTP1.1/HTTP2,RPC、SOA、長連接短連接 這些概念混淆,把協議和技識訓淆,就如上圖(盜圖)把RPC放到會話層其實是不對的,RPC(Remote Procedure Call)是一個技術概念,不屬于國際標準協議,RPC 技術有很多優秀的框架,如最近比較火爆的Google gRpc,ZeroC ICE等,這些框架為了適配各種開發語言,規定了一些開發協議和規范,還有MQTT(Message Queuing Telemetry Transport,訊息佇列遙測傳輸協議)也是一種基于網路層的應用開發協議,提供可靠的訊息傳輸,無論gRpc還是MQTT它們都不是網路協議的范疇,
接著再說一下網路傳輸協議的應用層,應用層的核心協議就HTTP(Hyper Text Transfer Protocol)協議,HTTP1.0 之前,主要是基于TCP傳輸協議,但是隨著互聯網的爆發性增長,HTTP2.0 衍生出來了,HTTP2.0 在1.0的基礎上優化了首部壓縮和多路復用技術等,大大提高了網路IO吞吐量,gRPC框架就是基于HTTP2.0 協議衍生出來的RPC開發框架,順便提一下,Asp.Net Core 6.0 后,也默認使用HTTP2.0 協議,
說完HTTP再接著說一下MQTT協議,MQTT協議也是基于TCP傳輸層之上的一個網路應用層協議,是為硬體性能低下的遠程設備以及網路狀況糟糕的情況下而設計的發布/訂閱型訊息協議,主要應用與工業互聯網行業,由于MQTT協議更簡潔輕量,有人測驗過MQTT協議比HTTP協議傳輸快100倍,非常適合工業互聯時代,
上述見解如有表述有誤,歡迎大咖指導,
您的支持,我的動力!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524933.html
標籤:其他
