SCTP 概述
流控制传输协议 (SCTP) 是一种传输层协议,可确保可靠的按顺序传输数据。SCTP 提供多宿主支持,其中连接的一个或两个端点可以包含多个 IP 地址。这样可以在冗余网络路径之间实现透明的故障转移。
了解流控制传输协议
流控制传输协议 (SCTP) 是互联网协议套件中强大的传输层协议,可与 UDP 和 TCP 一起运行。它旨在为各种互联网应用提供可靠的、面向连接的传输。SCTP 的主要功能包括:
多流协议: SCTP 支持每个端点的多个消息流,从而满足需要不同消息优先级和流中严格排序的应用程序。
用户数据碎片: 为了处理超出路径最大传输单位 (MTU) 的消息,SCTP 将数据分段为块,并用特定标志标记最后一个块。接收端在将完整消息传递到上层协议之前重新组装这些块。
块捆绑:
SCTP 允许将来自多个消息的块捆绑到单个 SCTP 数据包中,从而促进高效的数据传输。接收器在将这些块传送到上层协议之前将其拆解。数据包验证:
SCTP 在其标头中包含验证标记,用于唯一标识关联会话。此标记有助于防止伪装攻击,并防止处理来自先前关联的过时 SCTP 数据包。多宿主支持:
SCTP 允许端点在关联设置期间指定本地传输地址列表,通过为每个目标地址建立路由来提高数据传输的高可用性。
此外,SCTP 在冗余网络路径之间提供透明的故障转移,使其成为需要可靠、顺序数据传输的应用程序的理想选择。它在 IP 等无连接数据包网络之上运行,并支持单个或多 IP 方案。
此外,SCTP还可以通过M3UA、M2UA或SUA等协议为3G移动网络传输信令消息。经过优化,可避免高流量期间的多线程基础设施问题,提高关联搜索率,并改进重传情况下的有限状态机 (FSM)。
SCTP 特别适用于需要监控和会话丢失检测的应用。其心跳机制可监控会话连接,确保可靠、安全的传输,在发生网络故障时以最小的端到端延迟和快速故障转移时间。
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 数据包的结构。
通用标头部分
所有 SCTP 数据包都需要一个通用标头部分。此部分占用数据包的前 12 个字节。 表 1 描述了公共标头部分中的字段:
领域 |
描述 |
---|---|
源端口号 |
标识发送端口。 |
目标端口号 |
标识接收端口。主机使用目标端口号将数据包路由到相应的目标或应用程序。 |
验证标签 |
将过时的数据包与以前的连接区分开来。这是在初始化期间创建的 32 位随机值。 |
校验 |
使用循环冗余校验 (CRC32) 算法检测数据传输过程中可能引入的错误。 |
数据区块部分
数据区块部分 — 此部分占用数据包的其余部分。 表 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 地址对设置关联,从而生成四个有效的通信路径。
在图 4 中,端点 A 连接到具有两个 IPv6 地址的 SRX 系列防火墙,端点 B 连接到具有两个 IPv6 地址的 SRX 系列防火墙。因此,终结点 A 和终结点 B 可以使用四个不同的 IP 地址对设置关联,从而生成四个有效的通信路径。
了解 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 会话仍然存在,并且会自行超时。