GTP协议的分析

article/2025/11/7 16:56:03

一、 引言

在GPRS系统的GSN(GPRS Support Node,包括SGSN和GGSN)之间采用GTP(GPRS Tunnel Protocol)协议,GTP在整个GPRS协议栈中起着举足轻重的作用,GTP协议承载在TCP或UDP协议之上,分为信令平面和传输平面,其信令平面定义了多种消息,涉及到GPRS许多重要方面,传输平面则提供了GSN之间数据包传送的隧道。另外以GTP为基础的GTP'协议用于GPRS计费数据采集和传输,深入理解GTP协议是熟悉GPRS网络所必须的。

二、 GTP包头

GTP包头的格式如图1所示,Version表示协议版本;PT=1指示GTP协议,PT=0指示GTP'协议(GPRS计费采集协议);SNN指示包头中是否包含SNDCP N-PDULLC Number;Message Type字段指示消息类型,GTP中涉及的消息及其对应的消息类型在本文“信令平面”一节中介绍。Length字段指示包的长度(不含包头);Sequence Number对于信令消息而言是交互的标识,对于T-PDU而言是顺序号;SNDCP N-PDULLC Number用于越SGSN切换时协调MS与SGSN之间的数据传送;Flow Lable唯一标识一个GTP流;TID是隧道标识,由IMSI和NSAPI两部分组成,用于指明MM(Mobility Management)和PDP(Packet Data Protocol)上下文。

无论是信令平面还是传输平面都采用如图1所示的GTP包头,但是其中有些字段的含义和用法存在一定的区别。

三、 信令平面

承载GTP的协议(UDP或TCP)称为路径协议(Path Protocol),每个GSN对之间有多个路径,每个路径上可以存在多个隧道,GTP负责隧道的建立、使用、管理和释放。信令平面主要包含路径管理、隧道管理、位置管理、移动性管理四大类。

对于信令消息,GTP包头中的字段设置如下:

· SNN置为0;

· SNDCP N-PDULLC Number不使用,发端将该字段置为255,收端忽略该字段;

· 对于一个路径或一个隧道上的信令,其request类消息的Sequence Number是唯一的,相应的response消息的Sequence Number从接收的request消息的该字段拷贝;

· 对于路径管理消息、位置管理消息、移动性管理消息而言,TID置为0;对于隧道管理消息而言,TID用于指出目的端GSN的MM和PDP上下文;

· 对于路径管理消息、位置管理消息而言,Flow Lable不使用而置为0;对于移动性管理消息、隧道管理消息而言,Flow Lable应该指出其试图操作的GTP流,例如在Create PDP Context Request消息中分配GTP流的Flow Lable,在对应的Create PDP Context Response消息中应该包含该字段。

GPRS信令消息格式与电信界其他信令定义方式类似,每条消息都包含若干个参数(Information Element),参数分为TV(Type,Value)和TLV(Type,Length,Value)两种类型,TV参数的Type字节的最高位为0,TLV参数的Type字节的最高位为1。每个参数都具有唯一的Type标识。

1 路径管理消息

路径管理是所有其它管理活动的基础,只有确保消息传送的通路处于可用状态,消息才能被正确发送与接收。具体的路径管理消息如下:

· Echo Request/Response(类型码1/2)消息主要用于探测对端GSN是否仍然处于激活状态,路径是否畅通;

· Version Not supported(类型码3)用于指示对端版本不符,同时指出本节点支持的版本。

2 隧道管理消息

隧道管理围绕PDP上下文展开,是GPRS会话过程的核心,具体消息类型如下:

· Create PDP Context Request/Response(类型码16/17)消息用于PDP上下文的建立请求和响应,SGSN向GGSN发请求消息,GGSN向SGSN发响应消息;

· Update PDP Context Request/Response(类型码18/19)消息用于PDP上下文的更新请求和响应,当PDP上下文的有关参数如QoS轮廓需要重新协商时,或者手机发生越SGSN切换时,SGSN需要向GGSN发送请求消息,GGSN向SGSN发响应 消息;

