首页 > 编程知识 正文

5g网络接口,sctp是什么意思

时间:2023-05-04 09:44:31 阅读:48601 作者:3803

摘要众所周知的传输层协议包括TCP和UDP,而SCTP鲜为人知。 然而,在4G核心网EPC中,e-NB和MME之间的S1接口传输层使用SCTP协议。 5G沿袭了4G的思想,g-NB和AMF之间的N2接口传输层也使用了SCTP协议。 协议栈分别如图1和图2所示。 那么,通信网络为什么要使用SCTP协议而不是TCP或UDP协议呢? 对这个问题进行了总结。

图1 4G S1接口控制面(eNB-MME )和5G N2接口控制面(gNB-AMF ) ) ) )。

TCP和UDP的定义TCP和UDP的定义如下。

用户数据报协议(UDP )是一种面向消息的协议,无法有序地发送数据或管理网络拥塞问题。 传输控制协议(TCP ) :面向连接的可靠的基于字节流的协议,用于有序地发送数据和管理网络拥塞问题; SCTP协议SCTP协议概述流控制传输协议(SCTP )是IP网络中使用的可靠的通用传输层协议。 SCTP是一种面向连接的流式传输协议,在两个端点之间提供稳定有序的数据传输服务。 虽然SCTP协议最初是为发送电话信号而设计的(RFC 2960 ),但它带来了意想不到的结果,即借鉴了UDP的优势解决了TCP的一些局限性。 SCTP提供了提高套接字初始化可用性、可靠性和安全性的功能。 图3位IP堆栈的分层结构。

图2 IP堆栈分层体系结构

SCTP协议的特点SCTP像TCP一样提供可靠、有序的数据发送功能,但像UDP一样以消息为导向进行操作,从而保护消息边界。 STP还具有一些高级功能。

多重归属地、多重流、初始化保护、消息成帧、可配置的无序发送、配置

为多宿主多宿主APP应用程序提供比TCP更高的可用性。 多宿主主机是具有多个网络接口的主机,因此可以通过多个IP地址访问此主机。 在TCP中,连接是指两个端点之间的通道。 在这种情况下,是两个主机的网络接口之间的套接字。 SCTP引入了关联这一概念。 虽然关联存在于两台主机之间,但您可以使用每台主机上的多个接口进行协作。

图3 TCP连接和SCTP联合

图4的顶部是TCP连接,每个主机只包含一个网络接口。 连接在每个客户端和服务器之间的单个接口之间建立,并在建立连接时绑定到每个接口。 在图4的底部,可以看到每个主机包含两个网络接口的体系结构。 通过独立的网络提供了两条路径。 一个从接口C0到S0,另一个从接口C1到S1。 SCTP允许将这两个路径合并为一个联合。

SCTP使用内置的heartbeat机制监视联合路径。 一旦检测到一条路径失效,协议通过另一条路径发送通信数据。 APP应用程序甚至不需要知道发生了故障恢复。

在某种意义上,多流连接类似于TCP连接,不同之处在于SCTP可以在一个联合中支持多流机制。 联合内的所有流程都是独立的,但与联合有关。

图4 SCTP联合与流程的关系

每个流被赋予流编号,流编号被编码成SCTP消息中,并通过联合在网络上传输。 多流非常重要。 因为被阻止的流不会影响同一联盟中的其他流,例如,因为等待重发的流导致消息丢失。 这个问题统称为“线外阻塞”。 TCP容易出现这种堵塞问题。

多流如何提高数据传输时的响应能力? 例如,HTTP协议在同一套接字上共享控制和数据。 Web客户端从服务请求文件,然后服务通过同一连接将该文件发送回客户端。 多流HTTP服务可以在联合中的各个流中处理多个请求,从而提供更好的交互。 该功能可以并行化响应,并不一定快,但可以通过同时加载HTML和图像来提高响应能力。

