本文介紹在串口轉(zhuǎn)TCP/IP中如何使用各種TCP工作模式,根據(jù)不同的應(yīng)用如何進(jìn)行靈活選擇TCP客戶端、TCP服務(wù)器、UDP、UDP組播,。
1.TCP&UDP工作模式
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)行選擇,。如圖1所示。
1.1 TCP和UDP的區(qū)別和比較
圖1.TCP&UDP各種工作模式演示
TCP(Transmission Control Protocol)是可靠連接協(xié)議,。我們可以用打電話來(lái)類比TCP協(xié)議,。使用TCP協(xié)議進(jìn)行數(shù)據(jù)傳輸,首先需要建立連接,;就如在通電話前需要先撥通電話一樣,。TCP是可靠傳輸?shù)模茨銈鬏數(shù)臄?shù)據(jù)有誤或者丟失,,則會(huì)自動(dòng)重新傳輸以保證數(shù)據(jù)正確,;這正如打電話的時(shí)候,如果信號(hào)不好,,收方會(huì)說(shuō):“聽(tīng)不清,,請(qǐng)?jiān)僬f(shuō)一遍。”
UDP(User Datagram Protocol)是報(bào)文傳輸協(xié)議,。我們可以用手機(jī)短信來(lái)類比UDP協(xié)議,。使用UDP協(xié)議,你無(wú)需先征得對(duì)方的同意(無(wú)需先建立連接),,可以隨時(shí)發(fā)送,。但是UDP協(xié)議是不可靠傳輸?shù)模惆l(fā)送出去的數(shù)據(jù)不能夠保證正確地被對(duì)方收到,;
所謂“正確接收”,,它包括3方面的內(nèi)容:1.丟失問(wèn)題:數(shù)據(jù)丟失后可以重傳。2.誤碼問(wèn)題:數(shù)據(jù)內(nèi)容錯(cuò)誤能被檢測(cè)并重新發(fā)送,。3.順序問(wèn)題:UDP無(wú)法保證數(shù)據(jù)的順序,,例如在發(fā)送長(zhǎng)文字的短信的時(shí)候,有可能后半部分短信內(nèi)容先收到,,然后再收到前半部分短信內(nèi)容,。這給接收者較大的迷惑,TCP協(xié)議沒(méi)有這個(gè)問(wèn)題,。
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é)議符合原來(lái)的思維,。2.UDP協(xié)議具有廣播,、組播功能,可以實(shí)現(xiàn)一對(duì)多通信,。
表1. TCP與UDP的區(qū)別
|
TCP |
UDP |
需要連接 |
是 |
否 |
占用線路 |
是 |
否 |
可靠傳輸 |
是 |
否 |
簡(jiǎn)單易用 |
否 |
是 |
支持廣播 |
否 |
是 |
1.2 TCP客戶端和TCP服務(wù)器的區(qū)別
在選擇TCP進(jìn)行通信的時(shí)候,,通信的雙方,必須一方為TCP客戶端(TCP Client),,一方為TCP服務(wù)器(TCP Server),。以打電話來(lái)類比,打電話的人是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ù)器端(接聽(tīng)者的電話摘機(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)連接就是連接建立后不斷開(kāi),直到斷電,。TCP短連接是指需要通信的時(shí)候建立連接,,通信完畢后立即關(guān)閉連接。
2.工作模式的選擇
2.1 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連接是在模塊上電之后就開(kāi)始連接的,,屬于“長(zhǎng)連接”,。這就使得TCP協(xié)議一直占用一條通信線路(一個(gè)socket接口),,如果聯(lián)網(wǎng)模塊個(gè)數(shù)很多(例如上萬(wàn)個(gè)),那么用TCP協(xié)議占用較多資源,。
2.簡(jiǎn)化上位機(jī)編程的復(fù)雜性?;赨DP的socket編程相對(duì)于TCP要簡(jiǎn)單些,。
3.需要廣播或者組播的應(yīng)用。
2.2 客戶端和服務(wù)器的選擇
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è)中心無(wú)法監(jiān)控一個(gè)模塊(除非或者采用卓嵐的“硬件TCP/IP協(xié)議棧”功能,讓模塊可以根據(jù)需要連接到不同的中心),。此時(shí)應(yīng)該采用模塊為客戶端的方式,。
2.知道對(duì)方IP地址。如果通信的AB雙方中如果有一方A不知道對(duì)方B的IP地址,,那么A必須作為客戶端,。這是因?yàn)锳不知道B的IP地址,也無(wú)法進(jìn)行連接操作,。在ZLSN聯(lián)網(wǎng)模塊大量應(yīng)用的網(wǎng)絡(luò)中,,ZLSN聯(lián)網(wǎng)模塊的IP地址通過(guò)動(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ù)合適需要建立連接,,所以主機(jī)為客戶端,。
2.3 TCP短連接和TCP長(zhǎng)連接的選擇
TCP短連接由于占用的TCP線路資源少,,一般效率優(yōu)于長(zhǎng)連接。但是以下情況下采用長(zhǎng)連接:通信的雙方?jīng)]有主從關(guān)系,。任何一方都有首先發(fā)送數(shù)據(jù)的可能,,所以要保持TCP連接一直保持。選擇長(zhǎng)連接的時(shí)候需要注意,,在連接建立到當(dāng)前,,中間網(wǎng)線是否有斷開(kāi),需要時(shí)時(shí)檢測(cè)連接的可用性,,短連接無(wú)該問(wèn)題,,使用較為方便。