RTSP ALG
实时流协议 (RTSP) 通过音频和视频等实时属性控制数据传输。介质可以在同一 RTSP 控制流上传输。这是一种基于 HTTP 文本的协议,但是客户端和服务器维护会话信息。使用 SETUP 消息建立会话,然后使用"终止"消息终止。在设置和设置响应中协商传输(介质协议、地址和端口号)。
对有状态防火墙和NAT服务的支持要求为 TCP 端口 554 配置 RTSP ALG。ALG 将监控控制连接,为媒体 (RTP/RTSP) 流动态打开流,并执行NAT和端口重写。
了解 RTSP ALG
概述
RTSP(实时流协议)应用层协议,用于控制具有实时属性的数据传输。它在语法和操作方面与 HTTP/1.1 类似。与 SIP 和 H.323 不同,RTSP 的目的是通过网络访问现有媒体文件并控制媒体的回放。典型的通信是在客户端(例如运行 RealPlayer)和流媒体服务器之间通信。命令包括从远程服务器暂停并播放媒体文件的功能。
RTSP 是媒体客户端与媒体服务器之间的一种控制通道协议。数据通道使用不同的协议,通常是实时传输协议 (RTP) 或 RTP 控制协议 (RTCP)。
在 RTSP 标准模式下,当通过 UDP 使用 RTP 传输媒体数据时,客户端会与 RTSP 服务器建立三个网络通道。
RTSP 在 TCP 上运行。RTP 和 RTCP 在 UDP 上运行。RTP 和 RTCP 数据包的端口由客户端和服务器使用 RTSP 动态协商。由于 RTP 和 RTCP 端口是动态的,因此静态策略不允许这些端口。将 RTSP ALG 引入防火墙的主要目的根据客户端/服务器协商的结果创建动态策略(针孔),以便 RTP 和 RTCP 流量可以传递。
当客户端和服务器位于不同的领域时,他们可能无法确定如何路由到对等方提供的 RTP 或 RTCP 提供的地址。在这种情况下,ALG 需要参与为 RTP 或 RTCP 提供地址进行转换,并按有效负载修改。
建立连接后,RTSP ALG 将监控在客户端和服务器之间交换的消息,跟踪对话框的状态更改,并返回对话框完成或失败后为支持 RTSP 对话框而获取的所有资源。
RTSP 模式
标准模式
在 RTSP 标准模式下,当通过 UDP 使用 RTP 传输媒体数据时,客户端会与 RTSP 服务器设置三个网络通道。
全双工 TCP 连接用于控制和协商。全双工 UDP 通道用于使用 RTP 数据包格式的媒体数据交付。在大多数情况下,RTP 从服务器启动。称为 RTCP 的全双工 UDP 通道用于向客户端提供同步信息,以及向服务器提供数据包丢失信息。
图 1 显示了 RTSP ALG 标准模式。

交错模式
在 RTSP 交错模式下,可通过 TCP 上 RTP 或 RDT 将媒体数据转换为数据包。在这种情况下,一个全双工 TCP 连接同时用于从 RTSP 服务器到客户端的控制和媒体数据交付。数据流与 RTSP 控制流交织。
图 2 显示了 RTSP ALG 交错模式。

