Bonky Zhu
If someone is able to show me that what I think or do is not right, I will happily change, for I seek the truth, by which no one was ever truly harmed. It is the person who continues in his self-deception and ignorance who is harmed.

计算机网络 – SCTP

SCTP 被视为一个传输层协议,它的上层为SCTP 用户应用,下层作为分组网络。在SIGTRAN 协议的应用中,SCTP 上层用户是SCN 信令的适配模块,下层是IP网。SCTP 可以避免 SYN Flooding Attack

术语

传送地址

传送地址由 IP 地址、传输层协议类型和传输层端口号定义。

由于SCTP 在IP 上传输,所以一个SCTP 传送地址由一个IP 地址加一个SCTP 端口号决定。SCTP 端口号就是SCTP 用来识别同一地址上的用户,和TCP 端口号是一个概念。

主机和端点

  • 主机(Host) 主机配有一个或多个 IP 地址,是一个典型的物理实体。
  • 端点(SCTP Endpoint)端点是SCTP 的基本逻辑概念,是数据报的逻辑发送者和接收者,是一个典型的逻辑实体。
  • 一个传送地址(IP 地址+SCTP 端口号)唯一标识一个端点。一个端点可以由多个传送地址进行定义,但对于同一个目的端点而言,这些传送地址中的IP 地址可以配置成多个,但必须使用相同的SCTP 端口。

偶联和流

偶联就是两个SCTP 端点通过SCTP 协议规定的 4 步握手机制建立起来的进行数据传递的逻辑联系或者通道。 (其实就是 SCTP 的连接,只不过这种连接是一对多的)

SCTP 协议规定在任何时刻两个端点(实体)之间能且仅能建立一个偶联。(可以看作一个连接)由于偶联由两个端点的传送地址来定义,所以通过数据配置本地IP地址、本地SCTP 端口号、对端 IP 地址、对端SCTP 端口号等四个参数,可以唯一标识一个SCTP 偶联。

流是 SCTP 协议的一个特色术语。SCTP 偶联中的流用来指示需要按顺序递交到高层协议的用户消息的序列,在同一个流中的消息需要按照其顺序进行递交。严格地 说,“流”就是一个SCTP 偶联中,从一个端点到另一个端点的单向逻辑通道。一个偶联是由多个单向的流组成的。各个流之间相对独立,使用流ID 进行标识,每个流可以单独发送数据而不受其他流的影响。

一个SCTP偶联中可以包含多个流,可用流的数量是在建立SCTP偶联时由双方端点协商决定的,但一个流只能属于一个SCTP偶联。

img

通路和首选通路

通路是一个端点将 SCTP 分组发送到对端端点特定目的传送地址的路由。如果分组发送到对端端点不同的目的传送地址时,不需要配置单独的通路。

首选通路是在默认情况下,目的地址、源地址在SCTP 分组中发到对端端点的通路。

一个 SCTP 偶联的两个SCTP 端点都可以配置多个IP 地址,这样一个偶联的两个 端点之间具有多条通路,这就是SCTP偶联的多地址性。SCTP 偶联的多地址性是 SCTP 与TCP 最大的不同。

一个偶联可以包括多条通路,但只有一个首选通路。如图所示,MGC一个端点包括两个传送地址,而SG一个端点也包括两个传送地址。

20101222162247250

机制

偶联的建立和关闭

偶联的建立是由 SCTP 用户发起请求来启动的。而且建立过程相对于TCP 连接而言比较复杂,是个“四次握手”过程,并用到了“COOKIE” 的机制。

COOKIE 是一个含有端点初始信息和加密信息的数据块,通信的双方在关联建立时需要处理并交换,从而增加协议的安全性,防止拒绝服务和伪装等潜在的 攻击。

SCTP 提供了对激活偶联的正常的关闭程序,它必须根据SCTP 用户的请求来执行, 当然SCTP 也提供一种非正常(即中止)程序,中止程序的执行既可以根据SCTP 用户的请求来启动,也可以由SCTP 协议检查出差错来中止。

SCTP 不支持半打开状态(即一端可以在另一端结束后继续发送数据)。无论是哪 个端点执行了关闭程序,偶联的两端都应停止接受从SCTP 用户发来请求原语。

流内消息顺序递交

SCTP 提供数据报的顺序传递,顺序传递的数据报必须放在一个“流”中传递。流 是顺序传递的基石。

通过流,SCTP 将数据的确认和传输的有序递交分成两种不同机制。

当一个流被阻塞时,期望的下一个连续的SCTP 用户消息可以从另外的流上进行递交。

一条SCTP连接里面,可以区分多条不同的流(stream),不同的流之间的数据传输互不干扰。这样做理论上的好处是,如果其中某一条流由于丢包阻塞了,那只会影响到这一条流,其他的流并不会被阻塞。

img

在同一条stream里面,SCTP支持有序/无序两种传输方式,应用程序在调用sendmsg()的时候,需要指定用哪一条stream传输,以及指定这条要发送的消息是需要有序传输还是无序传输的。

如果在传输过程中丢包,则有序传递模式可能会在接收端被阻塞,而无序传输模式不会在接收端被阻塞,接收到的用户消息可以使用这种方式立即递交到 SCTP 用户,而不需要保证其接收顺序。

用户数据分段

SCTP 通过对传送通路上最大PMTU的检测, 实现在SCTP 层将超大用户数据分片打包,避免在IP层的多次分片、重组,可以减少IP层的数据负担。

在发送端,SCTP 可以对大的用户数据报进行分片以确保SCTP 数据报传递到低层时适合通路MTU(Maximum Transmission Unit)。

在接收端,SCTP 将分片重组为完整的用户数据报,然后传递给SCTP用户。

证实和避免拥塞

SCTP 在将数据(数据分片或未分片的用户数据报)发送给底层之前顺序地为之分配一个发送顺序号(TSN)。

TSN 和SSN(流顺序号)是相互独立的,TSN 用于保证传输的可靠性,SSN 用于保证流内消息的顺序传递。

TSN 和SSN 在功能上使可靠传递和顺序传递分开。接收端证实所有收到的 TSNs,即使其中有些尚未收到。

消息块绑定

如果长度很短的用户数据被带上很大一个 SCTP 消息头,其传递效率会很低,因此, SCTP 将几个用户数据绑定在一个SCTP 报文里面传输,以提高带宽的利用率。

image-20191120053445643

SCTP 分组由公共分组头和一个/多个信息块组成,信息块可以是用户数据,也 可以是SCTP 控制信息。

SCTP 用户能够可选地使用捆绑功能,决定是否将多个用户数据报捆绑在一个 SCTP 分组中。

为提高效率,拥塞/重发时,捆绑功能可能仍被执行,即使用户已经禁止捆绑。

Share

You may also like...

发表评论