GPRS應(yīng)用中TCP/IP/PPP基本概念:(CDMA的原理與此差不多)
實(shí)際上GPRS DTU上實(shí)現(xiàn)的協(xié)議棧是TCP/IP Over PPP。我們?cè)谑褂脮r(shí)必須要有一些相應(yīng)的概念。因此在下面我們就與SARO-1010P使用相關(guān)的一些事項(xiàng)作一些簡(jiǎn)要的說(shuō)明,如果您想詳細(xì)了解這些協(xié)議,請(qǐng)參見(jiàn)相關(guān)書(shū)籍:
1. 每一次SARO-1010P撥ATD*99***1#(或ATD*99***1#)之后其實(shí)都在采用PPP協(xié)議和移動(dòng)的接入設(shè)備(一般是移動(dòng)公司的一臺(tái)特殊的GGSN路由器)進(jìn)行握手,當(dāng)PPP協(xié)議握手成功后,SARO-1010P都會(huì)獲得一個(gè)動(dòng)態(tài)IP地址。一般來(lái)說(shuō),每一次SARO-1010P下線后(掛斷連接或者直接斷電后)在重新進(jìn)行撥號(hào)和PPP握手后取得的動(dòng)態(tài)IP地址都是不一樣的。但是移動(dòng)公司可以通過(guò)為客戶開(kāi)通特定的APN和發(fā)行特殊的SIM卡,使得用這張SIM卡獲得的動(dòng)態(tài)IP地址每一次都不變。也就是說(shuō)可以做到SIM卡和IP地址綁定。
2. 我們?cè)谧鰷y(cè)試時(shí),應(yīng)當(dāng)注意到如下事實(shí):在采用公網(wǎng)的Apn(“cmnet”)的條件下,如果我們用SARO-1010P主動(dòng)向公網(wǎng)上的一個(gè)靜態(tài)公網(wǎng)IP地址發(fā)起TCP連接,只要這個(gè)公網(wǎng)上的機(jī)器確實(shí)有偵聽(tīng)相應(yīng)的端口,這樣是可以連上的;但是相反地,如果是由公網(wǎng)上的靜態(tài)IP向SARO-1010P動(dòng)態(tài)獲得的IP地址主動(dòng)發(fā)起的TCP連接將不會(huì)成功。這個(gè)現(xiàn)象的原因是:實(shí)際上SARO-1010P獲得的動(dòng)態(tài)IP地址是移動(dòng)的一個(gè)特殊的內(nèi)部網(wǎng)段上的地址,這個(gè)特殊內(nèi)部網(wǎng)段里的地址如果要和外部網(wǎng)(公網(wǎng))的地址進(jìn)行TCP通信,必須通過(guò)一個(gè)類似于TCP代理(或者NAT)的設(shè)備進(jìn)行通信的轉(zhuǎn)發(fā)。換句話說(shuō),這個(gè)動(dòng)態(tài)地址對(duì)于網(wǎng)絡(luò)上的其他機(jī)器來(lái)說(shuō)是不可訪問(wèn)的。
3. 標(biāo)準(zhǔn)AT命令+CGDCONT的主要作用是指定Apn。Apn是Access Point Name(訪問(wèn)接入點(diǎn))的縮寫(xiě),移動(dòng)通過(guò)開(kāi)通特殊的Apn為行業(yè)客戶提供Vpn(Virtual Private Net)服務(wù)。比如說(shuō),如果是要上公網(wǎng)(Internet),應(yīng)當(dāng)使用“cmnet”作為Apn。又如,某企業(yè)向移動(dòng)公司申請(qǐng)了Vpn服務(wù),移動(dòng)公司為其開(kāi)通了一個(gè)Apn為“hxsw.gd”,則我們就應(yīng)當(dāng)用這個(gè)Apn來(lái)設(shè)置Gprs模塊,格式如下:
AT+CGDCONT=1,“IP”,“hxsw.gd”
4. 確定一條TCP連接有4個(gè)要素,這4個(gè)要素是雙方的IP地址和雙方的TCP端口號(hào),這也就是SARO-1010P為什么將本地端口、目的端口和目的IP地址結(jié)合起來(lái)作為連接的ID號(hào)(SARO-1010P在PPP握手成功后獲得的動(dòng)態(tài)地址只要不斷線重連就不會(huì)改變)的原因。
5. 使用TCP協(xié)議進(jìn)行數(shù)據(jù)通信時(shí),必須要經(jīng)過(guò)三個(gè)階段,第一個(gè)階段是連接建立階段,第二個(gè)階段是數(shù)據(jù)收發(fā)階段,第三個(gè)階段是連接釋放階段:
1).連接建立階段:
連接的建立又有主動(dòng)連接和被動(dòng)連接之分,一般來(lái)說(shuō)客戶機(jī)都是主動(dòng)發(fā)起連接的,而服務(wù)器是被動(dòng)接受連接的。
所謂的主動(dòng)連接是指本方主動(dòng)向遠(yuǎn)端發(fā)起連接請(qǐng)求, 而被動(dòng)連接指的是本方偵聽(tīng)一個(gè)端口,等待遠(yuǎn)端及其主動(dòng)向自己發(fā)起一個(gè)連接請(qǐng)求并且進(jìn)行回應(yīng)并且最終握手建鏈成功。
在連接成功,切換到數(shù)據(jù)態(tài)后,我們可以通過(guò)OPEN命令幀控制SARO-1010P 進(jìn)行主動(dòng)連接。當(dāng)然,連接時(shí)要指定對(duì)方的IP地址和端口號(hào)。至于被動(dòng)連接,SARO-1010P也可以支持,目前的程序只支持偵聽(tīng)一個(gè)端口。對(duì)方主動(dòng)連接(SARO-1010P被動(dòng)連接)成功后將建立一條新的通信連接,SARO-1010P將把這個(gè)被動(dòng)連接成功的事件通知給上位機(jī)。
2).數(shù)據(jù)收發(fā)階段:
當(dāng)一條連接建立之后,我們就可以在這條連接上進(jìn)行數(shù)據(jù)收發(fā)了。
我們可以使用SEND命令幀控制SARO-1010P進(jìn)行數(shù)據(jù)發(fā)送。當(dāng)然,發(fā)送時(shí)要指定連接號(hào)(通過(guò)本地端口、目的地址和端口唯一確定)。
對(duì)于對(duì)方發(fā)送過(guò)來(lái)的數(shù)據(jù),SARO-1010P首先將其存儲(chǔ)在自身的數(shù)據(jù)緩沖區(qū)中,然后將數(shù)據(jù)已到達(dá)此事件通知給上位機(jī),上位機(jī)讀取到數(shù)據(jù)已到達(dá)事件后,應(yīng)當(dāng)及時(shí)使用RECV命令幀控制SARO-1010P將相應(yīng)連接上的所有數(shù)據(jù)通過(guò)串口讀出,當(dāng)數(shù)據(jù)讀出后,這些數(shù)據(jù)原先占用的數(shù)據(jù)緩沖區(qū)空間將會(huì)被釋放。注意,由于SARO-1010P的數(shù)據(jù)緩沖區(qū)有限(總量?jī)H有25K Bytes),所以,對(duì)于對(duì)方發(fā)來(lái)的數(shù)據(jù),上位機(jī)一定要及時(shí)讀出,否則數(shù)據(jù)越積越多,可能會(huì)導(dǎo)致數(shù)據(jù)緩沖區(qū)溢出,丟失數(shù)據(jù)。
3).掛斷連接階段:
當(dāng)一條連接上的所有數(shù)據(jù)都已經(jīng)收發(fā)完成了,不再需要這條連接時(shí),就可以把連接給掛斷了。
和連接建立階段相類似,掛斷也分為主動(dòng)掛斷和被動(dòng)掛斷。
我們可以使用RSET命令幀控制SARO-1010P進(jìn)行連接的主動(dòng)掛斷。
如果連接被對(duì)方主動(dòng)掛斷,SARO-1010P將會(huì)把這個(gè)事件通知給上位機(jī)進(jìn)行處理。