了解 RTSP ALG 消息
RTSP 消息格式
RTSP 基于文本,并使用 UTF-8 编码中的 ISO 10646 字符集。行由 CRLF 终止,空行是消息和正文的分隔符。
第一行称为开始行。对于从客户端到服务器的请求消息,开始行表示 RTSP 方法。对于从服务器到客户端的响应消息,开始行表示 RTSP 状态代码作为方法的回复。状态代码元素是一个 3 位数的整数结果代码。
RTSP 方法
一个事务处理期间有九种类型的方法。
OPTION—表示请求 URL 识别的请求/响应链上可用的通信选项的信息请求。此方法允许客户端确定与资源或服务器功能相关联的选项、要求或要求,而无需暗示资源操作或发起资源检索。
DESCRIBE—检索通过服务器中的请求 URL 标识的演示文稿或媒体对象的说明。此方法可以使用"接受"标头来指定客户解释的说明格式。
ANNOUNCE—从客户端发送至服务器的请求,此方法将通过请求 URL 标识的演示或媒体对象说明发布至服务器。当请求从服务器发送至客户端时,此方法将实时更新会话说明。
SETUP—请求 URI 并指定要用于流式媒体的传输机制。
PLAY—通知服务器使用设置中指定的机制开始发送数据。
PAUSE—请求暂时中断流交付。
TEARDOWN— 停止给定 URI 的流交付,释放与其关联的资源。
GET_PARAMETER—检索 URI 中指定的演示文稿或流参数的值。
SET_PARAMETER—设置 URI 指定的演示文稿或流的参数值。
RTSP 状态代码
状态代码的第一位数定义了响应类。
1**: 信息 - 请求接收,连续流程。
2**:成功
3**: 重定向 - 必须执行进一步操作才能完成请求。
4**: 客户端错误 - 请求包含语法错误或无法执行。
5**: 服务器错误 - 服务器未满足明显有效的请求。
RTSP 表头
RTSP 报头由以下字段组成:
CSeq—指定 RTSP 请求响应对的序列号。对于包含给定序列号的每一个 RTSP 请求,都有一个同等编号的响应。
Content-Length— 包含方法内容的长度,即,在后一个报头的双 CRLF 之后。
TRANSPORT— 指示要使用哪个传输协议,并配置其参数。
SESSION—识别由媒体服务器在设置响应中启动的 RTSP 会话,在演示 URL 上以 TEARDOWN 结束。
了解 RTSP ALG 对话与NAT
此主题提供典型的 RTSP ALG 对话的详细信息。
通常,RTP 和 RTCP 数据包为双向数据包,这意味着客户端或服务器可发起 RTP 或 RTCP 会话。
图 3 描述了标准 RTSP 对话中的数据包捕获示例。

