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

2024-03-03 01:36

本文主要是介绍【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


在这里插入图片描述

这篇关于【5G 接口协议】GTP-U协议介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/768050

相关文章

MySQL中慢SQL优化的不同方式介绍

《MySQL中慢SQL优化的不同方式介绍》慢SQL的优化,主要从两个方面考虑,SQL语句本身的优化,以及数据库设计的优化,下面小编就来给大家介绍一下有哪些方式可以优化慢SQL吧... 目录避免不必要的列分页优化索引优化JOIN 的优化排序优化UNION 优化慢 SQL 的优化,主要从两个方面考虑,SQL 语

C++中函数模板与类模板的简单使用及区别介绍

《C++中函数模板与类模板的简单使用及区别介绍》这篇文章介绍了C++中的模板机制,包括函数模板和类模板的概念、语法和实际应用,函数模板通过类型参数实现泛型操作,而类模板允许创建可处理多种数据类型的类,... 目录一、函数模板定义语法真实示例二、类模板三、关键区别四、注意事项 ‌在C++中,模板是实现泛型编程

Python实现html转png的完美方案介绍

《Python实现html转png的完美方案介绍》这篇文章主要为大家详细介绍了如何使用Python实现html转png功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 1.增强稳定性与错误处理建议使用三层异常捕获结构:try: with sync_playwright(

Java使用多线程处理未知任务数的方案介绍

《Java使用多线程处理未知任务数的方案介绍》这篇文章主要为大家详细介绍了Java如何使用多线程实现处理未知任务数,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 知道任务个数,你可以定义好线程数规则,生成线程数去跑代码说明:1.虚拟线程池:使用 Executors.newVir

4G/5G全网通! FiberHome烽火5G CPE Air路由器拆机评测

《4G/5G全网通!FiberHome烽火5GCPEAir路由器拆机评测》烽火5GCPE已经使用一段时间了,很多朋友想要知道这款路由器怎么样?今天我们就来看看拆机测评... 我想大家都听说过、了解过5G。 5G是具有高速率、低时延和大连接特点的新一代宽带移动通信技术,5G通讯设施是实现人机物互联的网络基础设

JAVA SE包装类和泛型详细介绍及说明方法

《JAVASE包装类和泛型详细介绍及说明方法》:本文主要介绍JAVASE包装类和泛型的相关资料,包括基本数据类型与包装类的对应关系,以及装箱和拆箱的概念,并重点讲解了自动装箱和自动拆箱的机制,文... 目录1. 包装类1.1 基本数据类型和对应的包装类1.2 装箱和拆箱1.3 自动装箱和自动拆箱2. 泛型2

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

四种Flutter子页面向父组件传递数据的方法介绍

《四种Flutter子页面向父组件传递数据的方法介绍》在Flutter中,如果父组件需要调用子组件的方法,可以通过常用的四种方式实现,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录方法 1:使用 GlobalKey 和 State 调用子组件方法方法 2:通过回调函数(Callb

Python进阶之Excel基本操作介绍

《Python进阶之Excel基本操作介绍》在现实中,很多工作都需要与数据打交道,Excel作为常用的数据处理工具,一直备受人们的青睐,本文主要为大家介绍了一些Python中Excel的基本操作,希望... 目录概述写入使用 xlwt使用 XlsxWriter读取修改概述在现实中,很多工作都需要与数据打交

java脚本使用不同版本jdk的说明介绍

《java脚本使用不同版本jdk的说明介绍》本文介绍了在Java中执行JavaScript脚本的几种方式,包括使用ScriptEngine、Nashorn和GraalVM,ScriptEngine适用... 目录Java脚本使用不同版本jdk的说明1.使用ScriptEngine执行javascript2.