✦ 功能
SRT编码器两台设置Rendezvous模式的设备会共同协商,通过相同的UDP端口号建立一个SRT会话。
✦ 使用场景
两台设备所在的网络都有防火墙(或者路由器,功能等同),防火墙Outside接口是公网IP地址,但是没有防火墙的操作权限(即无法配置端口映射),如果防火墙设置了适当的工作模式,可通过Rendezvous模式建立SRT会话。
一旦完成SRT连接的建立,SRT源设备和SRT目标设备便开始交换控制信息,然后直接利用建立起来的SRT通道去传输数据。
✦ 示例
Rendezvous模式可以在两端防火墙都没有做端口转发规则时建立SRT连接,从而实现两点之间的视频传输。这时,需要在两端分别设置对方的出口公网IP以及相同的端口号,这样,两台设备将同时向对方的出口公网IP发送控制信息数据包,用来建立SRT连接。
某公司临时决定从长沙办事处将视频信号实时传输到深圳总部,来不及申请在防火墙中做端口转发规则,所以两端的设备都没办法通过对方公网IP的某个特定端口来直接找到对方。这时,就可以使用Rendezvous模式来建立SRT连接,我们需要将长沙的SRT设备(编码器)设置为Rendezvous模式,并写入深圳SRT设备的出口公网IP地址和一个没有被使用的UDP端口号,同时,再将深圳的SRT 设备(解码器)也设置为Rendezvous模式,并写入长沙SRT设备的出口公网IP地址和相同的UDP端口号,这样就可以建立起SRT连接了。
SRT编码器之Rendezvous模式详解_第1张图片

图:SRT源设备(编码器)和SRT目标设备(解码器)的网络关系

✦ 原理
在前面的示例场景中很轻松就完成了Rendezvous模式下的SRT连接,看似水到渠成,然而实际情况并不是这么简单,在这背后还隐藏着一些网络的相关知识,下面我们就来简单讨论一下SRT是如何使用Rendezvous模式穿过防火墙建立连接的。
当然,网络安全与防火墙是一门很深奥的专业网络知识,这里就不跟大家讨论深层次的内容了,只针对和SRT相关的知识做简单的分享。
首先,我们需要知道,在使用Rendezvous模式时,设备发出的控制信息数据包的源端口与目的端口都是一样的。在之前的例子中,编码器发出的控制信息数据包的源端口为12345,目标端口也是12345,同样的,解码器发出的控制信息数据包的源端口和目标端口也都是12345。换句话说,这“四个”端口号相同是Rendezvous模式穿越防火墙建立SRT连接的必要条件。
因此,在编解码器之间的防火墙就必须确保不转换数据包包头中的端口号。
SRT编码器之Rendezvous模式详解_第2张图片

图:Rendezvous模式下两端使用相同的端口号穿过防火墙建立SRT连接

现在市场上能够见到的防火墙,基本都是能够进行状态检测的状态防火墙(stateful firewall,现在由于这个功能过于普遍,也就不再有人特意提出这个概念了),它能够进行状态数据包检查或状态查看,实现连接追踪(connection tracking)的功能,而Rendezvous模式正是倚靠这个功能来创建一个贯穿两个防火墙的网络通道,并在其中进行数据传输。
防火墙在工作时,会根据正在传输的流量,创建一个连接追踪表(connection tracking table),并保持动态更新。
例如在上图中,在防火墙A中的连接追踪表会记录下源设备(编码器)的内网IP和端口号、NAT转换后的公网IP和端口号、以及访问的目标设备(解码器)防火墙的公网IP和端口,如下表:
SRT编码器之Rendezvous模式详解

这时,当对端发来数据包时,防火墙A的连接追踪表还会记录下另一条反向入站信息,如下表:
SRT编码器之Rendezvous模式详解

当反向的数据包到达防火墙A时,发送数据与接收数据相同的端口号会对防火墙A产生“欺骗”效果,让它认为收到的入站数据是对出站数据的回复消息,从而允许数据包通过防火墙,一直到这个传输会话断开,SRT连接也就这样建立起来了。
在大多数场景中,我们用的网络设备(防火墙和路由器)都是使用PAT(NAT重载)进行局域网IP到公网IP的地址转换。这时,网络设备在转换地址时都会改变源端口号,所以Rendezvous模式大多无法使用,不如直接用路由器做静态端口映射规则来的方便,这样就可以在这端使用Listener的模式,监听映射的端口,另一端使用Caller模式建立连接;相比之下,Rendezvous模式反而是很少被用到。