【5G 接口协议】GTP-U协议介绍

博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持!
博主链接

本人就职于国际知名终端厂商,负责modem芯片研发。
在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。


博客内容主要围绕:
       5G/6G协议讲解
       算力网络讲解(云计算,边缘计算,端计算)
       高级C语言讲解
       Rust语言讲解



文章目录

  • GTP-U协议介绍
    • 一、GTP-U协议栈介绍
      • 1.1 数据传输协议栈
      • 1.2 信令传输协议栈
    • 二、GTP-U Header介绍
      • 2.1 固定部分
      • 2.2 扩展字段
    • 三、扩展头介绍
      • 3.1 NR相关的扩展头介绍
    • 四、控制相关的信令
      • 4.1 路径管理消息
      • 4.2 隧道管理消息
  • 参考

GTP-U协议介绍

一、GTP-U协议栈介绍

1.1 数据传输协议栈

在这里插入图片描述

T-PDU(Transport PDU):用户数据包,如IP数据报,是指终端与外部包数据网络中的网络实体之间发送的用户数据包。
G-PUD(GTP encapsulated user Plane Data Unit):用户数据包(T-PDU)加上GTP-U报头,在GTP网络节点之间发送的数据包。

用户数据包(T-PDU)封装上GTP-U包头之后,通过UDP/IP发送出去。

1.2 信令传输协议栈

在这里插入图片描述

IE:Information Element

使用传输GTP-U路径和隧道管理相关的消息,不同的消息类型具有不同的数据结构,将这些不同的数据结构统称为IE。

NOTE:在实现的时候,需要注意GTP-U具有熟知目标端口号2152。

二、GTP-U Header介绍

在这里插入图片描述
GTP-U的头由两部分组成,第一部分是固定部分,长度为8 bytes;第二部分是扩展部分,根据第一部分相关flag的值,确实是否存在或者有效。下面先介绍固定部分的参数含义。

2.1 固定部分

固定部分的长度为8 bytes,如下图所示部分:
在这里插入图片描述
其中,

  • Version field:指示GTP-U协议版本,目前固定是1;

  • Protocol Type(PT):用于区分GTP和GTP’ 协议,对于GTP协议来说设置为1,GTP’ 协议设置为0;

  • Extension Header flag(E):指示Next Extension Header Type字段是否有效;

  • Sequence number flag(S):指示Sequence Number字段是否有效;

  • N-PDU Number flag(PN):指示N-PDU Number字段是否有效;

  • Message Type:指示GTP-U消息的类型,支持的消息类型如下;
    在这里插入图片描述

  • Length:指示GTP-U消息的长度,单位是byte,长度不包括固定字段(即前8 bytes)。如果存在扩展字段,则应该计算到Length中;

  • Tunnel Endpoint Identifier(TEID):唯一标识一个GTP隧道的端点。此值由接收端分配,通过控制平面消息传输给发送端。发送端在发送消息时携带接收端的TEID,标识此消息是发送给那个接收端。通常情况下不应该为0,但是为了后向兼容,如果接收端通知TEID为0,发送端也要视为正常情况处理。对于Echo Request/Response、Supported Extension Headers notification、Error Indication消息,需要将TEID设置为0;

2.2 扩展字段

GTP-U有3个扩展字段,
在这里插入图片描述
其含义如下:

  • Sequence Number:因为UDP不支持按序传输,为了支持按序传输,需要通过该字段为每个G-PDU消息增加序号;
  • N-PDU Number:该字段用于SGSN间路由区域更新过程和一些系统间切换过程(例如,2G和3G无线接入网络之间)。该字段用于协调MS和SGSN之间的公认通信模式的数据传输。该字段的确切含义取决于具体场景(例如,对于GSM/GPRS到GSM/GPRS,SNDCP N-PDU号在这个字段中);
  • Next Extension Header Type:指示此字段后面的扩展头类型,支持的扩展类型值如下所示;
    在这里插入图片描述

NOTE:如果E、S、PN中的任意一个字段有效(置为1),则上述扩展字段都会出现,但只有有效字段对应的扩展字段的值才有意义。例如E=1,S=0,PN=0,则Sequence Number、N-PDU Number和Next Extension Header Type都存在,但是只有Next Extension Header Type的值有意义。

三、扩展头介绍

扩展头的消息结构如下:
在这里插入图片描述

  • Extension Header Length:指示特定扩展头的长度,其长度是4的倍数,即以4字节为单位;
  • Extension Header Content:由具体的扩展头类型确定;
  • Next Extension Header Type:指示此字段后面的扩展头类型,如果没有此值应该为0;

3.1 NR相关的扩展头介绍