· Delete PDP Context Request/Response(类型码20/21)消息用于PDP上下文的删除请求和响应,SGSN或GGSN向对端发请求消息,对端发响应消息;

· Create AA PDP Context Request/Response(类型码22/23)用于匿名接入情况下建立PDP上下文的请求和响应;

· Delete AA PDP Context Request/Response(类型码24/25)消息用于匿名接入情况下PDP上下文的删除请求和响应;

· Error Indication(类型码26)用于错误指示,当SGSN收到G-PDU而相应的PDP上下文不存在或未激活时,当GGSN收到G-PDU而相应的MM上下文不存在或未激活时,SGSN或GGSN向对端发送Error Indication消息;

· PDU Notification Request/Response(类型码27/28)用于当网络侧发起PDP上下文激活过程时,由GGSN向SGSN发请求消息,SGSN向GGSN发响应消息;

· PDU Notification Reject Request/Response(类型码29/30)当PDU Notification Request/Response消息交互完成后,但无法激活PDP上下文(如手机拒绝),SGSN向GGSN发PDU Notification Reject Request消息,GGSN发响应消息。

3 位置管理消息

SGSN与HLR之间存在Gr接口,采用MAP信令,不涉及GTP协议。在GGSN与HLR之间定义了Gc接口,Gc接口采用MAP信令。然而GGSN涉及的位置管理与SGSN不同,并非所有GGSN均需要实现MAP协议,另一种方法是设置GTP协议与MAP协议转换的GSN(可以认为是一种信令网关),这样GGSN就没有必要支持MAP信令。但是GGSN仍然需要定义相应的GTP域的位置管理消息。

· Send Routeing Information for GPRS Request/Response(类型码32/33)当网络侧发起PDP上下文激活过程时,GGSN需要MS对应的SGSN地址。GGSN向信令网关GSN发Send Routeing Information for GPRS Request,信令网关GSN会将该消息转换为相应的MAP信令与HLR通信,得到查询结果后发Send Routeing Information for GPRS Response消息给GGSN。

· Failure Report Request/Response(类型码34/35)GGSN向信令网关GSN发请求消息,用于将MNRG(Mobile station Not Reachable for GPRS flag)置位,信令网关发响应消息。

· Note MS GPRS Present Request/Response(类型码36/37)GGSN向信令网关GSN发请求消息,通知MS又可以参加通信,信令网关发响应消息。

4 移动性管理消息

有一部分移动性管理在SGSN之间发生,这些管理消息用GTP协议在承载,这些移动性管理消息如下:

· Identification Request/Response(类型码48/49)当手机从附着状态转为分离状态,随后移动到新的SGSN区域,而后又转入附着状态,这时新SGSN会向老的SGSN发送Identification Request消息以索取IMSI,老的SGSN发响应消息。

· SGSN Context Request/Response/Acknowledge(类型码50/51/52)当手机发生越SGSN切换时,新的SGSN会向老的SGSN索取PDP上下文信息。新老SGSN之间会按照该3-way的消息过程进行。

四、 传输平面

传输平面用于传输T-PDU(Tunneled PDU),其路径协议可以采用TCP或UDP,当GTP承载面向连接可靠性要求高的用户协议(如X.25)时,路径可选用TCP;当GTP承载无连接可靠性要求不高的用户协议(如IP)时,路径可选用UDP。

传输平面中GTP包头有关字段的说明:

· 如果SNN置为1,那么GTP报头中将包含SNDCP N-PDU Number字段;

· T-PDU的消息类型是255(十进制);

· SNDCP N-PDU Number:当发生SGSN之间切换时,老的SGSN用该字段通知新SGSN关于该T-PDU的N-PDU的序号。如果SNDCP没有分配N-PDU序号,或者采用非确认LLC工作模式,则SNN=0,而N-PDU序号置为255。

对于传输平面,GTP协议最常用于SGSN与GGSN之间。考虑到SGSN之间会发生切换,老的SGSN可能会残存一部分数据尚未发送给手机;而此时手机已经完成了位置更新,那么这部分残存数据会通过新的SGSN发送到手机,因此SGSN之间也存在GTP传输平面。对于GGSN之间则不存在传输平面,它们之间的数据传送需经过Gi接口,但是这并不意味着GGSN之间必须通过外部数据网作沟通。GGSN之间可以采取直连或通过骨干网相连,只不过数据传送不在GTP协议之上进行而已。

五、 结束语

从理论上说GPRS是一种通用分组接入方式,其上可以承载各种用户协议,这种通用性是通过隧道封装技术实现的。GPRS中涉及两种封装形式,一是位于MS与SGSN之间的SNDCP,另一个是位于GSN之间的GTP,可以说GTP协议是GPRS网络部分的核心协议。本文旨在阐述GTP协议的作用和含义,至于具体的消息与参数格式可参见ETSI的GSM 09.60协议。



http://chatgpt.dhexx.cn/article/p4dW9otw.shtml

相关文章

JS JQuery添加、替换、删除元素class属性

1、先声明一个div和两个class样式&#xff0c;用来测试&#xff1a; <html><head><meta charset"utf-8"><title></title><script src"https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script><s…

jquery动态添加和删除class属性

在用jquery时&#xff0c;遇到一个问题&#xff0c;就是如何动态得添加和删除class的属性&#xff0c;下面是我的解决代码&#xff1a; <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio…

用jQuery的.addClass()方法给元素加class

Target Elements by Class Using jQuery 你看到我们是怎么给所有的按钮做弹回效果了吗&#xff1f;我们用 $("button")来选中按钮&#xff0c;然后用.addClass("animated bounce")给按钮加CSS class。 你只需要用jQuery的.addClass()方法&#xff0c;就可…

js 关于动态添加class样式的学习

如果&#xff0c;我这里有一个需求。如下的页面代码 <body> <input type"button" value"红" id"btn1"/> <p id"p1"> 2016年圣诞前的一个星期天下午&#xff0c;我推开窗&#xff0c;加州明媚的阳光洒在街道上&…

jQuery通过id属性来获取元素,通过.addClass()方法来添加class.

Target Elements by ID Using jQuery 你还可以根据id属性来获取元素 首先用$("#target3")来选择id为target3的button元素。 注意&#xff0c;就像CSS一样&#xff0c;在id的名字前加上 #。 然后使用jQuery的.addClass()方法来添加 animated和fadeOutclass. 例如…

js给元素添加class样式

图中&#xff0c;左侧和右侧都需要添加不同的class类样式 结构&#xff1a; <div class"left"><div class"img_bg leftOne" click"clickLeft(企业文化)">企业文化</div><div class"img_bg leftTwo" click"…

jq获取和设置标签的css样式、jq给标签增加或移除class属性

1、jQuery获取和设置标签的css样式 jQuery既可以直接获取标签的css样式&#xff0c;也可以设置样式&#xff0c;包括行内、内部、外部样式&#xff1b;思路&#xff1a;先要选取这个标签&#xff0c;然后再获取或者设置样式&#xff1b;获取css属性&#xff1a; console.log(…

JavaScript给元素添加class属性

注意&#xff1a;element.classList.remove()、element.classList.add() — ie9及以下不兼容 // 移除div的class属性 obj.classList.remove(active);// 添加class属性值 // 方式一 obj.className new active;// 方式二 // obj.className new active;// 方式三&#xff1a;属…

jq中的addClass()方法与样式冲突

添加类样式方法 addClass()&#xff1a;向被选元素添加指定的类名 注意&#xff1a;该方法仅仅只是在原有基础上添加属性&#xff0c;不会覆盖已存在的 class 属性 提示&#xff1a;如需添加多个类&#xff0c;使用空格分隔类名 一、添加一个class属性 <style>.div {wid…

Dubbo原理简单分析

