zoukankan      html  css  js  c++  java
  • 对于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数据包头里面的数据:

     

  • 相关阅读:
    VueJS中学习使用Vuex详解
    https://www.cnblogs.com/chinabin1993/p/9848720.html
    5分钟带你入门vuex(vue状态管理)
    引用第三方 chalk 模块
    Vue-Grid-Layout分享一款好用的可拖拽组件
    vue-grid-layout
    拖拽 ‘vue-grid-layout’ 插件了解下
    Vue国际化处理 vue-i18n 以及项目自动切换中英文
    Java线程池ThreadPoolExecutor使用和分析(三)
    Java线程池ThreadPoolExecutor使用和分析(二)
  • 原文地址:https://www.cnblogs.com/jiaxin359/p/7297927.html
Copyright © 2011-2022 走看看