歡迎您光臨本站 登入註冊首頁

GPRS 網路應用系統中的協議轉換

admin @ 2014-03-26 , reply:0

概述

   隨著GPRS技術在移動通信領域中的發展,目前此技術已經能夠實際應用到許多需要無線數據傳輸的領域,也為許多行業提供了一種新的數據傳輸方法。GPRS網覆蓋面廣、可靠性高……

    隨著GPRS 技術在移動通信領域中的發展,目前此技術已經能夠實際應用到許多需要無線數據傳輸的領域,也為許多行業提供了一種新的數據傳輸方法。GPRS網覆蓋面廣、可靠性高。基於GPRS 的遠程儀錶控制系統具有維護費用低、可靠性高、費用合理等特點,可以廣泛應用於水、電、氣的遠程抄表和各種工業遠程儀錶的控制系統。
    當前,絕大多數基於GPRS 網路應用系統所使用的GPRS 模塊為法國Wavecom 公司的WISMO 系列和德國Siemens 公司的S 系列等。這些GPRS 模塊都通過RS232介面和外部進行數據傳輸,且支持多種傳輸速率。例如:MS35 是Siemens 公司生產的GPRS 數據機,它提供RS232 數據口,用AT 指令進行控制。MS35 的主要特徵如下:支持語音、數據傳輸、短消息、傳真業務;三種語音編碼方式(FR/EFR/HR);四種數據傳輸模式CS-1、CS-2、CS-3、CS-4 下行速率最大為85.6Kbit/s,上傳速率最大為21.4Kbit/s;提供RS232 全雙工數據口;使用AT指令進行控制。但這些模塊都有一個缺點,那就是不支持TCP/IP 協議,也就是在其內部傳輸的數據必須符合TCP/IP 協議的要求,這就為GPRS 模塊的使用造成了一些障礙。現在,一些公司為了適應市場要求,也製造了一些協議轉換模塊,功能僅限於數據透明的傳輸,保證數據的完整性;但在以後的維護中卻增加了一些麻煩,並且一些內部的結構是不能公開的,當用戶升級或增加新的功能時,就不得不增加費用。
    現在,有幾種方式可以實現協議轉換的功能。其中可以使用Dragonball、ARM 這種高級一些的微處理器,配合uClinux 等類Linux 的嵌入式操作系統,則可以較容易地實現TCP/IP 協議。這種解決方法比較適合系統應用範圍小且性能要求比較高的場合,但成本較高。當然,也可以使用x86 體系的CPU 和主板,這樣編寫軟體會更方便。通過地址鎖存器外接RAM 和ROM 分別作為程序存儲器和數據存儲器,由軟體編程分層實現TCP/IP 協議;但為了節省成本,在功能比較單一的情況下,可以考慮使用單片機實現IP 協議,這時可以使用uC/OS-II或RTX51 等簡單的操作系統,以降低難度。如果操作系統佔用大量的存儲資源,又想進一步節省成本,可以不使用操作系統,而用編程直接實現部分IP 協議棧。
    仔細分析中國移動GPRS 網路的特點,可以知道數據傳輸過程中的一些要求。GPRS 網是通過網關支持節點(GGSN)連接外部網路的。在這裡,GGSN 相當於ISP,為內部GPRS 網路用戶提供服務。中國移動要求用戶通過撥號的方式登陸Internet。當然,這是在GRPS 網路中才能完成的。具體的方法是:撥“*99***1#”,其中身份驗證時,用戶名、密碼都為空。撥號成功后通過GGSN登陸到外部Internet,同時獲得一個動態的IP 地址。這其中最主要的就是撥號的過程。和通過Modem 上網的方式一樣,GPRS 模塊於網關的通信也要符合點對點協議(Point to Point Protocol ,PPP)。從以上分析可以看出,一次上網的過程也就是一次點對點協議的實現過程。

