Help us improve your experience.

Let us know what you think.

Do you have time for a two-minute survey?

 
 

SCTP 概述

流控制传输协议 (SCTP) 是一种传输层协议,可确保可靠的按顺序传输数据。SCTP 提供多宿主支持,其中连接的一个或两个端点可以包含多个 IP 地址。这样可以在冗余网络路径之间实现透明的故障转移。

了解流控制传输协议

流控制传输协议 (SCTP) 是互联网协议套件中强大的传输层协议,可与 UDP 和 TCP 一起运行。它旨在为各种互联网应用提供可靠的、面向连接的传输。SCTP 的主要功能包括:

  1. 多流协议: SCTP 支持每个端点的多个消息流,从而满足需要不同消息优先级和流中严格排序的应用程序。

  2. 用户数据碎片: 为了处理超出路径最大传输单位 (MTU) 的消息,SCTP 将数据分段为块,并用特定标志标记最后一个块。接收端在将完整消息传递到上层协议之前重新组装这些块。

  3. 块捆绑:

    SCTP 允许将来自多个消息的块捆绑到单个 SCTP 数据包中,从而促进高效的数据传输。接收器在将这些块传送到上层协议之前将其拆解。
  4. 数据包验证:

    SCTP 在其标头中包含验证标记,用于唯一标识关联会话。此标记有助于防止伪装攻击,并防止处理来自先前关联的过时 SCTP 数据包。
  5. 多宿主支持:

    SCTP 允许端点在关联设置期间指定本地传输地址列表,通过为每个目标地址建立路由来提高数据传输的高可用性。

此外,SCTP 在冗余网络路径之间提供透明的故障转移,使其成为需要可靠、顺序数据传输的应用程序的理想选择。它在 IP 等无连接数据包网络之上运行,并支持单个或多 IP 方案。

此外,SCTP还可以通过M3UA、M2UA或SUA等协议为3G移动网络传输信令消息。经过优化,可避免高流量期间的多线程基础设施问题,提高关联搜索率,并改进重传情况下的有限状态机 (FSM)。

SCTP 特别适用于需要监控和会话丢失检测的应用。其心跳机制可监控会话连接,确保可靠、安全的传输,在发生网络故障时以最小的端到端延迟和快速故障转移时间。

图 1:SCTP 4 向握手和 TCP 3 向握 SCTP 4-way Handshake and TCP 3-way Handshake

SCTP 服务

SCTP提供以下服务:

  • 聚合服务器访问协议 (ASAP)

  • 承载无关呼叫控制 (BICC)

  • 直接数据放置段块(DDP 段)

  • 直接数据放置流会话控制(DDP 流)

  • DTLS/SCTP 数据块中的直径 (Diameter-DTLS)

  • SCTP 数据块中的直径 (Diameter-SCTP)

  • DPNSS/DASS 2 对 IUA 协议 (DUA) 的扩展

  • 端点句柄冗余协议 (ENRP)

  • H.248 协议 (H248)

  • H.323 协议 (H323)

  • ISDN 用户适配层 (IUA)

  • MTP2 用户对等适配层 (M2PA)

  • MTP2 用户适配层 (M2UA)

  • MTP3 用户适配层 (M3UA)

  • 其他未指定配置的 SCTP 有效负载协议(其他)

  • Q.IPC

  • 保留

  • S1 应用协议 (S1AP)

  • 简单中间设备配置 (SIMCO)

  • 短链氯化石蜡用户适配层 (SUA)

  • 传输适配器层接口 (TALI)

  • V5.2 用户适配层 (V5UA)

  • X2 应用协议 (X2AP)

SCTP 限制和约束

