LTE常用协议

作者:神秘网友 发布时间:2020-03-25 06:55:54

LTE常用协议

LTE常用协议

LTE常用协议

  • s1ap
    • 介绍
    • 功能
  • SCTP
    • 介绍
    • 报文格式
  • Diameter
    • 介绍
    • 报文格式
  • GTP GPRS隧道协议
    • GTPU
      • 报文格式
    • GTPC
      • 报文格式

介绍

1.S1接口是LTE **eNodeB(基站)**与 EPC(分组核心网)之间的通讯接口。
2.将LTE系统划分为无线接入网和核心网。
3.S1接口分成两个接口,一个用于控制平面(S1-MME),一个用于用户平面(S1-U)。
4.控制平面接口S1-MME将基站和移动性管理实体(MME)相连,主要完成S1接口的无线接入承载控制、接口专用的操作维护等功能。
5.用户平面接口S1-U将基站和服务网关(S-GW)连接,用于传送用户数据和相应的用户平面控制帧。

功能

  1. E-RAB:建立
  2. 初始化上下文的传输,
  3. 可以传输UE的能力信息给MME
  4. 让MME感知UE的当前位置信息(寻呼)
  5. 在基站和MME之间传输NAS信令

介绍

在TCP/IP协议栈中所处的位置和TCP、UDP类似,兼有TCP/UDP两者特征。
1. TCP是以字节为单位传输的,SCTP是以数据块为单位传输的,SCTP的这种数据块(DATA CHUNK)通常会携带应用的一个数据包,或者说是应用要发送的一个消息。

在实际的应用中,TCP发送方的可以将应用程序需要发送的多个消息打包到一个TCP包里面发出去。比如,应用程序连续调用两次send()向对端发送两条消息,TCP协议可能把这两条消息都打包放在同一个TCP包中。接收端在收到这个TCP包时,回给对端的ACK只是表明自己接收到了多少个字节,TCP协议本身并不会把收到的数据重新拆散分成两条应用层消息并通知应用程序去接收。事实上,应用程序可能只需要调用一次receive(),就会把两条消息都收上来,然后应用需要根据应用程序自己定义的格式去拆成两条消息。

与TCP不同,SCTP是将应用程序的每次调用sendmsg()发送的数据当作一个整体,放到一个被称为DATA CHUNK的数据块里面,接收端也是以DATA CHUNK为单位接收数据,并重新组包,通知应用程序接收。通常,应用程序每次调用recvmesg()都会收到一条完整的消息。

在SCTP的发送端,多条短的应用层消息可以被SCTP协议打包放在同一个SCTP包中,此时在SCTP包中可以看到多个DATA CHUNK。另一方面,一条太长(比如,超过了路径MTU)的应用层消息也可能被SCTP协议拆分成多个片段,分别放在多个DATA CHUNK并通过不同的SCTP包发送给对端。这两种情况下,SCTP的接收端都能重新组包,并通知应用程序去接收。

2. TCP通常是单路径传输,SCTP可以多路径传输
TCP的两端都只能用一个IP来建立连接,连接建立之后就只能用这一对IP来相互收发消息了。如果这一对IP之间的路径出了问题,那这条TCP连接就不可用了。
SCTP不一样的地方是,两端都可以绑定到多个IP上,只要有其中一对IP能通,这条SCTP连接就还可以用。

3. TCP是单流有序传输,SCTP可以多流独立有序/无序传输

4. TCP连接的建立过程需要三步握手,SCTP连接的建立过程需要四步握手
TCP连接建立过程,容易受到DoS攻击。在建立连接的时候,client端需要发送SYN给server端,server端需要将这些连接请求缓存下来。通过这种机制,攻击者可以发送大量伪造的SYN包到一个server端,导致server端耗尽内存来缓存这些连接请求,最终无法服务。
SCTP的建立过程需要四步握手,server端在收到连接请求时,不会立即分配内存缓存起来,而是返回一个COOKIE。client端需要回送这个COOKIE,server端校验之后,从cookie中重新获取有效信息(比如对端地址列表),才会最终建立这条连接。这样,可以避免类似TCP的SYN攻击。
应用程序对此感知不到,对应用程序来说,不管是TCP还是SCTP,都只需要在server端listen一个socket,client调用connect()去连接到一个server端。

5. SCTP有heartbeat机制来管理路径的可用性

报文格式

