常用網(wǎng)絡(luò)協(xié)議解析
互聯(lián)網(wǎng)已經(jīng)對(duì)人類社會(huì)產(chǎn)生了巨大的變革,它改變了我們生活的方方面面。而互聯(lián)網(wǎng)通信的本質(zhì)是數(shù)字通信,而數(shù)字通信則離不開(kāi)通信協(xié)議的制定。只有按照約定的方式進(jìn)行信息封裝和解析,我們才能實(shí)現(xiàn)通信。而互聯(lián)網(wǎng)通信所遵守的協(xié)議,被統(tǒng)稱為TCP/IP。
TCP/IP是一個(gè)協(xié)議族,其中包含了眾多的協(xié)議。然而對(duì)于網(wǎng)絡(luò)應(yīng)用開(kāi)發(fā)人員來(lái)說(shuō),他們更熟悉的可能是其中的應(yīng)用層協(xié)議,比如HTTP、FTP、MQTT等。
HTTP協(xié)議,即超文本傳輸協(xié)議,是應(yīng)用最廣泛的協(xié)議之一。幾乎每個(gè)人在日常使用電腦時(shí),都會(huì)進(jìn)行一種常規(guī)操作:打開(kāi)瀏覽器,輸入網(wǎng)址,最后按下回車。這一刻,我們就啟動(dòng)了HTTP通信。HTTP協(xié)議工作在客戶端-服務(wù)端架構(gòu)之上,瀏覽器作為HTTP客戶端通過(guò)URL向HTTP服務(wù)端發(fā)送請(qǐng)求。而Web服務(wù)器則根據(jù)接收到的請(qǐng)求,向客戶端發(fā)送響應(yīng)信息。通過(guò)瀏覽器和服務(wù)器之間的HTTP通信,我們可以輕松地獲得來(lái)自世界各地的信息。此外,在物聯(lián)網(wǎng)時(shí)代,不僅大型服務(wù)器可以提供網(wǎng)頁(yè),許多嵌入式設(shè)備(如空調(diào)、冰箱、插座、路由器等)也能夠嵌入網(wǎng)頁(yè),在物理鏈路通暢的情況下,用戶可以通過(guò)手機(jī)或平板電腦上的瀏覽器隨時(shí)隨地監(jiān)控這些設(shè)備。
FTP(文件傳輸協(xié)議)是另一種應(yīng)用層協(xié)議。它使得主機(jī)之間能夠共享文件,并用于在兩臺(tái)設(shè)備之間進(jìn)行雙向傳輸。FTP工作在客戶端-服務(wù)端的框架系統(tǒng)中。用戶可以通過(guò)支持FTP協(xié)議的客戶端程序連接到遠(yuǎn)程主機(jī)上的FTP服務(wù)端程序,通過(guò)客戶端程序向服務(wù)端程序發(fā)送命令,并接收?qǐng)?zhí)行結(jié)果。除了基本的文件上傳/下載功能,F(xiàn)TP還具備目錄操作、權(quán)限設(shè)置和身份驗(yàn)證等功能。許多網(wǎng)盤(pán)的文件傳輸功能也是基于FTP實(shí)現(xiàn)的。
隨著物聯(lián)網(wǎng)的發(fā)展,物聯(lián)網(wǎng)設(shè)備使用何種應(yīng)用層協(xié)議進(jìn)行通信一直備受爭(zhēng)議。許多開(kāi)發(fā)人員習(xí)慣了網(wǎng)頁(yè)開(kāi)發(fā)模式,于是經(jīng)常選擇HTTP作為通信方式。然而,使用HTTP存在一些不利因素:HTTP是同步協(xié)議,設(shè)備需要等待服務(wù)器的響應(yīng)才能進(jìn)行下一步的工作。在設(shè)備數(shù)量多、網(wǎng)絡(luò)不可靠的場(chǎng)景下,實(shí)現(xiàn)同步通信非常困難。HTTP是單向的,設(shè)備只能主動(dòng)向服務(wù)器發(fā)送數(shù)據(jù),無(wú)法被動(dòng)接收來(lái)自網(wǎng)絡(luò)的數(shù)據(jù),這對(duì)于實(shí)時(shí)控制場(chǎng)景來(lái)說(shuō)并不合適。另外,HTTP的幀頭和規(guī)則較為復(fù)雜,實(shí)現(xiàn)在設(shè)備中需要耗費(fèi)大量的系統(tǒng)資源。因此,在上述情況下,輕量級(jí)的異步通信協(xié)議如MQTT和COAP備受物聯(lián)網(wǎng)設(shè)備開(kāi)發(fā)商的青睞,尤其是MQTT。MQTT是一種由IBM公司于1990年設(shè)計(jì)并推出的通信協(xié)議,于2014年成為了OASIS開(kāi)放標(biāo)準(zhǔn)。近年來(lái),MQTT的應(yīng)用呈現(xiàn)爆炸性增長(zhǎng)的勢(shì)頭,有望成為物聯(lián)網(wǎng)的主導(dǎo)協(xié)議。此外,MQTT還廣泛應(yīng)用于物聯(lián)網(wǎng)之外的其他領(lǐng)域,比如許多公司在制作手機(jī)APP時(shí)使用MQTT實(shí)現(xiàn)消息推送和即時(shí)聊天等功能。
越來(lái)越多的嵌入式設(shè)備需要接入互聯(lián)網(wǎng),這是由以下幾個(gè)原因所驅(qū)動(dòng):
首先,近年來(lái),帶有網(wǎng)絡(luò)接入功能的MCU和SoC不斷涌現(xiàn),開(kāi)源輕量級(jí)的TCP/IP協(xié)議棧也日益完善,云平臺(tái)市場(chǎng)繁榮發(fā)展,這降低了嵌入式設(shè)備接入互聯(lián)網(wǎng)的成本,使得許多資源受限的低端設(shè)備也能夠接入互聯(lián)網(wǎng)。
其次,“物聯(lián)網(wǎng)+”的潮流愈發(fā)盛行,遠(yuǎn)程監(jiān)控已經(jīng)成為許多產(chǎn)品的技術(shù)要求。
最后,人們對(duì)設(shè)備的智能性需求越來(lái)越高。如今熱門的大數(shù)據(jù)、圖像處理、語(yǔ)音識(shí)別和機(jī)器學(xué)習(xí)等功能都可以在云端集成,成為云平臺(tái)提供的服務(wù)。終端設(shè)備往往計(jì)算和存儲(chǔ)能力有限,因此,要使設(shè)備具備智能,最便捷的方法就是接入云平臺(tái),利用云服務(wù)。
互聯(lián)網(wǎng)的基礎(chǔ)是TCP/IP。雖然TCP/IP協(xié)議族非常復(fù)雜,我們可能沒(méi)有時(shí)間和精力去深入學(xué)習(xí)它的設(shè)計(jì)思想和實(shí)現(xiàn)原理。因此,本文的重點(diǎn)并不在于對(duì)TCP/IP的解讀,而在于對(duì)其應(yīng)用的介紹。然而,TCP/IP的復(fù)雜性也決定了它并不是一件簡(jiǎn)單易用的東西。即便我們只關(guān)注應(yīng)用開(kāi)發(fā),仍然需要對(duì)許多概念和設(shè)計(jì)思想有所了解,才能編寫(xiě)出正確、高效且健壯的應(yīng)用程序。