SGSN 從 MS 接收數據包,並在 GTP 包頭中對其進行封裝,然後才通過GTP 通道將其轉發到 GGSN。GGSN 接收這些數據包時,先將它們解封,然後轉發到外部主機。
GTP 數據包包頭含有Sequence Number字段,Sequence Number向GGSN(接收 GTP 數據包的GGSN) 指示數據包的順序。
在PDP 環境激活階段,發送端GGSN 向接收端GGSN 發送的第一個G-PDU 的序列號值是零 (0) ,發送端 GGSN 爲其隨後發送的每個 G-PDU 增加序列號值,G-PDU序列號值達到 65535 時,重置爲零。
一般情況下,接收端 GGSN 會校驗所接收的數據包中的序列號,接受端GGSN拿自身的計數器序列號和所接收的數據包中的序列號進行比較,如果這兩個序號匹配上了,則 GGSN 轉發該數據包,如果它們不匹配,則GGSN 丟棄該數據包。
GTP 標準,可以參考3GPP的技術規範:
3GPP TS 09.60 v6.9.0 (2000-09)
3GPP TS 29.060 v3.8.0 (2001-03)
3GPP TS 32.015 v3.9.0 (2002-03)
GTP協議頭部格式如下:
說明如下:version:版本號,目前基本都是1,即gtp v1版本;
protocol type:1爲GTP’,0爲GTP-C或GTP-U。
next extension header:seq:n-pdu number:
根據文檔,這三個標示位分別指示gtp 頭部是否含有next extension header項,sequence number項和n-pdu number項。但根據我對現網的數據分析,事實好像並非如此。
此三個bit位,只要有一個置位,這三項都同時存在。
Teid據說是很重要的字段,目前對該字段的認識不足,需進一步研讀3gpp協議。受高人指點,具體是3GPP TS 23.060和3GPP TS 29.060。
Total length:gtp封裝數據的長度,不包括gtp頭部的基本長度,但包括gtp選項的長度,即:上面的next extension header,sequence number項和n-pdu number項的長度是包括在這個Total length之中的。 如果next extension header不爲0,則下面還有extension header,直到extension header的nextextension header項爲0。Next extension header格式如下:
Extension header的長度必須爲4的倍數。
Gtp-C協議的根據不同的類型(type),其編碼格式都不相同。常見的比較重要的三個type爲:imsi,msisdn和apn。
Imsi和msisdn的編碼格式有些類似。
Apn的全稱是Access Point Name,通常分爲兩部分,一部分爲網絡標示(ni),一部分爲運營商標示(oi)。有些apn只有一部分。
APN的格式如下:
其中,type佔一個字節,爲0x83;
apn length佔用兩個字節,爲網絡字序,包括該字段後的apn項的長度;
ni長度,一個字節,ni的長度;
oi長度,一個字節,標示OI長度。
Wap網和internet不同,wap網是一個半封閉半開放的網絡,而internet是一個開放的網絡。
從撥號方式上,對於中國移動來說,wap用戶的apn爲cmwap,internet用戶的apn爲cmnet。
從網絡連接方式上,手機上wap網站時,其實是通過運營商的wap網關代理請求訪問wap網站,而手機上internet時,訪問的方式是通過運營商的防火強的NAT轉換請求網站。
從七層協議上來說,wap網站早期使用專用的wml協議,wap 1.2協議之前,目前的wap 2.0支持xhtml協議,可以說,wap和internet之間的差距在減小,甚至有逐漸融合的趨勢。Xhtml與html差距不大,只是語法更加嚴格而已。
下面解釋一下用戶撥號時,sgsn與ggsn之間的信令過程:
首先,sgsn發送一個create pdp content request向ggsn;
然後,ggsn返回create pdp content response給sgsn,說明該用戶是否成功接入gprs網絡,如果成功接入,分配地址給該用戶,否則,說明原因;
最後,用戶獲得ip地址,接入網絡。
在create pdp content request報文中,有以下三個重要的內容項:
imsi:用戶全球唯一標示msisdn:
用戶全球電話號碼標示apn:標示用戶接入的網絡
在create pdp content response報文,如果成功,則包含分配給用戶的ip地址。
Access Point Name,接入點名稱,在GGSN中用於標識一個指定的外部網絡和一種服務的ISP,在SGSN中可根據APN通過DNS域名解析得到與此APN對應的GGSN地址。APN可以分爲APN以及wild card APN, wild card APN是指運營商允許用戶使用給定的PDP類型的上下文接入任何網絡,用“*”表示;常規APN包括兩部分:網絡標識(NI, Network Identifier)和運營商標識(OI, Operator Identifier)。NI最長63字節,OI最長37字節,不區分大小寫。
TEID
Tunnel Endpoint Identifier,GTPv1的概念,用於表示一條隧道(PDP),分爲數據面TEID(TEID(U))和控制面TEID(TEID(C)),由SGSN和GGSN自己分配。
NSAPI
Network Service Access Point Identifier,和TEID(C)或IMSI一起用於標示同一用戶激活的不同上下文,範圍[0,15],其中0~4系統保留,因此對於一個用戶(UE)而言,最多可以建立11條隧道。
TIDGTPv0的概念,由IMSI+NSAPI構成,和TEID作用相同。
TFT
TFT(Traffic Flow Template)是GSN在接收或轉發用戶數據時,用於區分二次激活的PDP上下文,TFT唯一的標識了同一TEID或同一PDP Address下的不同的PDP上下文。
當同一個TEID或PDP Address下只有一個活躍的PDP上下文時,不需要爲該PDP上下文指定一個TFT,因爲所有下行的數據都直接通過該上下文對應的隧道傳輸。
當同一個TEID或PDP Address下有多個活躍的PDP上下文時,那麼就需要爲每一個PDP上下文指定一個TFT,GGSN接收到發送給MS的G-PDU時,將使用該TFT來對應G-PDU傳輸時應該使用的PDP上下文。
如果在二次激活時,所有該PDP地址下的PDP上下文都已經被分配了一個TFT,那麼這一次的二次激活就可以無需再指定一個TFT。即,對應同一個TEID或PDP地址下的不同的PDP上下文,要麼全都有各自的TFT,要麼,只能有一個PDP上下文沒有TFT。