多流处理是SCTP的重要特性之一,尤其是在协议设计中考虑某些控制和数据问题的情况下更是如此。 在TCP中,控制和数据通常由同一连接共享。 这可能会产生问题,因为控制消息可能延迟到数据报之后。 如果控制和数据被划分为不同的流,则控制数据将得到更及时的处理,从而更好地利用可用资源。

初始化保护通过消息握手在TCP和SCTP上初始化新连接。 在TCP中,该机制称为三次握手(three-way handshake )。 客户端首先向服务器发送一条SYN消息(Synchronize缩写),服务器使用一条SYN-ACK消息进行响应)同步- a

cknowledge)。最后,客户机使用一个 ACK 报文确认已接收到报文。

图5 TCP 和 STCP 握手使用的报文交换

当恶意客户机使用虚假的源地址来伪造一个 IP 报文时,TCP 就会出现问题了,这会大量 TCP SYN 报文攻击服务器。服务器在接收 SYN 报文之前,要为连接分配资源,但是在大量产生 SYN 报文的情况下,最终会耗尽自己的资源,从而无法处理新的请求。这种情况就称为 服务拒绝(Denial of Service,DoS)攻击。
SCTP 可以通过一种 4 次握手的机制并引入了 cookie 的概念来有效地防止这种攻击的产生。在 SCTP 中,客户机使用一个 INIT 报文发起一个连接。服务器使用一个 INIT-ACK 报文进行响应,其中就包括了 cookie(标识这个连接的惟一上下文)。客户机然后就使用一个 COOKIE-ECHO 报文进行响应,其中包含了服务器所发送的 cookie。现在,服务器要为这个连接分配资源,并通过向客户机发送一个 COOKIE-ACK 报文对其进行响应。
要解决使用这种 4 次握手机制解决延时数据移动的问题,SCTP 允许把数据包含到 COOKIE-ECHO 和 COOKIE-ACK 报文中。

消息分帧

使用消息分帧机制,就可以保护消息只在一个边界内通过 socket 进行通信;这意味着如果客户机向服务器先发送 100 个字节,然后又发送 50 个字节。那么服务器就会在两次读取操作中分别读取到 100 个字节和 50 个字节。UDP 也是这样进行操作,这对于面向消息的协议非常有益。对于面向流的数据来说,例如音频和视频数据,可以没有分帧机制。
与此不同,TCP 是按照字节流的方式进行操作。如果没有分帧机制,一端接收到的数据可能比另外一端发送的数据多或少(这会将一次写操作划分成多次操作,或者将多次写操作合并到一个读操作中)。这种行为需要在 TCP 之上进行操作的面向消息的协议可以在应用层中提供数据缓冲和消息分帧机制(这可能是一项复杂的任务)。
SCTP 在数据传输中提供了消息分帧功能。当一端对一个套接字执行写操作时,可确保对等端读出的数据大小与此相同。

图6 UDP/SCTP 中的消息分帧与面向字节流协议的比较

可配置的无序发送

SCTP 中的消息的传输十分可靠,但未必是按照想要的次序来传输的。TCP 可以确保数据是按照次序发送的(考虑到 TCP 是一种流协议,这是一件好事)。UDP 无法确保有序地发送数据。但是如果需要,您也可以在 SCTP 中配置流来接受无序的消息。
这种特性在面向消息的协议中可能非常有用,因为其中的消息都是独立的,次序并不重要。另外,可以在一个联合中按照逐个流配置无序发送。

平滑关闭

TCP 和 SCTP 都是基于连接的协议,而 UDP 则是一种无连接的协议。TCP 和 SCTP 都需要在对等的两端建立和拆除连接。SCTP 与 TCP 中关闭连接的不同之处在于 TCP 中连接的删除是半关闭(half-close) 的。

图6 TCP 和 SCTP 的连接结束序列