LTE常用协议
Source Port Number:16比特的无符号整数,源端口号,识别SCTP发送端点的SCTP端口号。接收方可以使用源端口号、源IP地址、目的端口号和目的IP地址标识该SCTP分组所属的偶联。
Destination Port Number:16比特的无符号整数,目的端口号,为目的端点的SCTP端口号。接收主机可以使用目的端口号将SCTP分组复用到正确的端点或应用中。
Verification Tag:32比特的无符号整数,验证标签是偶联建立时,本端端点为这个偶联生成一个随机标识。偶联建立过程中,双方会交换这个TAG,到了数据传递时,发送端必须在公共分组头中带上对端的这个TAG,以备校验。包含INIT数据块的分组中验证标签必须为0。在包含SHUTDOWN-COMPLETE数据块且设置了T比特的分组中,验证标签必须要从包含 SHUTDOWN-ACK数据块的分组中复制。
在包含ABORT数据块的分组中,验证标签必须要从触发这个ABORT发送的分组中复制。
Checksum:32比特的无符号整数,SCTP通过对用户数据使用ADLER-32算法,计算出一个32位的校验码,带在数据报中,在接收端进行同样的运算,通过检查校验码是否相等来验证用户数据是否遭到破坏。
Chunk Type:8比特的无符号整数,块类型定义在块值(Chunk Value)中消息所属的类型。包括:INIT、INIT ACK、SACK、ABORT、ERROR、SHUTDOWN、COOKIE ACK等13种数据块类型。该参数的取值范围为0~254,255留作今后的扩展。数据块类型字段的编码分配如下:
0:净荷数据(DATA)
1:启动(INIT)
2:启动证实 (INIT ACK)
3:选择证实 (SACK)
4:Heartbeat请求(HEARTBEAT)
5:Heartbeat证实(HEARTBEAT ACK)
6:中止 (ABORT)
7:关闭(SHUTDOWN)
8:关闭证实(SHUTDOWN ACK)
9:操作差错(ERROR)
10:状态Cookie(COOKIE ECHO)
11:Cookie证实(COOKIE ACK)
12:为明确拥塞通知响应(ECNE)预留
13:为降低拥塞窗口(CWR)预留
14:关闭完成(SHUTDOWN COMPLETE)
15~62:IETF预留
63:IETF定义的数据块扩展
64~126:IETF预留
127:IETF定义的数据块扩展
128~190:IETF预留
191:IETF定义的数据块扩展
192~254:IETF预留
255:IETF定义的数据块扩展
Chunk type的高两位bit指示了收端不认识对应的chunk type的处理原则:
00:停止处理数据报并丢弃,不再处理报中的其他Chunk。
01:与00相同处理外,还要在ERROR或INIT ACK中上报,原因为不认识的参数类型。
10:忽略该Chunk ,继续处理数据报中的其他Chunk。
11:同10相同处理外,还要在ERROR中上报,原因为不认识的Chunk类型。
Chunk Flags:8比特的无符号整数,块标志位用法由块类型决定。除非被置为其他值,块标记在传送过程中会被置0而且接收端点会忽视块标记。
Chunk Length:16比特的无符号整数,块长度用来表示包括块类型、块标记、块长度和块值在内的字节数,长度使用二进制表示。
Chunk Value:变长,块值字段是在该数据块中真正传送的信息,内容由数据块类型决定。块值的长度为不定长。

介绍

一种AAA协议(AAA是认证(Authentication)、授权(Authorization)和计费(Accounting)的简称)
主要用于下面两中连接:
HSS------MME, PCRF-----PGW
Diameter协议不是一个单一的协议,而是一个协议簇,它包括基本协议(Diameter Base Protocol)和各种由基本协议扩展而来的应用协议
LTE常用协议
1.Diameter基本协议为各种认证、授权和计费业务提供了安全、可靠、易于扩展的框架。其主要涉及性能协商、消息如何被发送、对等双方最终如何结束通信等方面。
2.Diameter基本协议一般不会单独使用,需要应用扩展它来提供具体的服务,应用协议扩展了基本协议,以完成特定的接入和应用业务。
3.Diameter基础协议旨在提供一个AAA框架,以用于各种应用。
4.Diameter网络节点运行在TCP或者SCTP上,能够提供可靠传输和具有重传机制,由传输层来提供可靠性。
5.能同时支持大量的请求,因为HSS和PCRF中包含了大量用户的签约数据和计费策略等等。

报文格式