RTSP ALG 在标准的 RTSP 对话中对 RTSP 示例数据包捕获执行以下操作:
监控设置和 200 OK 消息。
接收协商的端口(此示例中为 6543 和 8765)
为服务器到客户端的 UDP 媒体数据打开一个针孔。
在需要时,接收有效负载中的 IP 地址并NAT地址。
表 1 说明了 RTSP 有效负载 IP NAT。
表 1:RTSP有效负载 IP NAT 转发(C->S)
反向(S->C)
针孔
有效负载 IP 转换
有效负载端口转换
无NAT
A/4321->B/554
A/4321<-B/554
B/9876->A/5678
A/5678->B/9876
N/A
N/A
源NAT (IPvx)
A/4321->B/554
A'/P'<-B/554
B/9876->A'/P'
A/5678->B/9876
N/A (*)
5678<->P"
目标NAT (IPvx)
A/4321->B'/554
A/4321<-B/554
B/9876->A/5678
A/5678->B'/9876
B' -> B (**)
N/A
NAT64
A/4321->B"/554
A'/Q'<-B/554
B/9876->A'/Q''
A/5678->B"/9876
B'(IPv6)->B (IPv4)
5678<->Q"。
NAT46
A/4321->B''/554
A''/R'<-B/554
B/9876->A"/R"
A/5678->B''/9876
B''(IPv4)->B (IPv6)
5678<->R"
在 表 1中,使用以下字母和符号:
A-RTSP 客户端 IP 地址
A'—RTSP 客户端的转换 IPv4 或 IPv6 地址
A'-转换的 IPv4 地址
A''-转换的 IPv6 地址
B-RTSP 服务器 IP 地址
B'—目标地址之前的 RTSP 服务器 IP NAT
B'—IPv6 领域的 RTSP 服务器 IP 地址
B''— IPv4 领域的 RTSP 服务器 IP 地址
P'—RTSP 客户端的转换端口(从 4321 转换)
RTSP 客户端的 P''—转换端口(从 5678 中的消息有效负载转换)
Q'—RTSP 客户端的 Q'—转换(IPv6 至 IPv4)端口(从 4321 转换)
Q'—RTSP 客户端的 Q'—转换(IPv6 至 IPv4)端口(从 5678 以消息有效负载转换)
R'—RTSP 客户端的 R'—转换(IPv4 至 IPv6)端口(从 4321 转换)
R'-Translated(IPv4 至 IPv6)RTSP 客户端的端口(从 5678 中的消息有效负载转换)
(*)—RTSP 服务器 IP 地址 B 显示在有效负载消息中;无需转换
(**)—IP 地址 B' 显示在客户端到服务器的有效负载消息中;需要转换为 B
示例:配置 RTSP ALG
此示例展示如何配置 RTSP ALG,以通过 RTSP 流量,NAT设备上的瞻博网络流量。
要求
为源设备池中的所有 IP 地址配置NAT ARP。
启用 RTSP ALG。
了解 RTSP ALG 的基本概念。请参阅 了解 RTSP ALG。
概述
此示例将 RTSP ALG 配置为监控并允许 RTSP 流量在位于设备两侧的客户端和服务器瞻博网络传输。
配置
启用 RTSP ALG
CLI快速配置
要快速配置示例的此部分,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以匹配网络配置,将命令复制并粘贴到 层次结构级别的 CLI 中,然后从配置模式进入 。 [edit]
commit
要为源设备池内的所有 IP 地址配置代理 ARP NAT并启用 RTSP ALG:
set security nat proxy-arp interface <interface-name> address 10.10.10.1/32 to 10.10.10.10/32 set security alg rtsp
从 commit
配置模式进入。
配置NAT源池和规则集以及策略
CLI快速配置
要快速配置示例的此部分,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以匹配网络配置,将命令复制并粘贴到 层次结构级别的 CLI 中,然后从配置模式进入 。 [edit]
commit
set security nat source pool pool1 address 10.10.10.1/32 to 10.10.10.10/32 set security zones security-zone green address-book address sa1 1.1.1.0/24 set security zones security-zone red address-book address da1 2.2.2.0/24 set security nat source rule-set rs1 from zone green set security nat source rule-set rs1 to zone red set security nat source rule-set rs1 rule r1 match source-address 1.1.1.0/24 set security nat source rule-set rs1 rule r1 match destination-address 2.2.2.0/24 set security nat source rule-set rs1 rule r1 then source-nat pool pool1
set security policy from-zone green to-zone red policy pol1 match destination-address da1 set security policy from-zone green to-zone red policy pol1 match source-address sa1 set security policy from-zone green to-zone red policy pol1 match application junos-rtsp set security policy from-zone green to-zone red policy pol1 then permit
从 commit
配置模式进入。
如果您不确定 RTSP 客户端和服务器 IP 地址,可以将"da1"和"sa1"替换为"any"。
逐步过程
以下示例要求您在配置层次结构中导航各个级别。有关如何操作的说明,请参阅 CLI用户指南 中的 在配置模式下CLI编辑器 。
要配置源NAT池:
创建一NAT源池。
[edit security] user@host# set nat source pool pool1 address 10.10.10.1/32 to 10.10.10.10/32
配置安全区域地址簿条目。
[edit security zones security-zone] user@host# set green address-book address sa1 1.1.1.0/24 user@host# set red address-book address da1 2.2.2.0/24
创建一NAT源规则集。
[edit security nat source rule-set rs1] user@host# set from zone green user@host# set to zone red user@host# set rule r1 match source-address 1.1.1.0/24 user@host# set rule r1 match destination-address 2.2.2.0/24 user@host# set rule r1 then source-nat pool pool1
配置策略。
[edit security policies from-zone green to-zone red policy pol1] user@host# set match source-address sa1 user@host# set match destination-address da1 user@host# set match application junos-rtsp user@host# set then permit
结果
在配置模式下,输入 和 命令以确认 show security nat
您的 show security policies
配置。如果输出未显示预期的配置,请重复此示例中的配置说明进行更正。
[edit ] user@host# show security nat source { pool pool1 { address { 10.10.10.1/32 to 10.10.10.10/32; } } rule-set rs1 { from zone green; to zone red; rule r1 { match { source-address 1.1.1.0/24; destination-address 2.2.2.0/24; } then { source-nat { pool { pool1; } } } } }
[edit] user@host# show security policies from-zone green to-zone red {policy pol1 { policy pol1 { match { source-address sa1; destination-address da1; application [junos-rtsp]; } then { permit; } } } default-policy { permit-all; }
如果完成设备配置,请从配置 commit
模式输入 。
配置 RTSP ALG 追踪选项
CLI快速配置
要快速配置此示例,请复制以下命令,将其粘贴到文本文件中,删除所有换行符,更改详细信息,以匹配网络配置,将命令复制并粘贴到 层次结构级别的 CLI 中,然后从配置模式进入 。 [edit]
commit
set security alg rtsp traceoptions flag all set security alg traceoptions file trace set security alg traceoptions file size 1g set security alg traceoptions level verbose
逐步过程
要配置 RTSP ALG 追踪选项,
启用 RTSP ALG 追踪选项。
[edit security alg] user@host# set rtsp traceoptions flag all
配置文件名以从追踪操作接收输出。
[edit security alg] user@host# set traceoptions file trace
指定最大追踪文件大小。
[edit security alg] user@host# set traceoptions file size 1g
指定追踪输出级别。
[edit security alg] user@host# set traceoptions level verbose
结果
在配置模式下,输入 命令以确认 show security alg
您的配置。如果输出未显示预期的配置,请重复此示例中的配置说明进行更正。
[edit] user@host# show security alg traceoptions { file trace size 1g; level verbose; } rtsp traceoptions flag all;
如果完成设备配置,请从配置 commit
模式输入 。
验证
确认配置工作正常。
验证 RTSP ALG
目的
验证 RTSP ALG 是否已启用。
行动
在操作模式下,输入 show security alg status
命令。
user@host> show security alg status DNS : Enabled FTP : Enabled H323 : Enabled RTSP : Enabled
意义
输出显示 RTSP ALG 状态,如下所示:
启用 — 显示已启用 RTSP ALG。
禁用 - 显示 RTSP ALG 已禁用。
验证 RTSP ALG 控制会话
目的
验证是否创建了控制会话以及创建了所有 RTSP 控制和数据会话。
行动
在操作模式下,输入 show security flow session
命令。
user@host>show security flow session Flow Sessions on FPC5 PIC0: Session ID: 100004087, Policy name: dns-alg/4, Timeout: 1798, Valid Resource information : RTSP ALG, 1, 0 In: 1.1.0.100/59889 --> 1.1.0.202/554;tcp, If: ge-0/0/1.0, Pkts: 28, Bytes: 7618 Out: 1.1.0.202/554 --> 1.1.0.100/59889;tcp, If: ge-0/0/2.0, Pkts: 27, Bytes: 24304 Session ID: 100004088, Policy name: dns-alg/4, Timeout: 120, Valid Resource information : RTSP ALG, 1, 1 In: 1.1.0.202/5004 --> 1.1.0.100/62092;udp, If: ge-0/0/2.0, Pkts: 19, Bytes: 17013 Out: 1.1.0.100/62092 --> 1.1.0.202/5004;udp, If: ge-0/0/1.0, Pkts: 0, Bytes: 0 Session ID: 100004089, Policy name: dns-alg/4, Timeout: 120, Valid Resource information : RTSP ALG, 1, 4 In: 1.1.0.202/5004 --> 1.1.0.100/62094;udp, If: ge-0/0/2.0, Pkts: 433, Bytes: 346183 Out: 1.1.0.100/62094 --> 1.1.0.202/5004;udp, If: ge-0/0/1.0, Pkts: 0, Bytes: 0 Session ID: 100004090, Policy name: dns-alg/4, Timeout: 120, Valid Resource information : RTSP ALG, 1, 3 In: 1.1.0.100/62093 --> 1.1.0.202/5005;udp, If: ge-0/0/1.0, Pkts: 2, Bytes: 260 Out: 1.1.0.202/5005 --> 1.1.0.100/62093;udp, If: ge-0/0/2.0, Pkts: 0, Bytes: 0 Total sessions: 4
意义
Session ID—标识会话的编号。使用此 ID 获取有关会话详细信息,例如策略名称或输入和退出的数据包数。
Policy name—允许流量的策略名称。
In—传入流(源和目标 IP 地址,以及各自的源端口号和目标端口号,会话为 TCP,此会话的源接口为 ge-0/0/1.0)。
Out—反向流(源和目标 IP 地址及其相应的源端口号和目标端口号,会话为 TCP,此会话的目标接口为 fe-0/0/2.0)。
验证 RTSP ALG 流门信息
目的
验证流门是否为 TCP 数据通道连接打开。
行动
在操作模式下,输入 show security flow gate
命令。
user@host>show security flow gate Flow Gates on FPC5 PIC0: Hole: 1.1.0.202-1.1.0.202/5005-5005->1.1.0.100-1.1.0.100/62093-62093 Translated: 0.0.0.0/0->0.0.0.0/0 Protocol: udp Application: RTSP ALG/11 Age: 32 seconds Flags: 0x0080 Zone: untrust Reference count: 1 Resource: 4-1-2 Hole: 1.1.0.100-1.1.0.100/62093-62093->1.1.0.202-1.1.0.202/5005-5005 Translated: 0.0.0.0/0->0.0.0.0/0 Protocol: udp Application: RTSP ALG/11 Age: 32 seconds Flags: 0x0080 Zone: trust Reference count: 1 Resource: 4-1-3 Hole: 1.1.0.202-1.1.0.202/5004-5004->1.1.0.100-1.1.0.100/62094-62094 Translated: 0.0.0.0/0->0.0.0.0/0 Protocol: udp Application: RTSP ALG/11 Age: 32 seconds Flags: 0x0080 Zone: untrust Reference count: 1 Resource: 4-1-4 Hole: 1.1.0.100-1.1.0.100/62094-62094->1.1.0.202-1.1.0.202/5004-5004 Translated: 0.0.0.0/0->0.0.0.0/0 Protocol: udp Application: RTSP ALG/11 Age: 32 seconds Flags: 0x0080 Zone: trust Reference count: 1 Resource: 4-1-5 Valid gates: 4 Pending gates: 0 Invalidated gates: 0 Gates in other states: 0 Total gates: 4
意义
示例输出显示,流门为 TCP 数据通道连接打开。
验证 RTSP 资源管理器组
目的
验证 RTSP ALG 使用的资源管理器组和活动组总数。
行动
在操作模式下,输入 show security resource-manager group active
命令。
user@host>show security resource-manager group active Group ID 1: Application - RTSP ALG Total groups 19763, active groups 1
意义
示例输出显示 RTSP ALG 使用的资源管理器组和活动组总数。
验证 RTSP 资源信息
目的
验证 RTSP ALG 使用的资源和活动资源总数。
行动
在操作模式下,输入 show security resource-manager resource active
命令。
user@host>show security resource-manager resource active Resource ID 2: Group ID - 1, Application - RTSP ALG Resource ID 1: Group ID - 1, Application - RTSP ALG Total Resources 93286, active resources 2
意义
示例输出显示 RTSP ALG 使用的资源和活动资源总数。