在 TCP 中,一端可以关闭自己这端的 socket(这样会导致发送一个 FIN 报文),但是仍然可以继续接收数据。FIN 说明这个端点不会再发送数据,但是在这一端关闭自己这端的套接字之前,它一直可以继续传输数据。应用程序很少使用这种半关闭状态,因此 SCTP 的设计者就选择放弃这种状态,并将其替换成了一个显式的终结序列。当一端关闭自己的套接字时(导致产生一个 SHUTDOWN 原语),对等的两端全部需要关闭,将来任何一端都不允许再进行数据的移动了。

N2接口控制面选择SCTP协议的原因

不用UDP协议的原因如下:

UDP协议不可靠,UDP没有任何质量保证的,会乱序和丢包。对于控制信令来说是不能接受的。丢了一个消息可能导致整个设备的状态错了,会带来无数意想不到的问题。为了保证消息的正确性,就必须在应用层增加保证机制,例如序列号、重传等等。但是这样增加了协议的复杂性,也增加了实现的复杂性;UDP协议不安全,UDP协议传输之前不需要提前建立连接,没有提供任何认证功能,安全性很差;

不用TCP协议的原因如下:

TCP传输的单位是数据流,它没有开头和结尾的标志,而信令是一个个有长度的消息。如果要用TCP传递消息,就必须添加消息的结束开始标志,这个无疑增加了实现的难度;TCP的数据是有序的,如果前面的包丢了,后面的包即使收到了,也不能发给上层应用,必须等丢的包重传后,后面的包才能给上层应用。但是5G控制面传递的一般是不同用户的消息,消息之间没有什么关联,不能够因为A用户的消息堵塞了,就影响B用户。解决的方案是为每个用户建立一个TCP的连接,可是这样就消耗比较多的资源,例如一个AMF可能同时连接几十万个用户,几十万个TCP连接的开销是十分巨大的;

5G N2接口使用SCTP的原因主要是由控制面的特点决定的,由于通信系统中,信令都是要求传输的可靠性需要有高度保证,而UDP的问题在于没有可靠性保证自然首先被信令面淘汰,TCP尽管是面向连接,而且有确认机制,但是TCP在拥塞控制,实时性,以及防止攻击方面做的比较差,而SCTP的设计包括适当的拥塞控制、防止泛滥和伪装攻击、更优的实时性能,综合比较这些传输协议,核心网的信令面设计的时候,选取了更为可靠的SCTP作为传输协议。

SCTP协议为什么不为人所知?

SCTP优点很多,但是主要用在电信领域,没有大量部署使用。主要原因如下:

广泛存在:未广泛集成到TCP/IP协议栈中;库:在易于使用的语言中很少有高级绑定;NAT:不能很好地穿越NAT;流行度:没有普通的公共应用程序使用它;编程范式:它改变了一点:它仍然是一个套接字,但是你可以将许多主机连接到许多主机(多主机),数据报是有序和可靠的,ERC…复杂性:SCTP堆栈的实现非常复杂;竞争:多路径TCP即将到来,应该解决多归属需求/功能,因此人们在可能的情况下不执行SCTP,等待MTCP;生态位:需要SCTP填充是非常特殊的(有序可靠的数据报,多流),并且不需要很多应用程序;安全性:SCTP逃避安全控制(一些防火墙,大多数IDSes,所有DLP,除了CentOS/Redhat/Fedora…)以外,没有出现在netstat上;审计能力:世界上有3家公司定期对SCTP安全性进行审计;学习曲线:没有多少工具链可以玩SCTP;下盖:主要用于电信领域,每次发送短信、在手机上上网或打电话时,通常都会触发流经SCTP的消息(SIGTRAN/SS7与GSM/UMTS,Diverage与LTE/IMS/RCS,S1AP/X2AP与LTE)。所以你确实经常使用它,但你永远不知道;-) 参考

sctp和tcp的区别
为什么SCTP没有被大量使用/知道?
浅谈LTE–为什么EPC选择了sctp?
LTE学习笔记:LTE S1接口控制面协议选择SCTP的原因
使用 SCTP 优化网络

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。