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