GPRS模塊與Internet上主機的連接、數據傳輸過程

請問GPRS模塊與Internet上主機的連接、數據傳輸過程
雖然按照GPRS模塊的說明文檔能夠通過內嵌TCP/IP實現數據的傳輸,但是對GPRS模塊和主機之間的連接關係瞭解得不是很多。有誰可以介紹一下GPRS模塊和一臺Internet主機之間的連接、數據傳輸的詳細過程。

------解決方案--------------------
首先Internet主機需要做端口映射,及對應外網的IP的某個端口即爲該Internet主機,打開服務器軟件;
其次,GPRS模塊在知道Internet主機的外網地址和映射端口號的情況下,建立網絡連接.模塊連接的IP及端口,網絡會默認是和該Internet主機建立的連接.
再由PPP協議、TCP/IP協議等等,保證連接的建立和數據的發送和接受。

------解決方案--------------------
實際上GPRS DTU上實現的協議棧是TCP/IP Over PPP。我們在使用時必須要有一些相應的概念。因此在下面我們就與SARO-1010P使用相關的一些事項作一些簡要的說明,如果您想詳細瞭解這些協議,請參見相關書籍:

  1. 每一次SARO-1010P撥ATD*99***1#(或ATD*99***1#)之後其實都在採用PPP協議和移動的接入設備(一般是移動公司的一臺特殊的GGSN路由器)進行握手,當PPP協議握手成功後,SARO-1010P都會獲得一個動態IP地址。一般來說,每一次SARO-1010P下線後(掛斷連接或者直接斷電後)在重新進行撥號和PPP握手後取得的動態IP地址都是不一樣的。但是移動公司可以通過爲客戶開通特定的APN和發行特殊的SIM卡,使得用這張SIM卡獲得的動態IP地址每一次都不變。也就是說可以做到SIM卡和IP地址綁定。
  
  2. 我們在做測試時,應當注意到如下事實:在採用公網的Apn(“cmnet”)的條件下,如果我們用SARO-1010P主動向公網上的一個靜態公網IP地址發起TCP連接,只要這個公網上的機器確實有偵聽相應的端口,這樣是可以連上的;但是相反地,如果是由公網上的靜態IP向SARO-1010P動態獲得的IP地址主動發起的TCP連接將不會成功。這個現象的原因是:實際上SARO-1010P獲得的動態IP地址是移動的一個特殊的內部網段上的地址,這個特殊內部網段裏的地址如果要和外部網(公網)的地址進行TCP通信,必須通過一個類似於TCP代理(或者NAT)的設備進行通信的轉發。換句話說,這個動態地址對於網絡上的其他機器來說是不可訪問的。
  
  3. 標準AT命令+CGDCONT的主要作用是指定Apn。Apn是Access Point Name(訪問接入點)的縮寫,移動通過開通特殊的Apn爲行業客戶提供Vpn(Virtual Private Net)服務。比如說,如果是要上公網(Internet),應當使用“cmnet”作爲Apn。又如,某企業向移動公司申請了Vpn服務,移動公司爲其開通了一個Apn爲“hxsw.gd”,則我們就應當用這個Apn來設置Gprs模塊,格式如下:
  AT+CGDCONT=1,“IP”,“hxsw.gd”
  
  4. 確定一條TCP連接有4個要素,這4個要素是雙方的IP地址和雙方的TCP端口號,這也就是SARO-1010P爲什麼將本地端口、目的端口和目的IP地址結合起來作爲連接的ID號(SARO-1010P在PPP握手成功後獲得的動態地址只要不斷線重連就不會改變)的原因。  
  
  5. 使用TCP協議進行數據通信時,必須要經過三個階段,第一個階段是連接建立階段,第二個階段是數據收發階段,第三個階段是連接釋放階段:
  
  1).連接建立階段:
  連接的建立又有主動連接和被動連接之分,一般來說客戶機都是主動發起連接的,而服務器是被動接受連接的。
  
  所謂的主動連接是指本方主動向遠端發起連接請求, 而被動連接指的是本方偵聽一個端口,等待遠端及其主動向自己發起一個連接請求並且進行迴應並且最終握手建鏈成功。
  
  在連接成功,切換到數據態後,我們可以通過OPEN命令幀控制SARO-1010P 進行主動連接。當然,連接時要指定對方的IP地址和端口號。至於被動連接,SARO-1010P也可以支持,目前的程序只支持偵聽一個端口。對方主動連接(SARO-1010P被動連接)成功後將建立一條新的通信連接,SARO-1010P將把這個被動連接成功的事件通知給上位機。
  
  2).數據收發階段:
  當一條連接建立之後,我們就可以在這條連接上進行數據收發了。
  
  我們可以使用SEND命令幀控制SARO-1010P進行數據發送。當然,發送時要指定連接號(通過本地端口、目的地址和端口唯一確定)。
  
  對於對方發送過來的數據,SARO-1010P首先將其存儲在自身的數據緩衝區中,然後將數據已到達此事件通知給上位機,上位機讀取到數據已到達事件後,應當及時使用RECV命令幀控制SARO-1010P將相應連接上的所有數據通過串口讀出,當數據讀出後,這些數據原先佔用的數據緩衝區空間將會被釋放。注意,由於SARO-1010P的數據緩衝區有限(總量僅有25K Bytes),所以,對於對方發來的數據,上位機一定要及時讀出,否則數據越積越多,可能會導致數據緩衝區溢出,丟失數據。
  
  3).掛斷連接階段:
  當一條連接上的所有數據都已經收發完成了,不再需要這條連接時,就可以把連接給掛斷了。
  
  和連接建立階段相類似,掛斷也分爲主動掛斷和被動掛斷。
  
  我們可以使用RSET命令幀控制SARO-1010P進行連接的主動掛斷。
  
  如果連接被對方主動掛斷,SARO-1010P將會把這個事件通知給上位機進行處理。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章