參考ETSI EN 301 347
GTP是GPRS Tunnelling Protocol 的簡稱。GTP分為GTPv0(已經淘汰),GTPv1 和GTPv2。下面,介紹的是GTPv1。
GTPv1里面有GTP和GTP',其中GTP上面可以承載信令數據(控制信息)和傳輸數據,GTP'的主要是用作計費,下面講的將是GTP。
GTP的頭部
GTP的頭部占用固定的20字節,承載信令的數據包和承載傳輸數據的數據包共同使用這一個頭部。下圖是GTP頭部的圖解,后面將會一一說明其中各個標志的含義。
1:PT(Protocol Type)。協議類型,表示的是這個消息是不是GTP消息。當PT為1的時候表示的是GTP消息,當PT為0的時候表示的是GTP'消息。
2:Version。如果PT為1(表示的是GTP消息),那么這些bit將會全部是0,用來表示GTP的第一個版本,GTPv1。當PT為0的時候,另做處理。
3:Spare1。這些bit沒有被使用,發送的時候全部置1,接收的時候被忽略。
4:SNN。表示SNDCP N-PDU 位是否被包含進來。
5:Message Type。表示GTP的消息類型。
6:Length。表示除了GTP頭部以外,數據部分的長度,以字節為單位。
7:Sequence Number。是信令數據的傳輸標志,是傳輸數據增加的序列號。
8:SNDCP N-PDU。SNDCP N-PDU用於SGSN間路由區更新過程,為了協調MS和SGSN之間的數據傳輸。
9:TID(Tunnel identifier)。指出了MM和PDP的上下文。
10:Flow Label。唯一的指定一個GTP流。
作為信令的頭部使用
- SNN位被置為0
-Message Type應當是唯一的值,用來表示不同的信令消息。
-SNDCP N-PDU 在信令信息當中沒有被使用到,發送方置為255即0xff,接收方忽略。
-TID 和 Flow Label 根據不同的信令信息有不同的使用方法,不詳細介紹。
當用作信令信息的時候,數據包的格式如下圖所示:為頭部+信息元
下面分析一個具體的數據包:
一個控制信令的數據包的整體數據如下:
展開GTP協議如下:
作為傳輸消息頭部的使用
T-PDU 的含義是一個原生的數據包,比如IP數據包,在GTP隧道傳輸的時候是載荷信息。
-SNN flag。當該位為1的時候,那么SNDCP N-PDU將會被包含進來。
-Message Type。 應當被置為255即0xff
-Sequence Number 。這個值用來被決定是否接受一個T-PDU。
-SNDCP N-PDU。當SNN位為0的時候,它的值應該是255即0xff,當SNN為1時,用在舊的SGSN通知新的SGSN給T-PDU分配N-PDU碼。
-Flow Label。標識T-PDU屬於哪個流。
-TID 包含T-PDU屬於哪個隧道的隧道標識符。
一個承載了HTTP協議的GTP數據包:
GTP數據包頭里面的數據: