关于GTPv1协议解析

article/2025/11/7 16:58:25

概述:

***(简单说一下,不重点讲述啦)
GPRS 隧道协议 (GTP) 是一种隧道协议,用于 GPRS、UMTS、LTE 和 5G 网络。它分为两个独立的协议:GTP-C 和 GTP-U。GTP-C用于GPRS核心网络中,用于不同网络节点之间的信令。GTP-U 用于承载用户数据。

GTP 消息头

  • GTP-C和GTP-U协议使用的GTP头是变长度的。GTP头的最小长度是8个字节。有三个标志用来指示三个可选字段是否使用:PN标志,S标志和E标志。PN标志用于指示是否使用N-PDU可选字段;S标志用于指示是否使用GTP序号;E标志用于指示是否使用扩展头可选字段,使用这个标志可以使将来对本规范进行扩展时不需使用另外的版本号。假如设置了三个标志中的任一个,GTP头的长度至少是12个字节,且接收者应处理相应的字段。发送者应把所有未使用的位置零,接收者不处理未用字段。
    GTP-C和GTP-U对GTP头某些字段的使用是不同的。
    必选字段:

- 版本号(Version):3bit,这个字段用于确定GTP协议的版本。
- 协议类型(PT):这个位用于区分GTP(PT置为’1’)和GTP’(PT置为’0’)协议。
扩展头标志(E):这个标志置’1’表示有下一个扩展头字段。置’0’表示没有下一个扩展头字段,或有但不必解释。
序号标志(S):这个标志置’1’表示有序号字段。置’0’表示要么没有序号字段,要么有但不必做出解释。在GTP-C消息中S标志应置’1’。
N-PDU编号标志(PN):这个标志置’1’表示有N-PDU编号字段。置’0’表示要么没有N-PDU编号字段,要么有但不必做出解释。这个标志仅对GTP-U有意义。正因为如此,GTP-C不使用这个标志,GTP-C的接收实体应忽略此标志。
消息类型:这个字段指出GTP消息的类型。有效的GTP-C和GTP-U消息类型值后续再讲。
长度:这个字段指出以字节为单位的净荷长度,即分组中除了GTP头的必选部分外剩余部分的长度(即除去前面的8个字节)。序号、N-PDU编号或任何扩展头应作为净荷部分考虑,即包含在长度计数中。
隧道端点标识符(TEID):这个字段清楚地标识了对端的GTP-U或GTP-C协议实体中的隧道端点。由GTP隧道的对端本地分配TEID值,供GTP隧道的发起方使用。通过GTP-C(在Iu接口上使用RANAP消息)消息在隧道的两个端点间交换TEID值。
Sequence number::2字节,对T-PDU进行编码,可用于用户面排序,重传等目的

可选字段
序号:这个字段在GTP-U中是可选的。对GTP-C控制面消息,序号用于事务标识。通过GTP-U隧道传输时,如果必须保护传输顺序,用次字段对T-PDU进行编号,且每传输一个T-PDU就增加序号值。
N-PDU标号:这个字段在SGSN间的路由区更新过程中和某些系统间切换过程(如2G和3G无线接入网间切换)中使用。当MS和SGSN间的通讯工作在确认模式下时,使用这个字段协调它们间的数据传输。这个字段的确切意义取决于使用场合。如GSM/GPRS到GSM/GRPS,这个字段就是SNDCP N-PDU编号。
下一个扩展头类型:这个字段定义在G-PDU中紧接着这个字段的扩展头的类型。

Octets		8	7	6	5	4	3	2	1
1		版本号	协议类型	(*)	E	S	PN
2		消息类型
3		长度(1st Octet)
4		长度 (2nd Octet)
5		隧道端点标识符TEID(1st Octet)
6		隧道端点标识符TEID(2nd Octet)
7		隧道端点标识符TEID(3rd Octet)
8		隧道端点标识符TEID(4th Octet)
9		序号(1st Octet)1) 4) 
10		序号(2nd Octet)1) 4)
11		N-PDU编号2) 4)
12		下一个扩展头类型3) 4)

(*) 这个位是空位应置零,接收者不解释。

  1. 仅当S标志置’1’才解释这个字段。
  2. 仅当PN标志置’1’才解释这个字段。
  3. 仅当E标志置’1’才解释这个字段。
  4. S, PN, E标志中任何一个或多个被置’1’时就应出现这个字段。

GTP扩展头的格式在图3中描述。应以四字节为单位定义扩展头长度。下一个扩展头类型字段定义紧接着这个扩展头的下一个扩展头的类型。如果紧接着的不是扩展头,这个字段应置为’0’。

Octets 1    扩展头长度
2 - m		扩展头内容
m+1		下一个扩展头类型(*)

图3. 扩展头格式略图
() 假如紧接着没有扩展头应把这个字段置为’0’。
扩展头的长度应以4字节长度单位定义, 如m+1 = n
4个字节,n是正整数。
下一个扩展头类型字段的第7、8位定义接收方应怎样处理不认识的扩展头类型。除了标记为”不要求解释”外,接收方应解释’下一个扩展头’字段(用扩展头长度字段标识扩展头在G-PDU中的位置)。
接收方在接收到标记为’要求解释’的不认识的扩展头时,应按如下规则处理:

  • 假如带不认识的扩展头消息是请求消息,就发送一个响应消息,原因值置为”不认识的必选扩展头”。
  • 给GTP PDU的发起者发送’支持的扩展头通告’消息。
  • 在错误日志中登记。

GTP-C 的简单头部
在这里插入图片描述


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

相关文章

GTP-U协议总结

1、​参考资料 3gpp TS 29.060 V17.1.0-GPRS Tunnelling Protocol (GTP) TS 29.281 V17.1.0-GPRS Tunnelling Protocol User Plane (GTPv1-U) 2、GTP协议 GTP(GPRS隧道协议(GPRSTunnelingProtocol)),可以分解成三种独立的协议&#xff0…

【5G核心网】 GTP协议

GTP 可以提供移动性的功能。 使用 GTP,网络的终端能够在网络中移动位置,各个端点集之间可以建立多个隧道,从而根据业务不同可以提供不同的 Qos,可以隐藏 IP,安全性更高。 1. 定义概念 GTP-U Message: GTP-U&#xff…

GTP协议的分析

一、 引言 在GPRS系统的GSN(GPRS Support Node,包括SGSN和GGSN)之间采用GTP(GPRS Tunnel Protocol)协议,GTP在整个GPRS协议栈中起着举足轻重的作用,GTP协议承载在TCP或UDP协议之上,分…

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服务治理方案。说白了其实…