TCP/IP四層體系結構。
五層協議的體系結構只是為了介紹網絡原理而設計的,實際應用的還是TCP/IP四層體系結構。
TCP/IP協議族
1、TCP/IP協議模型
首先,我們需要知道一個協議族的概念。協議族是多個協議的統(tǒng)稱。,TCP/IP就是一個協議族。
其包含IP、TCP、UDP、HTTP、FTP、MQTT等協議。TCP/IP協議模型:
(圖片:《計算機網絡》謝希仁、《TCP/IP協議詳解》)
TCP/IP協議模型分四層,上層依賴于下層。
從下到上看:
(1)第一層鏈路層(網絡接口層):
鏈路層規(guī)定了數據幀能被網卡接收的條件,最常見的方式是利用網卡的 MAC 地址,發(fā)送方會在欲發(fā)送的數據幀的首部加上接收方網卡的 MAC 地址信息,接收方只有監(jiān)聽到屬于自己的MAC 地址信息后,才會去接收并處理該數據。
(2)網絡層(網際層):
網絡層實現了數據包在主機之間的傳遞 。相關協議:IP、ICMP等協議。
(3)傳輸層(運輸層):
傳輸層可以區(qū)分數據包是屬于哪一個應用程序的。相關協議:TCP、UDP協議。
(4)應用層
應用層提供特定的應用服務。相關協議:HTTP、MQTT、FTP等協議。
應用層以下的工作完成了數據的傳遞工作,應用層則決定了你如何應用和處理這些數據,之所以會有許多的應用層協議, 是因為互聯網中傳遞的數據種類很多、差異很大、應用場景十分多樣。
2、網絡數據的發(fā)送與接收
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》)
發(fā)送數據時, 將數據向下交給傳輸層。傳輸層會在數據前面加上傳輸層首部(此處以 TCP 協議為例, 傳輸層首部為 TCP 首部,也可以是 UDP 首部), 然后向下交給網絡層。
同樣地,網絡層會在數據前面加上網絡層首部(IP 首部) ,然后將數據向下交給鏈路層, 鏈路層會對數據進行最后一次封裝,即在數據前面加上鏈路層首部(此處使用以太網接口為例) ,然后將數據交給網卡。
數據的接收過程與發(fā)送過程正好相反,可以概括為 TCP/IP 的各層協議對數據進行解析的過程。
3、IP協議
(1)概念
IP 協議(Internet Protocol),又稱之為網際協議, IP 協議處于 IP 層工作,它是整個TCP/IP 協議棧的核心協議,上層協議都要依賴 IP 協議提供的服務, IP 協議負責將數據報從源主機發(fā)送到目標主機。
IP 協議是一種無連接的不可靠數據報交付協議,協議本身不提供任何的錯誤檢查與恢復機制。
(2)IP地址
在全球的互聯網中,每個主機都要唯一的一個 IP 地址作為身份識別。每個 IP 地址長度為 32 比特(4 字節(jié)),使用點分十進制記法來表示,如192.168.0.1。
IP 地址劃分為 5 大類,分別為 A、 B、 C、 D、 E 五類,每一類地址都覺定了其中 IP 地址的一部分組成(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》):
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》)
(3)局域網、廣域網
-
局域網(Local Area Network, 縮寫為 LAN),又稱內網, 指覆蓋局部區(qū)域(如辦公室或樓層)的計算機網絡。
查看本機內網IP:
-
廣域網(Wide Area Network,縮寫為 WAN),又稱廣域網、外網、公網。是連接不同地區(qū)計算機以進行通信的網絡。
查看本機外網IP:
-
查看某網站IP:
-
局域網與廣域網示意圖
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》)
無線路由器把電腦、手機等設備連接到局域網 LAN 上,并分配 IP 地址,即局域網 IP ,我們可以稱之為 LAN-IP 。
路由器的地址就是運營商給我們的一個 IP 地址,這個 IP 地址是有效的,可以看做是 WAN-IP。
LAN-IP 是路由器分配給我們的 IP,那么我們想要跨越邊界進入廣域網中, 就需要將 LAN-IP 變成有效的的 IP 地址,也就是 WAN-IP,那么在路由器中就需要將IP 地址進行轉換,完成 LAN-IP<—>WAN-IP 地址轉換(NAT)。
當持有 WAN-IP 的 IP 包順利到達下一個邊界 Internet Gateway,這是通往互聯網Internet 的最后一道關卡,即邊界。
左邊是廣域網,右邊是互聯網, 也需要做 WAN-IP 與Global-IP(互聯網公共 IP)的轉換才能進入互聯網中 。
(4)IP數據報
IP 數據報的格式如下所示:
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》)
各字段說明:
-
版本號(4bit):是IP協議的版本,對于IPv4,該值為4;對于IPv6,該值為6 。
-
首部長度(4bit):用于記錄 IP 首部的數據的長度 。
-
服務類型(8bit):包括:最小延時、最大傳輸、最大可靠性、最小消耗等。
-
數據報長度(16bit):IP 數據報的總長度(首部加上數據區(qū)域),以字節(jié)為單位。
-
標識(16bit):識別號,主機每發(fā)一次都會自動增加。
-
標志(3bit):標記位,用于標記是否被分段。
-
分片偏移量(13bit):表示當前分片所攜帶的數據在整個 IP 數據報中的相對偏移位置(以 8 字節(jié)為單位) 。
-
生存時間(8bit):該字段用來確保數據報不會永遠在網絡中循環(huán) 。
-
上層協議(8bit):指示了 IP 數據報的數據部分應交給哪個特定的傳輸層協議(TCP、UDP)。
-
首部校驗和(16bit):首部檢驗和用于幫助路由器檢測收到的 IP 數據報首部是否發(fā)生錯誤。
-
源IP地址(32bit)。
-
目標IP地址(32bit)。
-
選項:選項字段占據 0~40 個字節(jié)。
-
數據。
4、UDP協議
UDP是 User Datagram Protocol 的簡稱, 中文名是用戶數據報協議, 是一種無連接、不可靠的協議。
主要特點:
-
無連接、不可靠。
-
盡可能提供交付數據服務,出現差錯直接丟棄,無反饋。
-
支持一對一, 一對多, 多對一,多對多的交互通信。
-
速度快, UDP 沒有握手、確認、窗口、重傳、擁塞控制等機制 。
-
面向報文。
UDP 雖然有很多缺點, 但是也不排除其能用于很多場合, 因為在如今的網絡環(huán)境下,UDP 協議傳輸出現錯誤的概率是很小的, 并且它的實時性是非常好, 常用于實時視頻的傳輸,比如直播、網絡電話等。
因為即使是出現了數據丟失的情況,導致視頻卡幀,這也不是什么大不了的事情,所以, UDP 協議還是會被應用與對傳輸速度有要求,并且可以容忍出現差錯的數據傳輸中。
(1)UDP報文
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》)
端口號的取值在0~65535 之間;16bit 的總長度用于記錄 UDP 報文的總長度,包括 8 字節(jié)的首部長度與數據區(qū)域。相關文章:
【socket筆記】TCP、UDP通信總結
5、TCP協議
TCP協議(TransmissionControl Protocol,傳輸控制協議),是一個面向連接的協議,無論哪一方向另一方發(fā)送數據之前,都必須先在雙方之間建立一個連接,否則將無法發(fā)送數據。
TCP數據是會封裝到IP數據當中,我們現在看看TCP協議的頭部數據定義:
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》、《TCP/IP協議詳解》)
-
16-bit source port number:16位源端口號
-
16-bit destination prot number:16位目標端口號
-
32-bit sequence number :32位順序號
-
32-bit acknowledgment number :32位應答號
-
4-bit header length:4位頭部長度
-
reserved(6 bit):保留位
-
URG:緊急標志位
-
ACK:應答標志位(表明應答號之前的數據接收成功)
-
PSH:不進行緩存直接推送到應用的標志位
-
RST:標志重連接的標志位
-
SYN:同步順序號以初始化連接的標志位
-
FIN:發(fā)送數據完畢的標志位(表明不會再發(fā)送數據過來)
-
16-bit window size:窗口大?。ㄓ糜诳亓鳎?/span>
-
16-bit TCP checksum:檢驗(檢驗傳輸的數據是否正確)
-
16-bit urgent pointer:當URG標志被設置時有效,傳送緊急數據。
下面看一下TCP協議的一些特性:
(1)確認與重傳
TCP 提供可靠的運輸層, 但它依賴的是 IP 層的服務, IP 數據報的傳輸是無連接、 不可靠的,因此它要通過確認來知道接收方確實已經收到數據了。
但數據和確認都有可能會丟失, 因此 TCP 通過在發(fā)送時設置一個超時機制(定時器)來解決這種問題, 如果當超時時間到達的時候還沒有收到對方的確認,它就重傳該數據。
(2)緩沖機制
在發(fā)送方想要發(fā)送數據的時候, 由于應用程序的數據大小、 類型都是不可預估的, 而TCP 協議提供了緩沖機制來處理這些數據。
如在數據量很小的時候, TCP 會將數據存儲在一個緩沖空間中, 等到數據量足夠大的時候在進行發(fā)送數據, 這樣子能提供傳輸的效率并且減少網絡中的通信量。
而且在數據發(fā)送出去的時候并不會立即刪除數據,還是讓數據保存在緩沖區(qū)中,因為發(fā)送出去的數據不一定能被接收方正確接收,它需要等待到接收方的確認再將數據刪除。
(3)全雙工通信
在 TCP 連接建立后,那么兩個主機就是對等的,任何一個主機都可以向另一個主機發(fā)送數據,數據是雙向流通的,所以 TCP 協議是一個全雙工的協議。
(4)流量控制
TCP 提供了流量控制服務(flow-control service)以消除發(fā)送方使接收方緩沖區(qū)溢出的可能性。
流量控制是一個速度匹配服務,即發(fā)送方的發(fā)送速率與接收方應用程序的讀取速率相匹配, TCP 通過讓發(fā)送方維護一個稱為接收窗口(receive window)的變量來提供流量控制。
(5)差錯控制
除了確認與重傳之外, TCP 協議也會采用校驗和的方式來檢驗數據的有效性,主機在接收數據的時候,會將重復的報文丟棄,將亂序的報文重組。
發(fā)現某段報文丟失了會請求發(fā)送方進行重發(fā),因此在 TCP 往上層協議遞交的數據是順序的、無差錯的完整數據。
關于TCP協議的一些其它內容如三次握手、四次揮手、示例等可以看以下文章:
C語言、嵌入式應用:TCP通信實例分析
【面試必考】TCP協議“三次握手”與“四次揮手”
【socket筆記】TCP、UDP通信總結
6、HTTP協議
HTTP 協議是 Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫, 是用于從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳輸協議。
它是基于TCP/IP 協議通信的,因此它也是基于客戶端-服務器模型運作的,是一個應用層協議,可以用它來傳輸服務器的各種資源,如文本、圖片、音頻等。
HTTP 協議的特點:
-
簡單:當客戶端向服務器請求服務時,只需傳送請求方法和路徑即可獲取服務器的資源, 請求方法常用的有
GET、 HEAD、 POST等, 每種方法規(guī)定了客戶端與服務器通信的類型不同。
-
快捷:由于 HTTP 協議簡單,使得 HTTP 服務器的程序規(guī)模小,因而通信速度很快。
-
靈活:HTTP 允許傳輸任意類型的數據對象, 傳輸的類型由 Content-Type加以標記。
-
無連接:簡單來說就是每進行一次 HTTP 通信,都要斷開一次 TCP 連接 ??呻S著 HTTP 的普及,文檔中包含大量圖片的情況多了起來,每次請求完都要斷開 TCP 連接,無疑增加通信量的開銷為了解決 TCP的連接問題, HTTP1.1提出了持久連接的方法。
-
無狀態(tài): 無狀態(tài)是指協議對于事務處理沒有記憶能力。但其實這種無狀態(tài)對于用戶來說也是不友好的(比如:很多網站必須要記住已經登陸過的用戶,總不能每刷新一次頁面就要求用戶重新輸入帳號密碼),因此為了解決無狀態(tài)的問題,引入了 Cookie 技術,這是一種可以讓服務器知道用戶上一次做了什么操作,并且記錄下來。
(1)URL 與資源
URL全稱是 Uniform Resource Locator, 中文叫統(tǒng)一資源定位符, 是互聯網上用來標識某一處資源的絕對地址,使用它我們就必然能找到資源,除非資源已經被轉移了。
URI(Uniform Resource Identifiers)是一個通用的概念,由兩個子集組成,分別是 URL 和 URN, URL 是通過資源的位置來標識資源,而 URN 更高級一點,只需通過資源名字即可識別資源,與他們所處的位置是無關的,目前暫時還未推廣 URN。
URL的通用格式如下(絕大部分的 URL 是不會包含所有組件的內容的 ):
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》)
(2)HTTP報文
① 請求報文:
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》)
-
method (方法):
HTTP 請求報文的起始行以方法作為開始,方法用來告知服務器要做些什么, 常見的方法有GET、 POST、 HEAD` 等 。
-
請求 URL(request-URL) :指定了所請求的資源。
-
版本(version):指定報文所使用的 HTTP 協議版本 。
② 應答報文:
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》)
-
狀態(tài)碼(status):這是在 HTTP 應答報文中使用的。不同狀態(tài)碼代表不同的含義:
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》)
實例:
7、MQTT協議
MQTT 協議全稱是 Message Queuing Telemetry Transport,翻譯過來就是消息隊列遙測傳輸協議,它是物聯網常用的應用層協議。
其運行在 TCP/IP 中的應用層中,依賴 TCP 協議,因此它具有非常高的可靠性,同時它是基于 TCP 協議的<客戶端-服務器>模型發(fā)布/訂閱主題消息的輕量級協議。
(1)MQTT通信模型
(圖片來源:野火《LWIP應用開發(fā)實戰(zhàn)指南》)
MQTT協議是基于客戶端-服務器模型,在協議中主要有三種身份:發(fā)布者(Publisher)、服務器(Broker)以及訂閱者(Subscriber)。
MQTT 消息的發(fā)布者和訂閱者都是客戶端,服務器只是作為一個中轉的存在,將發(fā)布者發(fā)布的消息進行轉發(fā)給所有訂閱該主題的訂閱者。
MQTT 客戶端的功能:
-
發(fā)布消息給其它相關的客戶端。
-
訂閱主題請求接收相關的應用消息。
-
取消訂閱主題請求移除接收應用消息。
-
從服務端終止連接。
MQTT 服務器常被稱為 Broker(消息代理) 。它的功能有:
-
接受來自客戶端的網絡連接請求。
-
接受客戶端發(fā)布的應用消息。
-
處理客戶端的訂閱和取消訂閱請求。
-
轉發(fā)應用消息給符合條件的已訂閱客戶端(包括發(fā)布者自身)。
(2)MQTT消息
MQTT所發(fā)的消息包含:主題 內容,客戶端可以訂閱任意主題,若有其它客戶端發(fā)布主題時符合所訂閱的主題,就會由網關發(fā)送到客戶端。
什么是主題?
MQTT 服務器為每個連接的客戶端(訂閱者)添加一個標簽,該標簽與服務器中的所有訂閱相匹配, 服務器會將消息轉發(fā)給與標簽相匹配的每個客戶端。這樣的一個標簽就是主題。
實例:
服務質量:
MQTT提供三種服務質量(Quality of Service,簡寫QoS),供開發(fā)者根據不同的情景選擇不同的服務級別:
-
QoS0:最多發(fā)送一次消息,在消息發(fā)送出去后,接收者不會發(fā)送回應,發(fā)送者也不會重發(fā)消息。
-
QoS1:最少發(fā)送一次消息(消息最少需要送達一次,也有可送達多次), QoS 1的 PUBLISH 報文的可變報頭中包含一個報文標識符,需要 PUBACK 報文確認。
-
QoS2:這是最高等級的服務質量,消息丟失和重復都是不可接受的。只不過使用這個服務質量等級會有額外的開銷,這個等級常用于支付中,因為支付是必須有且僅有一次成功,總不能沒給錢或者給了多次錢吧。
以上就是本次分享的一些計算機網絡基礎知識,計算機網絡的內容很多,一篇文章不可能全部覆蓋,以上也僅僅是一些概括性地抽取一些表層內容過來分享,需要閱讀相關書籍來加深學習。
內容來源
-
野火《LWIP應用開發(fā)實戰(zhàn)指南》
-
《計算機網絡》謝希仁
-
《TCP/IP協議詳解》
-
https://www.scaugreen.cn/
往期推薦:
這可能是你離大廠最近的一次
一份硬核的QT開發(fā)經驗及資料分享,長文收藏!
分享一個簡潔易用的嵌入式操作系統(tǒng)內核
點擊閱讀原文,查看更多分享
計算機網絡是指將地理位置不同的具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來,在網絡操作系統(tǒng),網絡管理軟件及網絡通信協議的管理和協調下,實現資源共享和信息傳遞的計算機系統(tǒng)。
關鍵字: 計算機網絡 操作系統(tǒng) 資源共享當我每了解一個新技術或者新框架的時候,我都想要先把名字概念弄懂是什么,可見概念對于我們的幫助非常大。計算機網絡中的概念也是非常龐雜,理解起來比較困難,所以這里,我給大家匯總了計算機網絡中89個常見的概念,希望對你有所幫助...
關鍵字: 計算機網絡當我每了解一個新技術或者新框架的時候,我都想要先把名字概念弄懂是什么,可見概念對于我們的幫助非常大。計算機網絡中的概念也是非常龐雜,理解起來比較困難,所以這里,我給大家匯總了計算機網絡中89個常見的概念,希望對你有所幫助...
關鍵字: 計算機網絡