SCTP 具有以下限制和约束:

  • IP 地址

    • 仅支持静态 IP NAT;传入的接口数据包(来自一端:客户端或服务器)必须属于同一区域。

  • 政策

    • 不支持动态策略。您必须为 SCTP 会话配置所有策略。

    • 删除策略时,将清除相关会话和关联。

    • 您可以配置一个策略以允许从所有客户端 IP 到所有服务器 IP 的 SCTP 流量,并配置另一个策略以允许从服务器 IP 到客户端 IP 的 SCTP 流量。如果一个策略具有 SCTP 配置文件,则反向策略需要相同的 SCTP 配置文件。

    • 如果为属于一个关联的每个会话配置不同的策略,则会有多个策略与一个关联相关,并且 SCTP 数据包管理(丢弃、速率限制等)使用附加到处理 SCTP 会话策略的配置文件。

    • 无法使用选项 application-protocol ignore 配置安全策略中用于允许 SCTP ALG 流量的应用程序。即使未配置 SCTP ALG 检查,此条件也适用。

  • SCTP 启用/禁用取决于是否配置了 SCTP 配置文件。

    • 如果未将配置文件附加到策略,则 SCTP 数据包将在不进行检查的情况下转发。

    • 如果将带有该 nat-only 选项的配置文件附加到策略,则只会对与策略匹配的 SCTP 数据包执行 NAT 转换。如果配置文件未设置选项 nat-only ,则会对与策略匹配的每个 SCTP 数据包执行 NAT 转换和 SCTP 检查。

    • 如果禁用 SCTP,则会删除所有关联,并根据策略传递或丢弃后续的 SCTP 数据包。

    • 如果启用 SCTP,则必须清除所有现有 SCTP 会话,否则将转发与旧会话匹配的流量,而无需 SCTP 模块进行任何检查。

      如果要再次启用 SCTP,将丢弃所有正在运行的 SCTP 通信,因为不存在关联。新的 SCTP 通信可以建立关联并执行检查。

      注意:

      重新启用 SCTP 时清除旧的 SCTP 会话;这样做将避免旧的 SCTP 会话对新的 SCTP 通信造成的任何影响。

    • 如果将 SCTP 配置文件添加到现有策略,则必须执行以下操作之一:清除相关会话或删除旧策略并创建新策略。

    • 如果更改 SCTP 配置文件中的超时值,则配置的握手和现有关联中的超时值将不会更改。

  • SCTP 速率限制

    • 速率限制配置中的任何更改都不会影响现有关联的后续流量。它将适用于新成立的协会。

    • 支持的协议十进制值为 0 到 63。此值包括 48 个 IANA 分配的协议和 16 个未分配的协议。

    • 一个配置文件中最多 80 个地址的速率限制。

    • 一个配置文件中的一个地址最多有 10 个协议的速率限制。

    • 支持的速率限制值为 1 到 12000。

  • SCTP 有效负载协议阻止

    • 协议阻止配置中的任何更改都会立即影响现有关联的后续流量。

    • 支持的协议十进制值为 0 到 63。此值包括 48 个 IANA 分配的协议和 16 个未分配的协议。

  • SCTP 端点还支持两个方向的 NAT-PT,从 IPv4 地址格式到 IPv6 地址格式,反之亦然。SCTP 模块不支持 IPv4 或 IPv6 混合多宿主以及 IPv4 或 IPv6 混合 NAT-PT。

  • 要使静态 NAT 正常工作,传入的接口数据包(来自一端:客户端或服务器端)必须属于同一区域。

  • 对于多宿主情况,仅支持 INIT 或 INIT_ACK 中的 IPv4 地址参数。

  • SCTP 仅支持静态 NAT。

  • 只有已建立的 SCTP 关联才会同步到对等会话。

  • SCTP 会话不会随关联一起删除;它们在 30 分钟后超时,这是默认值。超时值是可配置的,可以更改。

  • 如果 4 向握手过程未在一个节点上处理,而是在两个节点上处理(例如,在主动/主动模式下的两个节点上的两个会话),或者群集在 4 向握手完成之前处于故障转移状态,则不会成功建立关联。

  • 不支持将统一不中断服务的软件升级 (ISSU) 到早期 Junos OS 版本。

  • 检查 M3UA/SCCP 消息解析,但不检查 M3UA/SCCP 状态检查。

  • 仅支持 ITU-T 建议 Q.711-Q.714 (07/96) 标准。不支持 ANSI、ETSI、中国和其他标准。

  • 仅支持 RFC 4960。

  • VPN 会话关联不支持 GPRS 隧道协议 (GTP) 和流控制传输协议 (SCTP)。

SCTP 功能概述

以下是SCTP的重要功能:

  • 多宿主支持,其中连接的一个或两个终结点可以包含多个 IP 地址。这样可以在冗余网络路径之间实现透明的故障转移。

  • 在独立流中以块的形式传递数据消除了不必要的行头阻塞。

  • 路径选择和监控功能,用于选择主数据传输路径并测试传输路径的连接性。

  • 验证和确认机制可防止泛洪攻击,并提供重复或丢失数据块的通知。

  • 改进了适用于巨型以太网帧的错误检测。

了解中央点架构对 SCTP 的支持

流控制传输协议 (SCTP) 关联是两个 SCTP 终结点之间的连接。每个 SCTP 端点标识与标记的关联。在 SCTP 关联设置期间,两个 SCTP 端点交换自己的标记以接收数据包。在两个 SCTP 端点之间交换数据包期间,源地址和目标地址都可以在关联生命周期中更改。

