新聞中心
PRESS CENTER在計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域,我們能夠在網(wǎng)絡(luò)上傳輸數(shù)據(jù),需要一系列硬件和軟件相互配合來完成。其中,TCP、HTTP和MQTT是三種常見的網(wǎng)絡(luò)協(xié)議。下面,本文將詳細(xì)介紹它們之間的區(qū)別與聯(lián)系。
首先,我們來看一下這三者在TCP/IP協(xié)議族中的位置關(guān)系:
按照OSI網(wǎng)絡(luò)分層模型,TCP屬于傳輸層協(xié)議,而HTTP和MQTT屬于應(yīng)用層協(xié)議。在這三者之間,TCP是HTTP和MQTT底層的協(xié)議。
TCP是一種基于連接的、可靠的傳輸協(xié)議。它是互聯(lián)網(wǎng)協(xié)議套件中的一部分,用于在網(wǎng)絡(luò)中的兩個(gè)應(yīng)用程序之間建立可靠的數(shù)據(jù)傳輸通道。TCP提供了數(shù)據(jù)分割、重組、流量控制和擁塞控制等功能,以確保數(shù)據(jù)的可靠性和順序傳遞。它是一種面向連接的協(xié)議,要求在數(shù)據(jù)傳輸之前先建立一個(gè)連接。TCP適用于對數(shù)據(jù)傳輸可靠性要求較高的應(yīng)用,如文件傳輸、電子郵件和網(wǎng)頁瀏覽等。建立一個(gè)TCP連接需要三次握手,斷開一個(gè)TCP連接需要四次揮手。TCP協(xié)議可以對上層網(wǎng)絡(luò)提供接口,使上層網(wǎng)絡(luò)數(shù)據(jù)的傳輸建立在“無差別”的網(wǎng)絡(luò)之上。
0 | SYN=0,ACK=O | 簡寫 | 沒有操作 |
10 | SYN=1,ACK=0 | SYN=1 | 連接請求 |
11 | SYN=1,ACK=1 | SYN=1,ACK=1 | 請求確認(rèn) |
01 | SYN=0,ACK=1 | ACK=1 | 連接確認(rèn) |
第一次握手:客戶端主動建立連接,建立連接的時(shí)候,客戶端發(fā)送syn包(syn=x)到服務(wù)器,并進(jìn)入SYN_SENT狀態(tài),等待服務(wù)器確認(rèn);SYN:同步序列編號(Synchronize Sequence Numbers)。
第二次握手:服務(wù)器收到syn包,必須確認(rèn)客戶的SYN(ack=x+1),同時(shí)自己也發(fā)送一個(gè)SYN包(syn=y),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)。
第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ack=y+1),此包發(fā)送完畢,客戶端和服務(wù)器進(jìn)入ESTABLISHED狀態(tài),完成三次握手。
00 | FIN=0,ACK=0 | 簡寫 | 沒有操作 |
10 | FIN=1,ACK=0 | FIN=1 | 斷開請求 |
11 | FIN=1,ACK=1 | FIN=1,ACK=1 | 請求確認(rèn) |
01 | FIN=0,ACK=1 | ACK=1 | 斷開確認(rèn) |
1.客戶端進(jìn)程發(fā)出連接釋放報(bào)文,并且停止發(fā)送數(shù)據(jù)。釋放數(shù)據(jù)報(bào)文首部,F(xiàn)IN=1,其序列號為seq=u(等于前面已經(jīng)傳送過來的數(shù)據(jù)的最后一個(gè)字節(jié)的序號加1),此時(shí),客戶端進(jìn)入FIN-WAIT-1(終止等待1)狀態(tài)。TCP規(guī)定,F(xiàn)IN報(bào)文段即使不攜帶數(shù)據(jù),也要消耗一個(gè)序號。
2.服務(wù)器收到連接釋放報(bào)文,發(fā)出確認(rèn)報(bào)文,ACK=1,ack=u+1,并且?guī)献约旱男蛄刑杝eq=v,此時(shí),服務(wù)端就進(jìn)入了CLOSE-WAIT(關(guān)閉等待)狀態(tài)。TCP服務(wù)器通知高層的應(yīng)用進(jìn)程,客戶端向服務(wù)器的方向就釋放了,這時(shí)候處于半關(guān)閉狀態(tài),即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了,但是服務(wù)器若發(fā)送數(shù)據(jù),客戶端依然要接受。這個(gè)狀態(tài)還要持續(xù)一段時(shí)間,也就是整個(gè)CLOSE-WAIT狀態(tài)持續(xù)的時(shí)間。
3.客戶端收到服務(wù)器的確認(rèn)請求后,此時(shí),客戶端就進(jìn)入FIN-WAIT-2(終止等待2)狀態(tài),等待服務(wù)器發(fā)送連接釋放報(bào)文(在這之前還需要接受服務(wù)器發(fā)送的最后的數(shù)據(jù))。
4.服務(wù)器將最后的數(shù)據(jù)發(fā)送完畢后,就向客戶端發(fā)送連接釋放報(bào)文,F(xiàn)IN=1,ack=u+1,由于在半關(guān)閉狀態(tài),服務(wù)器很可能又發(fā)送了一些數(shù)據(jù),假定此時(shí)的序列號為seq=w,此時(shí),服務(wù)器就進(jìn)入了LAST-ACK(最后確認(rèn))狀態(tài),等待客戶端的確認(rèn)。
5.客戶端收到服務(wù)器的連接釋放報(bào)文后,必須發(fā)出確認(rèn),ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時(shí),客戶端就進(jìn)入了TIME-WAIT(時(shí)間等待)狀態(tài)。注意此時(shí)TCP連接還沒有釋放,必須經(jīng)過2??MSL(最長報(bào)文段壽命)的時(shí)間后,當(dāng)客戶端撤銷相應(yīng)的TCB后,才進(jìn)入CLOSED狀態(tài)。
6.服務(wù)器只要收到了客戶端發(fā)出的確認(rèn),立即進(jìn)入CLOSED狀態(tài)。同樣,撤銷TCB后,就結(jié)束了這次的TCP連接??梢钥吹?,服務(wù)器結(jié)束TCP連接的時(shí)間要比客戶端早一些。
HTTP是一種應(yīng)用層協(xié)議,用于在Web上傳輸超文本(如HTML)和其他資源。它建立在TCP之上,利用TCP的可靠性和連接性。HTTP采用客戶端-服務(wù)器模型,客戶端發(fā)送HTTP請求到服務(wù)器,服務(wù)器返回HTTP響應(yīng)以傳輸所請求的資源。HTTP是無狀態(tài)協(xié)議,每個(gè)請求和響應(yīng)之間是獨(dú)立的,服務(wù)器不會保留客戶端的狀態(tài)信息。
由于HTTP在每次請求結(jié)束后都會主動釋放連接,因此HTTP連接是一種“短連接”,要保持客戶端程序的在線狀態(tài),需要不斷地向服務(wù)器發(fā)起連接請求。通常的做法是即使不需要獲得任何數(shù)據(jù),客戶端也保持每隔一段固定的時(shí)間向服務(wù)器發(fā)送一次“保持連接”的請求,服務(wù)器在收到該請求后對客戶端進(jìn)行回復(fù),表明知道客戶端“在線”。若服務(wù)器長時(shí)間無法收到客戶端的請求,則認(rèn)為客戶端“下線”,若客戶端長時(shí)間無法收到服務(wù)器的回復(fù),則認(rèn)為網(wǎng)絡(luò)已經(jīng)斷開。
MQTT是一種基于發(fā)布/訂閱(publish/subscribe)模式的"輕量級"通訊協(xié)議,該協(xié)議構(gòu)建于TCP/IP協(xié)議上,由IBM在1999年發(fā)布。MQTT最大優(yōu)點(diǎn)在于,可以以極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)。作為一種低開銷、低帶寬占用的即時(shí)通訊協(xié)議,使其在物聯(lián)網(wǎng)、小型設(shè)備、移動應(yīng)用等方面有較廣泛的應(yīng)用。
MQTT的設(shè)計(jì)思想是開放、簡單、輕量、易于實(shí)現(xiàn)。該協(xié)議具有以下特點(diǎn):
1.使用發(fā)布/訂閱消息模式,提供一對多的消息發(fā)布,解除應(yīng)用程序耦合。
2.對負(fù)載內(nèi)容屏蔽的消息傳輸。
3.使用TCP/IP提供網(wǎng)絡(luò)連接。
4.有三種消息發(fā)布服務(wù)質(zhì)量:
“至多一次”,消息發(fā)布完全依賴底層TCP/IP網(wǎng)絡(luò)。會發(fā)生消息丟失或重復(fù)。這一級別可用于如下情況,環(huán)境傳感器數(shù)據(jù),丟失一次讀記錄無所謂,因?yàn)椴痪煤筮€會有第二次發(fā)送。
“至少一次”,確保消息到達(dá),但消息重復(fù)可能會發(fā)生。
“只有一次”,確保消息到達(dá)一次。這一級別可用于如下情況,在計(jì)費(fèi)系統(tǒng)中,消息重復(fù)或丟失會導(dǎo)致不正確的結(jié)果。
5.小型傳輸,開銷很?。ü潭ㄩL度的頭部是2字節(jié)),協(xié)議交換最小化,以降低網(wǎng)絡(luò)流量。
6.使用Last Will和Testament特性通知有關(guān)各方客戶端異常中斷的機(jī)制。
TCP、HTTP和MQTT之間的聯(lián)系:
TCP是底層的傳輸協(xié)議,HTTP和MQTT可以基于TCP進(jìn)行通信。
HTTP和MQTT都是應(yīng)用層協(xié)議,用于實(shí)現(xiàn)特定的應(yīng)用場景。
HTTP和MQTT都可以在互聯(lián)網(wǎng)上進(jìn)行通信,通過網(wǎng)絡(luò)傳輸數(shù)據(jù)。
TCP、HTTP和MQTT之間的區(qū)別:
TCP是一種通用的傳輸協(xié)議,提供可靠的、面向連接的數(shù)據(jù)傳輸。而HTTP和MQTT是建立在TCP之上的應(yīng)用層協(xié)議,具有更高級的功能。
HTTP是面向文檔的協(xié)議,用于在Web上傳輸超文本數(shù)據(jù)。MQTT則是一種輕量級的發(fā)布/訂閱協(xié)議,用于物聯(lián)網(wǎng)設(shè)備之間的通信。
HTTP使用請求-響應(yīng)模型,每個(gè)請求都需要單獨(dú)建立連接,適用于客戶端向服務(wù)器發(fā)送請求并接收響應(yīng)的場景。MQTT使用發(fā)布/訂閱模型,允許設(shè)備之間進(jìn)行異步通信。
HTTP通常使用標(biāo)準(zhǔn)的80端口(HTTP)或443端口(HTTPS),而MQTT使用1883端口(非加密)或8883端口(加密)。
數(shù)據(jù)傳輸協(xié)議是實(shí)現(xiàn)設(shè)備互聯(lián)和數(shù)據(jù)交換的關(guān)鍵組成部分;其中TCP適合高可靠性傳輸,HTTP適合Web服務(wù)和API調(diào)用,而MQTT則是物聯(lián)網(wǎng)設(shè)備通信的最佳選擇。