对于GTPv1协议头部的解析

Posted 小舔哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于GTPv1协议头部的解析相关的知识,希望对你有一定的参考价值。

参考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数据包头里面的数据:

 

 

以上是关于对于GTPv1协议头部的解析的主要内容,如果未能解决你的问题,请参考以下文章

解析http头部和c++string的高级使用技巧

九度oj 题目1475:IP数据包解析

http解析过程

HTTP 之 HTTP协议(HTTP协议概述HTTP消息缓存控制相关头部Cookie相关头部)

Tomcat 对 HTTP 协议的实现(上)

HTTP报文头解析