LTE常用协议
Version:必须设置为1,表示 Diameter 版本1。
Command Flags:八位标识。
Command-Code:使用3个八位组段,配合信息传送需求。
Application-ID:4个八位组,用来识别信息可使用到的应用程序。这个应用程序可以是一个认证程序,一个计费程序,也可以是运营商专用程序。
Hop-by-Hop Identifier:32位无符号整数段,用来匹配请求和回复。
End-to-End Identifier:32位无符号整数段,用来探测重复信息。
AVPs:属性值对(AVP:Attribute Value Pair)是一种与 Diameter 信息相关的信息封装方法。一个 AVP 就像一种 RADIUS 属性。一些 AVP 是用于 Diameter 基础协议,另一些意向用于 Diameter 应用程序(如 NASREQ),更有一些是为使用 Diameter 的更高级终端系统应用程序所应用。Diameter AVP 头格式如下:
1.AVP Code:与运营商- ID 段相结合,唯一识别属性。AVP 数值从1到255供与 RADIUS 反向兼容所用。
2. AVP Flags:通知接收方每个属性必须如何处理。r(reserved)位表示预留位,不使用,应该设置为0。
3.AVP Length:三个八位组,表示 AVP 中所含八位组的数量,包括 AVP Code、AVP Length、AVP Flags、Vendor-ID field(如果存在)以及 AVP data。
4.Vendor-ID:可选段,如果 AVP Flags 段设置了 V 位,该段就存在。可选的四个八位组 Vendor-ID 段包括 IANA,它被分配了 SMI 网络管理专用企业代码值,并且以网络字节顺序编码。

1.GTP是一组基于IP的高层协议,位于TCP/IP或UDP/IP等协议上,分为GTPC和GTPU。
2.GTP-C用于在GPRS核心网内传输GGSN(网关GPRS支持结点)和SGSN(服务GPRS支持结点)之间的信令,使用端口2123。
3.GTP-U用于在GPRS核心网内,无线接入网与核心网之间传送用户数据,也就是S1和X2用户面数据,使用端口2152。
4.TEID,隧道端点标识符。由接收端生成,供发送端使用,通过s1/x2信令交换。
5.虽然它们各自独立,但报文头的格式是统一的:

GTPU

报文格式

LTE常用协议
Version:版本号,长度3位,GTPv1值为1,即三位分别为001;
p:协议类型(Protocol type),长度1位,1表示是GTP-C或GTP-U,0表示是GTP’;
(*):保留位,长度1位,值为0;
E:扩展消息头标志位(Extension Header Flag),长度1位,标记是否存在一个可选的扩展消息头字段,有则值为1,无则为0;
s:序列号标志位(Sequence Number Flag),长度1位,标记是否存在一个可选的序列号字段,有则值为1,无则为0;
Pn:N-PDU号标志位(Number Flag),长度1位,标记是否存在一个可选的N-PDU号字段,有则值为1,无则为0;
Message:消息类型(Message Type),长度8位,即GTP消息的类型,消息类型参考相关标准;
Total length:消息总长度,长度16位,不包括GTP头前8字节,单位为字节;
TEID:隧道端点标识(Tunnel endpoint identifier),长度32位,用来区分GTP隧道中的不同连接;
Sequence number:序列号,长度16位,当e、s、Pn位中的任意一个值为1时,该字段存在,当s位为1时,这个字段需要被解析;
N-PDU number:N-PDU号,长度8位,当e、s、Pn位中的任意一个值为1时,该字段存在,当Pn位为1时,这个字段需要被解析;
Next extension header type:下一扩展消息头类型,长度8位,当e、s、Pn位中的任意一个值为1时,该字段存在,当e位为1时,这个字段需要被解析。

GTPC

报文格式

基本差不多,1-4不同。
LTE常用协议
Version:版本号,长度3位,GTP v2值为2,即三位分别为010;
PT:捎带消息标志位(Piggybacking flag),长度1位,标记在这条消息后面会有另外一条带有完整消息头的GTP消息,有则值为1,无则值为0;
T:TEID标志位(TEID flag),长度1位,标记TEID字段是否存在,有则值为1,无则值为0,只有Echo Request和Echo Response消息不携带TEID字段;
Spare:剩余位,第一个长度3位,第二个长度8位;
Message:消息类型(Message Type),长度8位,即GTP消息的类型,消息类型参考相关标准;
Total length:消息体长度,长度16位,不包括GTP头前4字节,单位为字节;
TEID:隧道端点标识(Tunnel endpoint identifier),长度32位,在T为1时存在,用来区分GTP隧道中的不同连接;
Sequence number:序列号,长度16位。

LTE常用协议相关教程

  1. 移动端自动化测试之adb常用命令
  2. Linux常用指令详解~~
  3. JDK常用类解读--String
  4. 2020年win10最常用dos命令以及win+R即可运行的命令(使用命令打
  5. es5.35head插件常用操作
  6. ES5常用的数组方法
  7. TCP/IP 学习三-IP网际协议
  8. 『网络』浅谈TCP协议