扩展头含义
UDP Port在Error Indication消息中指示发送此错误消息的端口号
PDCP PDU Number在NR中用于基于Xn和N3切换中的数据转发
Long PDCP PDU Number在NR中用于基于Xn和N3切换中的数据转发,对应于PDCP SN长度为18bit
NR RAN Container这个扩展头可以在G-PDU中通过NG-RAN中的X2-U、Xn-U和F1-U用户平面接口传输,对于EN-DC来说,可以在E-UTRAN中传输。带有这个扩展头的G-PDU消息可以在没有T-PDU的情况下发送
PDU Session Container这个扩展头可以在N3和N9用户平面接口,即NG-RAN和UPF之间或两个UPF之间传输

四、控制相关的信令

GTP-U隧道用于在给定的一对GTP-U隧道端点之间携带封装的T-PDU和信令消息。GTP头中的TEID指示一个特定的T-PDU属于哪个隧道。通过这种方式,可以在一对隧道端点之间通过GTP-U复用和解复用数据包。TEID的值会在GTP-C创建PDP上下文和RAB分配过程中进行协商。

GTP-U信令消息分为路径管理消息和隧道管理消息。

4.1 路径管理消息

  • Echo Request/Echo Response:GTP-U端可能会在路径上向另一端发送一个Echo请求,以确定另一端是否还活着(参见“路径失败”一节)。可以为使用中的每个路径发送Echo请求消息。如果至少有一个PDP上下文、EPS Bearer上下文、PDU Session上下文、MBMS UE上下文或MBMS Bearer上下文使用了到另一端GTP-U的路径,则认为该路径已被使用。发送Echo请求消息的时间和频率取决于具体的实现,但在每个路径上发送Echo请求的频率不应超过60秒;
  • Supported Extension Headers Notification:此消息表示指定IP地址上的GTP实体可以支持的扩展头列表。只有在GTP实体需要强制支持某个扩展头,但GTP实体尚未升级以支持该扩展头的情况下,才会发送此消息。发送此消息的GTP端点被标记为不支持某些扩展头。对端GTP实体可能会重试使用该节点的所有扩展标头,以尝试验证它已经升级;

4.2 隧道管理消息

  • Error Indication:当接收端发生错误的时候,向发送端发送错误原因,并指示哪个接收端发送的错误;
  • End Marker:表示给定隧道的有效载荷流结束,即在该隧道的End Marker消息之后到达的G-PDU可能会被静默丢弃。如果接收到带有TEID且没有上下文的End Marker消息,则接收方将忽略此消息;
  • Tunnel Status:隧道状态信息是可选的。一个GTP-U实体如果支持该消息,可以向对端GTP-U实体发送一条或多条隧道状态消息,提供发送方GTP-U实体中与对应GTP-U隧道相关的状态信息;

参考

  • TS 29.281


在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714663.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql学习

查看glibc版本 ldd --version --mysql启动失败,尝试启动 1 查看错误日志,端口被占用,参数名写错,有不支持的参数 2 通过mysqld启动 mysqld --default-filemy.cnf & 3 mysqld --no-defaults --basedir/user/local/mysql --datadir/data/mysql/3306/data/ --usermysql 4 str…

深入理解 Nginx 的负载均衡与反向代理

深入理解 Nginx 的负载均衡与反向代理 Nginx 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。由于其出色的性能和灵活性,Nginx 已成为现代 web 架构中的重要组成部分,尤其是在处理高并发连接和大规模流量时。在…

找到数组的中间位置-1991-[简单]

力扣 关键点 从题目中总结出公式 sum * 2 nums[i] total从左往右开始尝试,寻找 i 位置满足上面的公式,为什么从左开始,因为题目要求找到最左边的一个用前缀和的概念来解,从左往右尝试i位置的左边所有数之和,右边所有…

基础小白快速入门Python------>模块的作用和意义

模块, 这个词听起来是如此的高大威猛,以至于萌新小白见了瑟瑟发抖,本草履虫见了都直摇头,好像听上去很难的样子,但是但是,年轻人,请听本少年细细讲述,他只是看起来很难,实…

GO-接口

1. 接口 在Go语言中接口(interface)是一种类型,一种抽象的类型。 interface是一组method的集合,接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它…

【go语言开发】swagger安装和使用

本文主要介绍go-swagger的安装和使用,首先介绍如何安装swagger,测试是否成功;然后列出常用的注释和给出使用例子;最后生成接口文档,并在浏览器上测试 文章目录 安装注释说明常用注释参考例子 文档生成格式化文档生成do…

C++从零开始的打怪升级之路(day39)

这是关于一个普通双非本科大一学生的C的学习记录贴 在此前,我学了一点点C语言还有简单的数据结构,如果有小伙伴想和我一起学习的,可以私信我交流分享学习资料 那么开启正题 今天分享的是关于模板的知识点 1.非类型模板参数 模板参数分为…

大模型生成,Open API调用

大模型是怎么生成结果的 通俗原理 其实,它只是根据上文,猜下一个词(的概率)…… OpenAI 的接口名就叫【completion】,也证明了其只会【生成】的本质。 下面用程序演示【生成下一个字】。你可以自己修改 prompt 试试…

