金笛后花園

金笛工業(yè)手機(jī)官方博客

金笛只為您,一切全為您

?GPRS應(yīng)用中TCP/IP/PPP基本概念


實(shí)際上GPRS DTU上實(shí)現(xiàn)的是協(xié)議棧是TCP/IP Over PPP。我們在使用時(shí)必須要有一些相應(yīng)的概念。因此在下面我們就與GPRS模塊使用相關(guān)的一些事項(xiàng)作一些簡要的說明,如果您想詳細(xì)了解這些協(xié)議,請參見相關(guān)書籍:

1. 每一次GPRS模塊撥ATD*99***1#(或ATD*99***1#)之后其實(shí)都在采用PPP協(xié)議和移動(dòng)的接入設(shè)備(一般是移動(dòng)公司的一臺(tái)特殊的GGSN路由器)進(jìn)行握手,當(dāng)PPP協(xié)議握手成功后,GPRS模塊都會(huì)獲得一個(gè)動(dòng)態(tài)IP地址。一般來說,每一次GPRS模塊下線后(掛斷連接或者直接斷電后)在重新進(jìn)行撥號(hào)和PPP握手后取得的動(dòng)態(tài)IP地址都是不一樣的。但是移動(dòng)公司可以通過為客戶開通特定的APN和發(fā)行特殊的SIM卡,使得用這張SIM卡獲得的動(dòng)態(tài)IP地址每一次都不變。也就是說可以做到SIM卡和IP地址綁定。

2. 我們在做測試時(shí),應(yīng)當(dāng)注意到如下事實(shí):在采用公網(wǎng)的Apn(“cmnet”)的條件下,如果我們用GPRS模塊主動(dòng)向公網(wǎng)上的一個(gè)靜態(tài)公網(wǎng)IP地址發(fā)起TCP連接,只要這個(gè)公網(wǎng)上的機(jī)器確實(shí)有偵聽相應(yīng)的端口,這樣是可以連上的;但是相反地,如果是由公網(wǎng)上的靜態(tài)IP向GPRS模塊動(dòng)態(tài)獲得的IP地址主動(dòng)發(fā)起的TCP連接將不會(huì)成功。這個(gè)現(xiàn)象的原因是:實(shí)際上GPRS模塊獲得的動(dòng)態(tài)IP地址是移動(dòng)的一個(gè)特殊的內(nèi)部網(wǎng)段上的地址,這個(gè)特殊內(nèi)部網(wǎng)段里的地址如果要和外部網(wǎng)(公網(wǎng))的地址進(jìn)行TCP通信,必須通過一個(gè)類似于TCP代理(或者NAT)的設(shè)備進(jìn)行通信的轉(zhuǎn)發(fā)。換句話說,這個(gè)動(dòng)態(tài)地址對(duì)于網(wǎng)絡(luò)上的其他機(jī)器來說是不可訪問的。

3. 標(biāo)準(zhǔn)AT命令+CGDCONT的主要作用是指定Apn。Apn是Access Point Name(訪問接入點(diǎn))的縮寫,移動(dòng)通過開通特殊的Apn為行業(yè)客戶提供Vpn(Virtual Private Net)服務(wù)。比如說,如果是要上公網(wǎng)(Internet),應(yīng)當(dāng)使用“cmnet”作為Apn。又如,某企業(yè)向移動(dòng)公司申請了Vpn服務(wù),移動(dòng)公司為其開通了一個(gè)Apn為“hxsw.gd”,則我們就應(yīng)當(dāng)用這個(gè)Apn來設(shè)置Gprs模塊,格式如下:
AT+CGDCONT=1,“IP”,“hxsw.gd”

4. 確定一條TCP連接有4個(gè)要素,這4個(gè)要素是雙方的IP地址和雙方的TCP端口號(hào),這也就是GPRS模塊為什么將本地端口、目的端口和目的IP地址結(jié)合起來作為連接的ID號(hào)(GPRS模塊在PPP握手成功后獲得的動(dòng)態(tài)地址只要不斷線重連就不會(huì)改變)的原因。

