本文介紹在串口轉(zhuǎn)TCP/IP中如何使用各種TCP工作模式,根據(jù)不同的應(yīng)用如何進(jìn)行靈活選擇TCP客戶端、TCP服務(wù)器、UDP、UDP組播。然后介紹如何用zlvircom配置串口轉(zhuǎn)TCP/IP并和SocketDlgTest程序通信。
TCP/IP是網(wǎng)際互聯(lián)的基本協(xié)議,TCP/IP實(shí)際涉及網(wǎng)絡(luò)協(xié)議的兩層:網(wǎng)絡(luò)層和傳輸層。IP屬于網(wǎng)絡(luò)層,而TCP屬于傳輸層,實(shí)際上TCP/IP協(xié)議還有另外部分協(xié)議即UDP協(xié)議,UDP協(xié)議和TCP協(xié)議共同組成了TCP/IP協(xié)議的傳輸層。而TCP協(xié)議有具有客戶端和服務(wù)端兩種工作模式。在RS232/RS485聯(lián)網(wǎng)模塊應(yīng)用中,主要在UDP、TCP客戶端、TCP服務(wù)器3種模式之間進(jìn)行選擇。如圖所示
TCP(Transmission Control Protocol)是可靠連接協(xié)議。我們可以用打電話來類比TCP協(xié)議。使用TCP協(xié)議進(jìn)行數(shù)據(jù)傳輸,首先需要建立連接;就如在通電話前需要先撥通電話一樣。TCP是可靠傳輸?shù)模茨銈鬏數(shù)臄?shù)據(jù)有誤或者丟失,則會(huì)自動(dòng)重新傳輸以保證數(shù)據(jù)正確;這正如打電話的時(shí)候,如果信號(hào)不好,收方會(huì)說:“聽不清,請(qǐng)?jiān)僬f一遍?!?/p>
UDP(User Datagram Protocol)是報(bào)文傳輸協(xié)議。我們可以用手機(jī)短信來類比UDP協(xié)議。使用UDP協(xié)議,你無需先征得對(duì)方的同意(無需先建立連接),可以隨時(shí)發(fā)送。但是UDP協(xié)議是不可靠傳輸?shù)?,你發(fā)送出去的數(shù)據(jù)不能夠保證正確地被對(duì)方收到;
所謂“正確接收”,它包括3方面的內(nèi)容:1.丟失問題:數(shù)據(jù)丟失后可以重傳。2.誤碼問題:數(shù)據(jù)內(nèi)容錯(cuò)誤能被檢測(cè)并重新發(fā)送。3.順序問題:UDP無法保證數(shù)據(jù)的順序,例如在發(fā)送長(zhǎng)文字的短信的時(shí)候,有可能后半部分短信內(nèi)容先收到,然后再收到前半部分短信內(nèi)容。這給接收者較大的迷惑,TCP協(xié)議沒有這個(gè)問題。
UDP協(xié)議的也有自身優(yōu)點(diǎn)。1.簡(jiǎn)單性、方便性,UDP協(xié)議非常類似串口通信,因?yàn)榇诎l(fā)送數(shù)據(jù)本身基于非連接(報(bào)文)的。此時(shí)在串口轉(zhuǎn)以太網(wǎng)的時(shí)候,使用UDP協(xié)議符合原來的思維。2.UDP協(xié)議具有廣播、組播功能,可以實(shí)現(xiàn)一對(duì)多通信。
TCP | UDP | |
---|---|---|
需要連接 | 是 |
否 |
占用線路 |
是 |
否 |
可靠傳輸 | 是 |
否 |
簡(jiǎn)單易用 | 否 |
是 |
支持廣播 | 否 |
是 |
在選擇TCP進(jìn)行通信的時(shí)候,通信的雙方,必須一方為TCP客戶端(TCP Client),一方為TCP服務(wù)器(TCP Server)。以打電話來類比,打電話的人是TCP客戶端,接電話的一方為TCP服務(wù)器。TCP/IP協(xié)議中的IP地址類似電話號(hào)碼,而TCP/IP中的端口號(hào)類似電話分機(jī)號(hào)??蛻舳耍〒茈娫捳撸?,首先需要知道對(duì)方的IP地址和端口(電話號(hào)碼和分機(jī)號(hào)),先連接上TCP服務(wù)器端(接聽者的電話摘機(jī)),才能進(jìn)行數(shù)據(jù)傳輸(通話)。和一般電話不同,在這里TCP服務(wù)器可以同時(shí)接入多個(gè)TCP客戶端,就如有多路線路的電話,不會(huì)因?yàn)橐宦冯娫捲诮油ㄖ卸荒芙尤肫渌娫挕?/p>
在ZLSN聯(lián)網(wǎng)模塊的RS232轉(zhuǎn)網(wǎng)絡(luò)中,TCP連接有長(zhǎng)連接和短連接之分。TCP長(zhǎng)連接就是連接建立后不斷開,直到斷電。TCP短連接是指需要通信的時(shí)候建立連接,通信完畢后立即關(guān)閉連接。
UDP相對(duì)于TCP來說UDP的一個(gè)優(yōu)勢(shì)是可以實(shí)現(xiàn)一對(duì)多的通信。以下就介紹UDP廣播和UDP組播。
UDP廣播:UDP廣播包不同于普通的UDP數(shù)據(jù)包,UDP廣播說明如下:
1.UDP廣播包一般只能夠在局域網(wǎng)內(nèi)部存在,也就是說它是不能夠?qū)崿F(xiàn)跨路由通信的。
2.同一個(gè)局域網(wǎng)內(nèi)的所有的計(jì)算機(jī)都能夠接收到廣播包。這樣增加了網(wǎng)絡(luò)的負(fù)擔(dān),同時(shí)安全性也會(huì)降低。
3.卓嵐ZLSN系列模塊支持發(fā)送和接受UDP廣播包。另外SocketDlgTest也支持發(fā)送和接受UDP廣播數(shù)據(jù)包,可以用于UDP廣播調(diào)試。
UDP組播:UDP單播(即普通的UDP通信)可以實(shí)現(xiàn)點(diǎn)與點(diǎn)之間的通信。UDP的廣播可以實(shí)現(xiàn)一點(diǎn)向多點(diǎn)發(fā)送數(shù)據(jù)。但是UDP廣播存在以下缺點(diǎn):不僅需要接收數(shù)據(jù)的聯(lián)網(wǎng)模塊可以收到數(shù)據(jù),任何一臺(tái)局域網(wǎng)中的計(jì)算機(jī)都可以收到數(shù)據(jù),這樣數(shù)據(jù)包保密性不強(qiáng),同時(shí)也給不愿接收該數(shù)據(jù)的計(jì)算機(jī)增加了負(fù)擔(dān)。
UDP組播可以解決以上問題,UDP組播可以實(shí)現(xiàn)一點(diǎn)向多點(diǎn)發(fā)送數(shù)據(jù),而且只有加入某個(gè)組播組的聯(lián)網(wǎng)模塊才可以收到數(shù)據(jù),不會(huì)對(duì)組播組外的模塊或計(jì)算機(jī)增加接收負(fù)擔(dān),減輕了網(wǎng)絡(luò)負(fù)荷。
為了確定您購買的卓嵐產(chǎn)品是否支持UDP組播請(qǐng)打開ZLVircom程序的設(shè)備設(shè)置對(duì)話框,點(diǎn)擊“更多高級(jí)選項(xiàng)”,如果該設(shè)備支持的高級(jí)功能中“UDP組播”是打勾的則表明該設(shè)備支持UDP組播。
在TCP和UDP選擇上,TCP協(xié)議有很多優(yōu)點(diǎn),這里只介紹何時(shí)使用UDP協(xié)議。
1.節(jié)省上位機(jī)的線路資源。在ZLSN模塊的串口轉(zhuǎn)以太網(wǎng)應(yīng)用中,如果選擇TCP協(xié)議,且為TCP客戶端的話,那么TCP連接是在模塊上電之后就開始連接的,屬于“長(zhǎng)連接”。這就使得TCP協(xié)議一直占用一條通信線路(一個(gè)socket接口),如果聯(lián)網(wǎng)模塊個(gè)數(shù)很多(例如上萬個(gè)),那么用TCP協(xié)議占用較多資源。而UDP則無此問題。
2.簡(jiǎn)化上位機(jī)編程的復(fù)雜性?;赨DP的socket編程相對(duì)于TCP要簡(jiǎn)單些。
3.需要廣播或者組播的應(yīng)用。
1. 一個(gè)監(jiān)控中心還是多個(gè)監(jiān)控中心。
一個(gè)監(jiān)控中心:在單個(gè)監(jiān)控中心的集中監(jiān)控系統(tǒng)中,分散在各個(gè)采集點(diǎn)的ZLSN模塊將采集數(shù)據(jù)傳送到中心計(jì)算機(jī),此時(shí)最好采用ZLSN模塊為TCP客戶端的方式,因?yàn)榇藭r(shí)每個(gè)模塊只要設(shè)置一個(gè)目的IP(中心計(jì)算機(jī)的IP地址)即可。當(dāng)然也可以采用中心為客戶端、模塊為服務(wù)端方式,但是此時(shí)中心必須記住每個(gè)模塊的IP地址,不利于系統(tǒng)的延展性和配置的靈活性。
多個(gè)監(jiān)控中心:現(xiàn)在有多個(gè)中心計(jì)算機(jī)需要監(jiān)控聯(lián)網(wǎng)模塊,由于TCP客戶端模塊只能連接一個(gè)中心(一個(gè)目的IP),所以多個(gè)中心無法監(jiān)控一個(gè)TCP客戶端模式的模塊(除非采用卓嵐的“類AT命令”功能,讓模塊可以根據(jù)需要連接到不同的中心)。此時(shí)應(yīng)該采用模塊為服務(wù)端的方式。如果需要多個(gè)計(jì)算機(jī)同時(shí)(不是分時(shí))監(jiān)控一個(gè)ZLSN模塊,請(qǐng)選擇ZLSN2090為核心的多TCP連接模塊,ZLSN2090支持同時(shí)存在10個(gè)TCP連接。
2.哪方知道對(duì)方IP地址。如果通信的AB雙方中如果有一方(例如A)不知道對(duì)方(例如B)的IP地址,那么A必須作為TCP服務(wù)器。這是因?yàn)锳不知道B的IP地址,也無法進(jìn)行連接操作。在ZLSN聯(lián)網(wǎng)模塊大量應(yīng)用的網(wǎng)絡(luò)中,ZLSN聯(lián)網(wǎng)模塊的IP地址通過動(dòng)態(tài)獲取,所以中心并不知道所有模塊的IP地址,所以此時(shí)模塊應(yīng)該作為客戶端。
3.主從關(guān)系。在主從關(guān)系的通信模式中,主機(jī)總是先發(fā)送數(shù)據(jù),從機(jī)給出應(yīng)答。在TCP短連接應(yīng)用中,主機(jī)應(yīng)該采用客戶端。這是因?yàn)槎踢B接采用有數(shù)據(jù)發(fā)送的時(shí)候建立TCP連接的方式,只有主機(jī)才知道何時(shí)需要發(fā)送那個(gè)數(shù)據(jù)何時(shí)需要建立連接,所以主機(jī)為客戶端。
TCP短連接由于占用的TCP線路資源少,一般效率優(yōu)于長(zhǎng)連接。但是以下情況下采用長(zhǎng)連接:通信的雙方?jīng)]有主從關(guān)系。任何一方都有首先發(fā)送數(shù)據(jù)的可能,所以要保持TCP連接一直保持。選擇長(zhǎng)連接的時(shí)候需要注意,在連接建立到當(dāng)前,中間網(wǎng)線是否有斷開,需要時(shí)時(shí)檢測(cè)連接的可用性,短連接無該問題,使用較為方便。
這里介紹,如何用zlvircom配置串口轉(zhuǎn)TCP/IP并和SocketDlgTest程序通信。卓嵐串口轉(zhuǎn)TCP/IP遵守的是標(biāo)準(zhǔn)的TCP/IP協(xié)議,所以任何遵守該協(xié)議的網(wǎng)絡(luò)終端都可以和聯(lián)網(wǎng)產(chǎn)品通信,卓嵐科技提供了網(wǎng)絡(luò)調(diào)試工具(SocketDlgTest程序,用戶可以在開始菜單/程序/ZLVircom/調(diào)試工具,找到該軟件)來模擬網(wǎng)絡(luò)終端來和串口轉(zhuǎn)TCP/IP產(chǎn)品通信。要想兩個(gè)網(wǎng)絡(luò)終端(這里是網(wǎng)絡(luò)調(diào)試工具和串口轉(zhuǎn)TCP/IP產(chǎn)品)能夠通信,其參數(shù)配置必須需要配對(duì)。
在UDP模式下,參數(shù)配置如圖 2所示,左邊為zlvircom中串口轉(zhuǎn)TCP/IP產(chǎn)品的配置,右邊為網(wǎng)絡(luò)調(diào)試工具SocketDlgTest的設(shè)置。首先必須兩者都是UDP工作模式。另外用紅色箭頭表示的,網(wǎng)絡(luò)工具的目的IP和目的端口必須指向聯(lián)網(wǎng)產(chǎn)品的本地IP和本地端口。用藍(lán)色箭頭表示的,聯(lián)網(wǎng)產(chǎn)品的目的IP必須是網(wǎng)絡(luò)工具所在計(jì)算機(jī)的IP地址,而聯(lián)網(wǎng)產(chǎn)品的目的端口必須是網(wǎng)絡(luò)調(diào)試工具的本地端口。這些網(wǎng)絡(luò)參數(shù)配置好后才能保證雙向的UDP數(shù)據(jù)通信。
在TCP模式下工作模式有兩種TCP服務(wù)端和TCP客戶端,不論采用哪一種模式,必須一方是服務(wù)端,另一方是客戶端,之后客戶端才能訪問服務(wù)端,都為客戶端或者服務(wù)端則無法實(shí)現(xiàn)通信。 當(dāng)串口轉(zhuǎn)TCP/IP作為客戶端時(shí),必須有3個(gè)對(duì)應(yīng)關(guān)系,如圖 3所示。串口轉(zhuǎn)TCP/IP的工作模式為客戶端對(duì)應(yīng)SocketDlgTest的服務(wù)器模式,串口轉(zhuǎn)TCP/IP的目的IP必須是SocketDlgTest所在計(jì)算機(jī)的IP地址,串口轉(zhuǎn)TCP/IP產(chǎn)品的目的端口必須是SocketDlgTest的本地端口。這樣設(shè)置后串口轉(zhuǎn)TCP/IP即可自動(dòng)連接網(wǎng)絡(luò)工具,連接建立后即可收發(fā)數(shù)據(jù)。
當(dāng)串口轉(zhuǎn)TCP/IP產(chǎn)品作為服務(wù)端時(shí),也有3個(gè)對(duì)應(yīng)關(guān)系,如圖 3 所示,這里不一一解說。這樣設(shè)置后點(diǎn)擊網(wǎng)絡(luò)工具的打開按鈕即可和串口轉(zhuǎn)TCP/IP產(chǎn)品建立TCP連接,連接建立后即可收發(fā)數(shù)據(jù)。
如果上位機(jī)不是Socket程序(SocketDlgTest)也不是ZLVircom,而是兩臺(tái)設(shè)備通過網(wǎng)口連接的,配置方法也是類似的。首先用戶需要將2臺(tái)設(shè)備、計(jì)算機(jī)連接到同一個(gè)局域網(wǎng)中。這臺(tái)計(jì)算機(jī)上運(yùn)行ZLVircom(或者ZLDevManage),連接計(jì)算機(jī)的目的只是為了配置,配置完成后計(jì)算機(jī)可以不必連接。
點(diǎn)擊ZLVircom的設(shè)備管理,找到這2臺(tái)設(shè)備,如圖6所示。然后點(diǎn)擊“設(shè)備編輯”,對(duì)設(shè)備進(jìn)行配置。設(shè)備對(duì)聯(lián)可以分為TCP對(duì)聯(lián)和UDP對(duì)聯(lián)。如果是TCP對(duì)聯(lián)方式,兩臺(tái)設(shè)備的參數(shù)如圖5所示。箭頭所示的參數(shù)必須對(duì)應(yīng)起來,如同“3.2 TCP客戶端”和“3.3 TCP服務(wù)器”的對(duì)應(yīng)方式一樣。TCP連接成功后,可以通過回到“設(shè)備管理”對(duì)話框看連接狀態(tài),如圖6所示,如果兩臺(tái)設(shè)備的狀態(tài)都是“已連接”則表示兩臺(tái)設(shè)備的TCP鏈路已經(jīng)建立。
如果是UDP方式對(duì)聯(lián)的,配置參數(shù)如圖7所示,箭頭對(duì)應(yīng)的參數(shù)必須是一一對(duì)應(yīng)的。UDP對(duì)聯(lián)只要參數(shù)配置正確不必檢查連接狀態(tài),發(fā)送的數(shù)據(jù)會(huì)自動(dòng)發(fā)送到指定的設(shè)備。
最后需要提醒一下,如果是設(shè)備對(duì)聯(lián)的,除了網(wǎng)口參數(shù)按照以上設(shè)置外,還必須設(shè)置正確的串口參數(shù)。主要是聯(lián)網(wǎng)產(chǎn)品的波特率等需要和用戶的設(shè)備的波特率等一致。這樣設(shè)置以后,用戶設(shè)備可以通過兩臺(tái)聯(lián)網(wǎng)產(chǎn)品的串口互相發(fā)送數(shù)據(jù)。