高并发下的 AtomicReference 性能陷阱

介绍 Java 提供了 AtomicInteger/AtomicLong 在并发编程里经常用到,它们封装了对 int 和 long 的原子操作。 Java 还提供了 AtomicReference,用于对象引用做原子性的管理,比如 get、set、CAS。 一般情况下 AtomicInteger、AtomicLong 的性能…

mac新环境

1、maven 设置阿里云镜像 打开Maven的settings.xml文件。找到<mirrors>标签&#xff0c;如果没有&#xff0c;可以手动添加。在<mirrors>标签内部添加以下内容&#xff1a; <mirror> <id>nexus-aliyun</id> <mirrorOf>*</mirrorO…

【C++】类的转换函数

使用场景 C中当你创建了一个类&#xff0c;你想把这个类对象转换成基本类型的函数。类对象->基本类型对象 原理 如下实例&#xff0c;设计一个分数类&#xff0c;实现分数转换成double 浮点数的转换函数。并在mian函数隐式调用。 #include<iostream> class Fractio…

6. 使用 Spring Boot进行开发(Developing with Spring Boot)

6. 使用 Spring Boot进行开发&#xff08;Developing with Spring Boot&#xff09; 本节详细介绍了如何使用Spring Boot。它涵盖考虑构建系统、自动配置以及如何运行应用程序等主题。我们还介绍一些 Spring Boot 最新做法。虽然 Spring Boot 没有什么特别之处&#xff08;它只…

Java 接口和抽象类有何区别?

Java接口&#xff08;Interface&#xff09;和抽象类&#xff08;Abstract Class&#xff09;都是面向对象编程中用于实现多态和代码复用的重要概念&#xff0c;但它们之间有几个关键的区别&#xff1a; 1. **实例化**&#xff1a; - **接口**&#xff1a;不能被实例化。它…

【Spring连载】使用Spring Data访问 MongoDB----对象映射之JSON Schema

【Spring连载】使用Spring Data访问 MongoDB----对象映射之JSON Schema 一、生成Schema二、加密字段三、JSON Schema类型 从3.6版本开始&#xff0c;MongoDB支持根据提供的 JSON Schema验证documents的集合。在创建集合时&#xff0c;可以定义schema本身以及验证操作和级别&…

Python爬虫Cookies 池的搭建

Cookies 池的搭建 很多时候&#xff0c;在爬取没有登录的情况下&#xff0c;我们也可以访问一部分页面或请求一些接口&#xff0c;因为毕竟网站本身需要做 SEO&#xff0c;不会对所有页面都设置登录限制。 但是&#xff0c;不登录直接爬取会有一些弊端&#xff0c;弊端主要有…

南京师范大学计电院数据结构课设——排序算法

1 排序算法 1.1 题目要求 编程实现希尔、快速、堆排序、归并排序算法。要求首先随机产生10000个数据存入磁盘文件&#xff0c;然后读入数据文件&#xff0c;分别采用不同的排序方法进行排序并将结果存入文件中。 1.2 算法思想描述 1.2.1 随机数生成 当需要生成一系列随机数…

windows 11 前后端项目部署

目录 1.准备环境&#xff1a; 2.安装jdk 测试&#xff1a;winr 输入cmd 3.安装tomcat 4.安装mysql 远程导入数据&#xff1a; 外部后台访问&#xff1a;192.168.232.1:8080/crm/sys/loginAction.action?usernamezs&password123 5.安装nginx 前后端部署&#xff1…

qsort函数的模拟实现(冒泡排序模拟)

冒泡排序&#xff1a; 从第一个元素开始&#xff0c;依次比较相邻的两个元素&#xff0c;如果顺序不对就交换它们。 经过一轮遍历后&#xff0c;最大&#xff08;或最小&#xff09;的元素会排在最后。 重复进行上述步骤&#xff0c;直到没有任何元素需要交换&#xff0c;即…

Linux了解

简介 Linux是一种自由和开放源代码的类UNIX操作系统&#xff0c;由芬兰的Linus Torvalds于1991年首次发布。Linux最初是作为支持英特尔x86架构的个人电脑的一个自由操作系统&#xff0c;现在已经被移植到更多的计算机硬件平台&#xff0c;如手机、平板电脑、路由器、视频游戏控…

爬虫入门到精通_实战篇8(分析Ajax请求并抓取今日头条美食美图)_界面上抓取Ajax方式

1 目标 目标&#xff1a; 抓取今日头条美食美图&#xff0c;如下&#xff1a; 一些网页直接请求得到的HTML代码并没有在网页中看到的内容&#xff0c;因为一些信息是通过Ajax加载&#xff0c;并通过js渲染生成的&#xff0c;这时就需要通过分析网页的请求来获取想要爬取的内容…