SCTP 流会话利用连接标记在支持 SCTP ALG 的 SRX1500、SRX4100、SRX4200、SRX5400、SRX5600和SRX5800设备上的 SPU 之间更精细地分配 SCTP 流量。连接标记是从 SCTP 虚拟标记解码的。将为前三个数据包中的每一个创建一个单独的 SCTP 会话,即分别为 INIT、INIT-ACK 和 COOKIE-ECHO 创建一个会话。由于反向流量有自己的会话,因此会话无法再匹配现有的正向会话并自动通过。因此,与正向策略类似,需要显式策略来批准反向 SCTP 流量。在这种情况下,SCTP 流会话需要为基本连接建立双向策略配置。

SCTP 支持虚拟路由和转发 (VRF)

VRF(虚拟路由和转发)功能允许管理远程 IP 地址。SCTP客户端,在启动新的SCTP关联之前,它应该为路由表索引/VRF索引设置套接字选项,如果在VRF内部配置了SCTP服务器的出口接口,则不会建立其他明智的关联,因为SCTP客户端将使用默认/全局路由实例进行关联建立。在 SCTP 服务器端,如果未在侦听套接字上设置 VRF 索引套接字选项,则将接受在所有 VRF 上收到的关联请求,但如果在侦听套接字上设置 VRF 索引套接字选项,则只会接受来自该特定 VRF 的关联建立请求。

应用程序可以使用自定义标志设置套接字选项,以向 SCTP 提供路由表索引以处理基于 VRF 的 SCTP 关联,将关联放置在该特定关联中,或者让 SCTP 内核在 4 向握手过程中选择 VRF 进行关联,基于配置入口接口的 VRF。

通过 VRF 实例建立 SCTP 关联时,内核在使用 SCTP 中使用的现有 4 元组(源 IP、源端口、目标 IP、目标端口)查找唯一关联时,必须考虑一个附加参数,即唯一 VRF ID。

  • 通过 VRF 的入站 SCTP 数据包:

    当 SCTP 数据包到达入口接口时,将使用 5 元组(源 IP、源端口、目标 IP、目标端口和“接收数据包的 VRF ID”)执行查找,以确定内核中是否存在现有的 SCTP 关联。

  • 通过 VRF 的出站 SCTP 数据包:

    对于从内核发出的每个 SCTP 数据包,将使用 5 元组(源 IP、源端口、目标 IP、目标端口和“要发送数据包的 VRF ID”)从关联数据中获取相应的 VRF ID。

SCTP 一对多样式插座

SCTP 支持两种套接字样式: 1 对 1(与 TCP 相当)1 对多(允许在单个套接字上进行多个活动关联)。后者有助于同时与多个对等端点进行通信,使用关联标识符 (assoc-id) 来区分它们。

应用程序使用以下系统 API,通过 SCTP 1:1 或 1:N 样式套接字:

系统调用 1 对 1 样式套接字

  • 服务器角色: socket(), bind(), listen(), accept(), write()/read(), close()

  • 客户端角色: socket(), connect(), write()/read(), close()

系统需要 1 对多样式的套接字

  • 服务器角色: socket(), bind(), listen(), recvmsg(), sendmsg(), close()

  • 客户端角色: socket(), sendmsg(), recvmsg(), close()

SCTP 数据包结构概述

SCTP 数据包由以下部分组成:

图 2 说明了 SCTP 数据包的结构。

图 2:SCTP 数据包结构 SCTP Packet Structure

通用标头部分

所有 SCTP 数据包都需要一个通用标头部分。此部分占用数据包的前 12 个字节。 表 1 描述了公共标头部分中的字段:

表 1:通用标头字段

领域

描述

源端口号

标识发送端口。

目标端口号

标识接收端口。主机使用目标端口号将数据包路由到相应的目标或应用程序。

验证标签

将过时的数据包与以前的连接区分开来。这是在初始化期间创建的 32 位随机值。

校验

使用循环冗余校验 (CRC32) 算法检测数据传输过程中可能引入的错误。

数据区块部分

数据区块部分 — 此部分占用数据包的其余部分。 表 2 描述了数据块部分中的字段:

表 2:数据区块字段

领域

描述

区块类型

标识区块值字段的内容。这是 1 字节长。

区块标志

由 8 个标志位组成,其定义因块类型而异。默认值为零。这表示上层没有为数据指定应用程序标识符。

区块长度

指定区块的总长度(以字节为单位)。此字段的长度为 2 个字节。如果块没有形成 4 字节的倍数(即长度不是 4 的倍数),则会隐式填充块长度中不包含的零。

