1、RTSP协议学习
1.1 RTSP协议简介
RTSP(Real Time Streaming Protocol,实时流协议)是TCP/IP 协议体系中的一个应用层协议,该协议定义了一对多应用程序如何有效地通过 IP 网络传送多媒体数据。RTSP对流媒体提供了诸如暂停、快进等控制,而它本身并不传输数据,RTSP的作用相当于流媒体服务器的远程控制;媒体数据的传输可通过RTP/RTCP协议来完成。服务器端可以自行选择使用TCP或UDP来传输串流内容,不是特别强调时间同步,所以比较能容忍网络延迟。
1.2 RTSP协议与HTTP协议
区别:RTSP协议是有状态的,RTSP的命令需要知道现在正处于一个什么状态;也就是说RTSP的命令总是按照顺序来发送,某个命令总在另外一个命令之前要发送,RTSP不管处于什么状态都不会断掉连接。而HTTP协议则是无状态的,HTTP在发送一个命令以后,连接就会断开,且命令之间是没有依赖性。RTSP协议使用TCP的554端口,HTTP协议则是使用TCP的80端口。
联系:两者都用纯文本来发送消息,并且RTSP协议的语法及消息参数和HTTP协议类似。
1.3 RTSP协议与RTP(RTCP)协议
RTP(Real Time Transport Protocol,实时传输协议),提供时间标志、序列号以及其他能够保证在实时数据传输时处理时间的方法。RTP是基于UDP协议的,只是包裹内容信息。
RTCP(Real Time Transport Control Protocol,实时传输控制协议),是RTP的控制部分,用来保证服务质量和成员管理。RTP和RTCP是一起使用的。
RTSP(Real Time Streaming Protocol,实时流协议),RTSP具体数据传输交给RTP,提供对流的远程控制。RTSP的客户端连接服务器是通过SDP(Session Description Protocol,会话描述协议)传递信息。
1.4 RTSP协议常用方法
OPTIONS:客户端向服务器发起OPTIONS请求,用于获取服务器提供的可用方法;服务器的响应信息则包括其提供的可用方法。
DESCRIBE:客户端向服务器发起DESCRIBE请求,用于获取会话描述信息;服务器的响应信息则包括对此会话的描述信息。
SETUP:客户端向服务器发起SETUP请求,用于建立RTSP会话并确定传输模式;服务器的响应信息则包括对该会话的确认信息。
PLAY:客户端向服务器发起PLAY请求,告知服务器通过SETUP中指定的机制开始发送数据;服务器的响应信息则包括对该请求的确认信息。
TEARDOWN:客户端向服务器发起TEARDOWN请求,告知服务器终止媒体流传输并释放相关资源;服务器的响应信息则包括对该请求的确认信息。
1.5 RTSP协议交互过程
如图1-1所示,Client表示RTSP客户端、Server表示RTSP服务器,展示了RTSP消息的交互过程。
图1-1 RTSP消息交互过程
1.6 RTSP协议报文分析
第1步,客户端与服务器TCP三次握手建立连接。
第3步,客户端继续发送一个RTSP描述命令(DESCRIBE),询问服务器提供的媒体描述信息;服务器通过一个SDP描述来反馈流数量、媒体类型等信息。
第4步,客户端分析该SDP描述,为会话中的每一个流(trackID)发送一个RTSP建立命令(SETUP),通知服务器客户端用于接收媒体数据的传输方式。
第5步,流媒体连接建立完成,客户端发送一个播放命令(PLAY),服务器就开始在UDP上传输音频视频流(RTP)到客户
端。
第6步,在播放过程中客户端还可以向服务器发送命令来控制快进、快退和暂停(PAUSE)等。最后客户端发送一个终止命令(TEARDOWN)结束流媒体会话。
2.RTSP协议穿越防火墙
如图2-1所示,展示了RTSP协议穿越防火墙时常见的组网拓扑示意图,私网RTSP客户端经过防火墙的SNAT(源网络地址转换)后获取公网RTSP服务器上的视频资源。
2.1 场景一:正向安全策略+源NAT
该场景下,防火墙配置安全策略正向(Trust->Untrust)放通TCP-554端口、源NAT、不开启RTSP ALG,其数据转发过程如下:
(1)客户端向服务器发起TCP三次握手连接,建立RTSP 554端口控制连接;
(2)服务器向客户端发送UDP音频视频数据流,其目的IP地址与目的端口号为防火墙源NAT转换后的公网IP地址和端口号;
(3)防火墙未开启RTSP ALG,无法感知TCP控制连接协商的UDP数据端口,安全策略阻断该UDP数据流,UDP数据传输失败;
(4)服务器没有收到客户端返回的确认包,将控制连接TEARDOWN后重新开始协商控制连接,连接建立后使用TCP传输音频视频流。
2.2 场景二:正向安全策略+源NAT+RTSP ALG
该场景下,防火墙配置安全策略正向(Trust->Untrust)放通TCP-554端口、源NAT、开启RTSP ALG,其数据转发过程如下:
(1)客户端向服务器发起TCP三次握手连接,建立RTSP 554端口控制连接;
(2)防火墙开启RTSP ALG,将记录NAT会话,自动添加放通TCP控制连接协商的UDP数据端口的策略 ;
(3)服务器向客户端发送UDP音频视频数据流,其目的IP地址与目的端口号为防火墙源NAT转换后的公网IP地址和端口号;
(4)防火墙根据控制连接的NAT会话将上述UDP数据流的目的IP地址及端口还原为私网IP地址及端口,安全策略放通,UDP数据传输成功。
2.3 场景三:双向安全策略+源NAT
该场景下,防火墙配置安全策略双向(Trust<->Untrust)全通、源NAT、不开启RTSP ALG,其数据转发过程如下:
(1)客户端向服务器发起TCP三次握手连接,建立RTSP 554端口控制连接;
(2)服务器向客户端发送UDP音频视频数据流,其目的IP地址与目的端口号为防火墙源NAT转换后的公网IP地址和端口号;
(3)防火墙未开启RTSP ALG,不会根据控制连接的NAT会话将上述UDP数据流的目的IP地址及端口还原为私网IP地址及端口,从而数据无法到达客户端,UDP数据传输失败;
(4)服务器没有收到客户端返回的确认包,将控制连接TEARDOWN后重新开始协商控制连接,连接建立后使用TCP传输音频视频流。
2.4 场景四:双向安全策略+源NAT+RTSP ALG
该场景下,防火墙配置安全策略双向(Trust<->Untrust)全通、源NAT、开启RTSP ALG,其数据转发过程如下:
(1)客户端向服务器发起TCP三次握手连接,建立RTSP 554端口控制连接;
(2)防火墙开启RTSP ALG,将记录NAT会话,自动添加放通TCP控制连接协商的UDP数据端口的策略 ;
(3)服务器向客户端发送UDP音频视频数据流,其目的IP地址与目的端口号为防火墙源NAT转换后的公网IP地址和端口号;
(4)防火墙根据控制连接的NAT会话将上述UDP数据流的目的IP地址及端口还原为私网IP地址及端口,安全策略放通,UDP数据传输成功。
以上和大家分享了RTSP穿越防火墙源NAT的场景,另有对目的NAT场景感兴趣的小伙伴也可继续深入交流。