1 PPP 的實現
    PPP 是為在同等單元之間傳輸數據包而設計的鏈路層協議。這種鏈路提供全雙工操作,並按照順序傳遞數據包。設計的目的主要是,通過撥號或專線方式建立點對點連接發送數據,使其成為各種主機、網橋和路由器之間簡單連接的一種共通的解決方案。
   PPP 中提供了一整套方案來解決鏈路建立、維護、拆除、上層協議協商、認證等問題。PPP 包含這樣幾個部分:鏈路控制協議LCP(Link Control Protocol);網路控制協議NCP(Network Control Protocol);認證協議,最常用的包括口令驗證協議PAP(Password Authentication Protocol)和挑戰握手驗證協議CHAP(Challenge-Handshake Authentication Protocol)。
    LCP負責創建、維護或終止一次物理連接。NCP是一族協議,負責解決物理連接上運行什麼網路協議,以及解決上層網路協議發生的問題。
    一個典型的PPP 鏈路建立過程分為三個階段: 創建階段、認證階段和網路協商階段。
    LCP 負責創建鏈路。在這個階段,將對基本的通信方式進行選擇。鏈路兩端設備通過LCP 向對方發送配置信息報文(configure packets)。一旦一個配置成功的信息包(configure-ack packet)被發送且被接收,就完成了交換,進入LCP 開啟狀態。
    在這個階段,客戶端會將自己的身份發送給遠端的接入伺服器。該階段使用一種安全驗證方式避免第三方竊取數據或冒充遠程客戶接管與客戶端的連接。在認證完成之前,禁止從認證階段前進到網路層協議階段。如果認證失敗,認證者應該躍遷到鏈路終止階段。認證階段完成之後,PPP 將調用在鏈路創建階段選定的各種網路控制協議(NCP)。選定的NCP 解決PPP 鏈路之上的高層協議問題。在該階段IP 控制協議(IPCP)可以向撥入用戶分配動態地址。
    這樣,經過三個階段以後,一條完整的PPP 鏈路就建立起來了。
    中國移動在GPRS 與Internet 網中間建立了許多相當於ISP 的網關支持節點(GGSN),以連接GPRS 網與外部的Internet 網。GPRS 模塊可以通過撥“*99***1#”登錄到GGSN 上,動態分配到Internet 網的IP 地址。其間,GPRS模塊與網關的通信要符合點對點協議,其中身份驗證時用戶名、密碼都為空。使用PPP 登錄之後,就可以通過GGSN 接上Internet 了。
    由於移動夢網的GGSN 與GPRS 模塊通信時遵循PPP協議,所以要在微控制器中也實現一部分PPP 協議才能與之對話。GPRS 模塊在撥號后首先要與GPRS 網關進行通信鏈路的協商,即協商點到點的各種鏈路參數配置。協商過程遵守LCP、PAP(Password Authentication Protocol)和IPCP(Internet Protocol Control Protocol)等協議。其中LCP 協議用於建立、構造、測試鏈路連接;PAP 協議用於處理密碼驗證部分;IPCP 協議用於設置網路協議環境,並分配IP 地址。協商機制用有限狀態機的模型來實現。一旦協商完成,鏈路已經創建,IP 地址已經分配就可以按照協商的標準進行IP 報文的傳輸了。根據應用的不同,IP 報文中可以攜帶UDP 報文,也可以是TCP 或ICMP 報文。本系統正是採用UDP 報文傳送數據信息的。
    數據傳輸完成之後,微控制器會向GGSN 發送LCP 的斷開連接報文,以終止網路連接。微控制器的串口中斷接收程序首先以包起始和結束符來判斷是否有完整的PPP包,並對PPP 包的內容進行校驗,以確定數據包的完整性和正確性。PPP 數據幀的結構如下:
 

2 系統設計
    協議轉化模塊的任務主要是,將用戶數據轉換為TCP/IP 協議的數據包,從而能夠通過GPRS 網路發出。其中在系統初始化過程中,首先使GPRS 模塊撥號上網。圖1 為程序的總體結構。
 