5. 使用TCP協(xié)議進(jìn)行數(shù)據(jù)通信時(shí),必須要經(jīng)過三個(gè)階段,第一個(gè)階段是連接建立階段,第二個(gè)階段是數(shù)據(jù)收發(fā)階段,第三個(gè)階段是連接釋放階段:

1).連接建立階段:
連接的建立又有主動(dòng)連接和被動(dòng)連接之分,一般來說客戶機(jī)都是主動(dòng)發(fā)起連接的,而服務(wù)器是被動(dòng)接受連接的。

所謂的主動(dòng)連接是指本方主動(dòng)向遠(yuǎn)端發(fā)起連接請求, 而被動(dòng)連接指的是本方偵聽一個(gè)端口,等待遠(yuǎn)端及其主動(dòng)向自己發(fā)起一個(gè)連接請求并且進(jìn)行回應(yīng)并且最終握手建鏈成功。

在連接成功,切換到數(shù)據(jù)態(tài)后,我們可以通過OPEN命令幀控制GPRS模塊 進(jìn)行主動(dòng)連接。當(dāng)然,連接時(shí)要指定對(duì)方的IP地址和端口號(hào)。至于被動(dòng)連接,GPRS模塊也可以支持,目前的程序只支持偵聽一個(gè)端口。對(duì)方主動(dòng)連接(GPRS模塊被動(dòng)連接)成功后將建立一條新的通信連接,GPRS模塊將把這個(gè)被動(dòng)連接成功的事件通知給上位機(jī)。

2).數(shù)據(jù)收發(fā)階段:
當(dāng)一條連接建立之后,我們就可以在這條連接上進(jìn)行數(shù)據(jù)收發(fā)了。

我們可以使用SEND命令幀控制GPRS模塊進(jìn)行數(shù)據(jù)發(fā)送。當(dāng)然,發(fā)送時(shí)要指定連接號(hào)(通過本地端口、目的地址和端口唯一確定)。

對(duì)于對(duì)方發(fā)送過來的數(shù)據(jù),GPRS模塊首先將其存儲(chǔ)在自身的數(shù)據(jù)緩沖區(qū)中,然后將數(shù)據(jù)已到達(dá)此事件通知給上位機(jī),上位機(jī)讀取到數(shù)據(jù)已到達(dá)事件后,應(yīng)當(dāng)及時(shí)使用RECV命令幀控制GPRS模塊將相應(yīng)連接上的所有數(shù)據(jù)通過串口讀出,當(dāng)數(shù)據(jù)讀出后,這些數(shù)據(jù)原先占用的數(shù)據(jù)緩沖區(qū)空間將會(huì)被釋放。注意,由于GPRS模塊的數(shù)據(jù)緩沖區(qū)有限(總量僅有25K Bytes),所以,對(duì)于對(duì)方發(fā)來的數(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命令幀控制GPRS模塊進(jìn)行連接的主動(dòng)掛斷。

如果連接被對(duì)方主動(dòng)掛斷,GPRS模塊將會(huì)把這個(gè)事件通知給上位機(jī)進(jìn)行處理。

北京玉笛信息技術(shù)有限責(zé)任公司
地址:北京海淀區(qū)知春路23號(hào)量子銀座903(863軟件園)
淘網(wǎng)址:http://shop35321900.taobao.com
2014/12/22 0 / /
標(biāo)簽:  暫無標(biāo)簽

6 + 5 =

回到頂部
德清县| 孟津县| 云龙县| 屏东县| 灵石县| 卢龙县| 灵川县| 合阳县| 珠海市| 宜章县| 长汀县| 黎平县| 正安县| 偏关县| 大余县| 淮安市| 梧州市| 新田县| 乌拉特中旗| 玉屏| 乐亭县| 横峰县| 斗六市| 天门市| 固安县| 无棣县| 青海省| 且末县| 集安市| 无为县| 忻城县| 留坝县| 武强县| 柳林县| 闽清县| 郓城县| 饶河县| 唐河县| 同江市| 太仆寺旗| 五莲县|