system: [SYSTEM]

user: 5. 基于RTP/RTCP拥塞控制机制 5.1. RTP/RTCP拥塞控制原理 RTCP是和RTP一起工作的控制协议，单独运行在低层协议上，由低层协议提供数据与控制包的复用。在RTP会话期间，每个会话参与者向所有其他参与者周期性地发送RTCP控制包 [ 5 ] 。RTCP的功能主要有以下四点： 1. 为应用程序提供会话质量或者广播性能质量的信息 每个RTCP信息包封装着发送端或接收端的统计报表。这些信息包括发送的信息包数目、丢失的信息包数目和信息包的抖动等情况，这些反馈信息反映了当前的网络状况，对发送端、接收端或者网络管理员都非常有用。 2. 确定RTP用户源 RTCP为每个RTP用户提供了一个全局唯一的称为规范名称(Canonical Name)的标志符CNAME，接收者使用它来追踪一个RTP进程的参加者，同时，当RTP需要进行音视频同步的时候，接收者就需要使用CNAME来关联同一发送者的音视频数据。 3. 控制RTCP传输间隔 由于每个对话成员定期发送RTCP信息包，随着参加者不断增加，RTCP信息包频繁发送将占用过多的网络资源，为了防止拥塞，必须限制RTCP信息包的流量，控制信息所占带宽一般不超过可用带宽的5%，因此需要调整RTCP包的发送速率。由于任意两个RTP终端之间都互发RTCP包，因此终端的总数很容易估计出来，应用程序根据参加者总数就可以适当调整RTCP包的发送速率。 4. 最小进程传输控制信息 这项功能使参加者可以自由进入或离开较为松散的会话进程，没有成员控制或参数协调。发送端报告SR含有不同媒体流间的同步信息，以及已经发送的数据报和字节的计数，接收端根据这些信息可以估计出实际的数据传输速率。另一方面，接收端会向所有已知的发送端发送接收端报告RR，该报告含有已接收数据报的最大序列号、丢失的数据报数目、延时抖动和时间戳等重要信息，发送端应用根据这些信息可以估计出往返时延，并且可以根据数据报丢失概率和时延抖动情况动态调整发送速率，以改善网络拥塞状况，或者根据网络状况平滑地调整应用程序的服务质量 [ 6 ] 。 下面以SR报告为例给出SR分组的主要内容，如图1。 从图1中可以看到，SR分组主要包括三部分内容：头部、发送端信息、接收报告块。包类型通过头部中的PT字段进行说明，除包类型代码外，SR与RR间唯一的差别是源报告包含有一个20字节发送者信息段。 5.2. 本文提出的网络拥塞控制方法 网络拥塞控制的一般过程为：1) 第一步是得到当前网络的性能参数，如网络时延、分组丢失率、传输速率、到达抖动等；2) 第二步是判断网络是否达到拥塞态，涉及网络参数阈值的配置问题；3) 第三步则是根据所处状态实施对应的控制策略。RTP视频流拥塞控制流程如图2所示。 在网络处于拥塞状态时，可以采用基于发送端速率控制和接收端会话控制策略。一方面是经计算处理后向数据源发送控制信息，动态调整数据发送速率，网络拥塞时降低发送速率，网络良好时则增大发送速率，这种策略需要数据源端进行配合方可有效；另一方面是利用访问控制工具iptables，借助其connlimit模块对udp会话数进行限制，或者根据视频流量分布直接限制某些IP的收发速率，由于系统是并联在原有网络中，因此需要将定制的iptables规则发送到与其连接的网关上进行间接控制。connlimit模块主要用来限制内网用户的网络使用，能够限制每个客户端IP的并发连接数，即每个IP同时连接到一个服务器的个数。UDP不同于TCP，其中没有SYN之类的连接标志，但iptables对此提供一种连接状态机制，能够指定并记住为发送或接收信息包所建立的连接的状态，并且定义了四种有效状态。 ESTABLISHED，INVALID，NEW，RELATED，其中ESTABLISHED指出该信息包属于已建立的连接，该连接一直用于发送和接收信息包并且完全有效；INVALID指出该信息包与任何已知的流或连接都不相关联，它可能包含错误的头或数据；NEW意味着该信息包已经或将启动新的连接；RELATED表示该信息包正在启动新连接，以及它与已建立的连接相关联信息。其参数和用法如图3所示。 5.2.1. 计算网络性能相关参数 SR源报告包和RR接收者报告包用于提供接收质量反馈，提供的有效信息如表1所示。 RR针对每个信源都提供信息包丢失数、已收信息包最大序列号、到达时抖动、接收最后一个SR的时间、接收最后一个SR的延迟等信息。SR不仅提供接收质量反馈信息(与RR相同)，而且提供SSRC标识符、NTP时间戳、RTP时间戳、发送包数以及发送字节数等 [ 6 ] 。 图1. 发送端报告-SR分组包 图2. RTP视频流拥塞控制流程 图3. 参数和用法 Table 1 The Feedback information of SR and RR qualit 包丢失数 最大序列号 到达抖动 NTP时间戳 RTP时间戳 发送包数 发送字节数 SR √ √ √ √ √ √ √ RR √ √ √ N/A N/A N/A N/A 表1. SR和RR质量反馈信息 本文提供三个参数来评估当前网络传输性能，分别是包丢失率、载荷平均传和达抖动。丢失包累计数给出间隔期间丢包的数量，而所收到扩展的最后一个序列号给出间隔期间希望发送的包数量，两者之比等于间隔期间包丢失百分比，计算过程如下 [ 7 ] ： 丢包率 = 包丢失累计数/期望发送的包数 丢失包累计数 = 期望发送的包数 − 收到的包数 期望发送的包数 = 最后一个序列 − 第一个序列 + 1 发送字节数是发送者从发送RTP数据包开始，直到产生SR包，传输的载荷字节总数，可用于估计载荷平均传输速率： 载荷平均传输速率 = 传输的载荷字节总数/传输载荷所用的时间 RTP视频业务传输过程中的抖动示意图如图4所示。 设Rec i 是包i到达时的RTP时间戳，Sent i 是包i发出时的RTP时间戳，则到达抖动的计算公式为： 图4. RTP传输抖动示意图 新到达抖动 = 旧到达抖动 + (瞬时抖动 − 旧到达抖动)/16 瞬时抖动= |(接收第i个数据包的时间戳 − 接收第i − 1个数据包的时间戳) − (发送第i个数据包的时间戳 − 发送第i − 1个数据包的时间戳)| 5.2.2. RTP视频流拥塞控制策略 可以对丢包率、载荷平均传输速率、到达抖动分别设置相应的阈值，然后借助这些阈值将网络状态分为轻载、正常、拥塞三种状态。设定丢包率阈值L1、L2，且0 < L1 < L2 < 1；载荷平均传输速率阈值V1、V2，且0 < V1 < V2；到达抖动阈值J1、J2，具体控制策略为： 当丢包率 < L1或载荷平均传输速率 < V1或到达抖动 < J1时，轻载状态，可以逐步增大传输数据，直到达到正常状态或达到数据源的最大发送能力； 当包丢包率 ≥ L2或载荷平均传输速率 < V2或到达抖动 < J2时，拥塞状态，必须迅速减小数据传输量，降低源端的发送速率；或减少视频会话数量，保证用户的最低需求，直到回到正常状态； 当L1 ≤ 丢包率 < L2或V1 ≤ 载荷平均传输速率 < V2或J1 ≤ 到达抖动 << J2时，正常状态，表示当前网络可以正常接收视频数据，网络性能良好。 为避免QoS振荡的影响，L1应取较低值，L2的取值标准是丢失的包对解码后的视频播放的影响是用户可接受的。这里取L1 = 2%，L2 = 4%。到达抖动比较均方根值RMS (Root Mean Square)更有意义，这里取J1 = 5.71 ps RMS、J2 = 50 ps RMS。由于不同环境的网络带宽各自的差异性，相应的载荷的平均传输速率也各有不同，因此，这里的两个阈值V1，V2由用户根据当前网络性能或者经验值自行设定。