2.1 系統初始化
    在GPRS 模塊使用之前,必須先進行初始化設置。這個過程可以通過AT 命令進行,同樣也可以在程序中設置。根據ISP 的要求進行一些必要的設置。例如,設置ISP 的撥號號碼、用戶名稱、用戶密碼等。同時進行撥號連接,使GPRS 模塊能與Internet 通信。在撥號過程中,圖1 左半部分有三個階段:接收PAP 幀、PAP 驗證、接收IPCP 報文(獲得動態IP 地址)。發送空的LCP 應答(VoidLCPFrame)數據幀是為了達到使ISP 回發LCP_REQ_FRAME 數據幀的目的。空的LCP應答數據幀的內容為(協議欄位+ 信息欄位):0xc0, 0x21,0x20, 0x01, 0x00, 0x04。部分代碼實例如下:
//函數GPRSInit(ispnumber,username,password)功能:設置ISP撥號號碼、用戶名和用戶密碼。
// 函數GPRSDial()功能:開始撥號,直到PPP 協商成功。  
GPRSInit (ispnumber, username, password);
GPRSDial ();
SendVoidLCPFrame ()
While (FRAME_TYPE==0); //等待應答幀
If (FRAME_TYPE==LCP_REQ_FRAME) //表示收到應答幀
FRAME_TYPE=0;
While (FRAME_TYPE==0); //等待PPP協商是否成功
If (FRAME_TYPE==IPCP_FRAME) // 表示PPP 協商成功
…… //處理IPCP幀
Sysock.localaddr=IPCP.ip; //初始化變數
Sysock.remoteipaddr=IPCP.dnsip;
Sysock.localport=0x0510;
……
2.2 數據處理
    基於GPRS 應用系統的主要功能就是進行數據傳輸,因此數據處理是GPRS 模塊的主要任務。當GPRS 模塊已經附在Internet 時,也獲得了一個動態的IP 地址,數據傳輸的過程也就開始了。在GPRS 網路中,數據傳輸就是IP 數據報通信過程,模塊向網關發送的PPP 報文都會傳送到Internet 網中相應的地址;而從Internet 傳過來的應答幀也同樣會根據IP 地址傳到GPRS 模塊。從而實現採集數據和Internet 網路通過GPRS 模塊的透明傳送,而對於用戶來說並不用關心數據的格式。數據傳輸過程可分為以下幾個過程,如圖1 右半部分所示。
    從外部來的數據經歷三個過程:裝入UDP 包( 這裡用UDP 協議,還可以用TCP 協議)、裝入IP 包、裝入PPP幀。經歷這三個過程后就成為了符合標準的數據包,能夠在網路中傳送了。部分代碼如下:
void UDPInit(data userdata ){ // 數據裝入UDP 包
UDPOption.data=userdata
UDPOption.localport=Syssock.localport;
UDPOption.destport=Syscock.destport;
……
}
void IPInit(UDPData UDPOption){ //UDP 包裝入IP包
IPOption.data=UDPOption;
IPOption.localaddr=Syssock.localaddr;
IPOption.remoteaddr=Syssock.remoteipaddr;
……
}
void PPPInit (TCPData TCPOption) {
PPPOption.flag=0x73; // PPP數據報的開始/結束標誌
PPPOption.protocol=0x0021 //IP數據報的標誌
PPPOption.address= 0Xff
PPPOption.control= ox03;
PPPOption.data=IPOption;
……}

3 小結
    協議轉換模塊的實現降低了在使用GPRS 模塊過程中的一些難度,增加了使用GPRS 模塊的便利性。在寫這篇文章的時候,市場上已經有了一些提供TCP/IP 協議支持的GPRS 模塊,這將更加增加GPRS 模塊的使用場合和使用範圍,但是同樣的GRPS 模塊也在增加。當成本受到限制時,協議轉換模塊可以很好地得到應用,同時也為用戶的定製做了準備。


[admin via 研發互助社區 ] GPRS 網路應用系統中的協議轉換已經有2146次圍觀

http://cocdig.com/docs/show-post-44760.html