区块值

通用数据字段。

资源管理器 (RM) 在 SCTP 通信期间允许 8 个源 IP 地址和 8 个目标 IP 地址。

了解 SCTP 多宿主

流控制传输协议 (SCTP) 终结点可以是具有所有 IPv4 地址或所有 IPv6 地址的 多宿主 主机。 在图 3 中,端点 A 连接到具有两个 IPv4 地址的 SRX 系列防火墙,端点 B 连接到具有两个 IPv4 地址的 SRX 系列防火墙。因此,终结点 A 和终结点 B 可以使用四个不同的 IP 地址对设置关联,从而生成四个有效的通信路径。

图 3:具有两个 IPv4 端点 SCTP Multihoming with Two IPv4 Endpoints的 SCTP 多宿主

在图 4 中,端点 A 连接到具有两个 IPv6 地址的 SRX 系列防火墙,端点 B 连接到具有两个 IPv6 地址的 SRX 系列防火墙。因此,终结点 A 和终结点 B 可以使用四个不同的 IP 地址对设置关联,从而生成四个有效的通信路径。

图 4:具有两个 IPv6 端点 SCTP Multihoming with Two IPv6 Endpoints的 SCTP 多宿主

了解 SCTP 多块检测

流控制传输协议 (SCTP) 防火墙检查消息中的所有区块,然后根据策略允许或丢弃数据包。使用 set security gprs sctp multichunk-inspection enable 命令启用 SCTP 多区块检测以检查邮件中的所有区块。使用 or delete security gprs sctp multichunk-inspection enable set security gprs sctp multichunk-inspection disable 命令禁用 SCTP 多区块检测以仅检查第一个区块。

启用 SCTP 多区块检测后,SCTP 防火墙会检查邮件中的所有区块,并允许或丢弃数据包。在以下情况下,SCTP 防火墙会丢弃数据包:

  • SCTP 区块的布局不遵循 RFC 4960。

  • 控制区块无法通过 SCTP 有限状态机 (FSM) 的检查或健全性检查。

  • 由于 SCTP FSM 或健全性检查,不允许数据区块通过 SCTP 配置文件。

  • 由于协议阻止或速率限制,不允许数据块通过 SCTP 配置文件。SCTP 防火墙将此区块重置为空协议数据单元 (PDU),并继续检查下一个区块。数据区块根据以下规则设置为空 PDU:

    • 将空 PDU 值 0xFFFF 设置为使用命令时 set security gprs sctp nullpdu protocol ID-0xFFFF ,有效负载协议标识符值将替换为 0xFFFF ,并且不会修改用户数据字段。

    • 将空 PDU 值 0x0000 设置为使用命令时 set security gprs sctp nullpdu protocol ID-0x0000 ,有效负载协议标识符值将替换为 0x0000 ,用户数据字段的前四个字节将替换为零。

    如果数据包中的所有区块均为空 PDU,SCTP 防火墙将丢弃该数据包。

了解机箱群集中的 SCTP 行为

机箱群集 配置模式下,SCTP 配置和已建立的 SCTP 关联将与对等设备同步。SCTP 模块支持主动-主动和主动-被动模式。

每当在活动设备上创建或删除关联时,已建立的 SCTP 关联都会向对等方发送创建或删除消息。辅助设备在收到来自已建立的 SCTP 关联的消息时,会分别添加或删除关联。然后,SCTP 模块注册相应的回调函数以接收和处理此消息。两个关联之间没有连续的计时器同步。

当辅助设备加入集群或重启时,SCTP 模块将注册冷启动同步功能。调用 SCTP 冷启动函数以同时将所有 SCTP 关联与对等设备同步。

切换后,已建立的SCTP关联将继续运行,但正在建立的关联将丢失,需要重新启动建立过程。拆除过程中的关联也可能错过确认消息,并在防火墙中留下未建立的 SCTP 关联。当计时器过期(默认为 5 小时)时,由于关联中没有活动,这些关联将被清理。

  • 您应该为所需的 SCTP 会话配置所有策略。 例如,假设您有端点 A 和 B。端点 A 有一个与 x 个 IP(IP_a1、IP_a2 IP_a3)的 SCTP 关联...IP_ax)。端点 B 有一个 SCTP 关联,其中包含 y 个 IP(IP_b1、IP_b2 IP_b3...IP_by.)安全设备上的策略应允许双向所有可能的 x*y 路径。

  • 删除 SCTP 关联后,相关的 SCTP 会话仍然存在,并且会自行超时。