1.Dubbo原理分析 alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf),jms消息服务(napoli、notify),KV数据库(tair)等。 这个框架/工具/产品在实现的时候,都考虑到了容灾,扩展,负载均衡,于是出现一个配置中心(ConfigServer)的东西…

dubbo解析-介绍服务端和客户端启动和服务调用步骤

本文基于dubbo 2.7.5版本代码 前面的文章介绍了很多dubbo的各个组件&#xff0c;本文将对通过介绍启动和服务调用过程梳理一下这些组件&#xff0c;也让大家对dubbo的全局有一个了解。 文章目录 一、服务端启动二、客户端启动三、服务调用 一、服务端启动 1、spring启动调用后…

面试杀手锏之Dubbo服务调用过程

点赞再看&#xff0c;养成习惯&#xff0c;微信搜一搜【三太子敖丙】关注这个喜欢写情怀的程序员。 本文 GitHub https://github.com/JavaFamily 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 前言 前面我已经带着大家过了服务暴露和服务引入两个流程了…

dubbo的服务调用原理

一、前言 在我们使用dubbo进行远程服务消费时&#xff0c;可以通过Reference注解或dubbo:reference来配置引用的接口&#xff0c;最终会生成远程服务的代理类&#xff0c;转化成ReferenceBean&#xff0c;这样我们就可以像调用本地接口方法一样使用远程服务提供的功能&#xf…

18. Dubbo原理解析-服务调用

服务消费方发起请求 当服务的消费方引用了某远程服务&#xff0c;服务的应用方在spring的配置实例如下&#xff1a; <dubbo:referenceid"demoService"interface"com.alibaba.dubbo.demo.DemoServ ice" /> demoService实例其实是代理工厂生产的代理…

Dubbo 原理和机制详解

Dubbo 是一款Java RPC框架&#xff0c;致力于提供高性能的 RPC 远程服务调用方案。作为主流的微服务框架之一&#xff0c;Dubbo 为开发人员带来了非常多的便利。 1. Dubbo核心功能 Dubbo主要提供了3大核心功能&#xff1a;面向接口的远程方法调用&#xff0c;智能容错和负载均…

从源码全面解析 dubbo 服务端服务调用的来龙去脉

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小黄&#xff0c;独角兽企业的Java开发工程师&#xff0c;CSDN博客专家&#xff0c;阿里云专家博主&#x1f4d5;系列专栏&#xff1a;Java设计模式、Spring源码系列、Netty源码系列、Kafka源码系列、JUC源码…

Dubbo原理和面试问题

今天来说一说dubbo的原理&#xff0c;首先我们要知道dubbo到底是什么&#xff0c;都能提供些什么服务&#xff1f; 一、dubbo是什么&#xff1f; dubbo是⼀个分布式服务框架&#xff0c;提供⾼性能和透明化的RPC远程服务调⽤⽅案&#xff0c;以及SOA服务治理方案。说白了其实…

springboot启动dubbo客户端连接服务端过程

前言 如果我问你,dubbo客户端启动的时候是如何连接服务器端的&#xff1f;这个过程比较复杂&#xff0c;今天我们一起学习起来~ 本文分以下几个部分 1、springboot启动dubbo需要配置 2、初始化Reference过程 3、小结 一、项目应用 1、引入jar包 <dependency><g…

dubbo实现原理机制

Dubbo的总体架构如图所示&#xff1a; 框架分层架构中&#xff0c;各个层次的设计要点&#xff1a; 服务接口层&#xff08;Service&#xff09;&#xff1a;该层是与实际业务逻辑相关的&#xff0c;根据服务提供方和服务消费方的业务设计对应的接口和实现。 配置层&#xff0…

Dubbo源码分析(三):Dubbo之服务端(Service)

如上图所示的Dubbo的暴露服务的过程&#xff0c;不难看出它也和消费者端很像&#xff0c;也需要一个像reference的对象来维护service关联的所有对象及其属性&#xff0c;这里的reference就是provider。由于ServiceBean实现了 &#xfeff;&#xfeff; InitializingBean接口&am…