TCP Friendly Rate Control(TFRC),是网络环境下单播流的一种拥塞控制机制。对于TCP流,它是公平竞争带宽的。但是与TCP相比,吞吐量随时间的变化要小得多,也就是对带宽变化的响应比TCP慢,使其更适用于电话通信、流媒体等需要相对平滑发送速率的应用。因此,TFRC仅用于需要平滑吞吐量时,尤其是避免TCP响应单个丢包而将发送速率减半。推荐使用TCP发送尽可能多的数据包,或者不需要可靠机制,可以使用加法增加、乘法减小(AIMD)的拥塞控制方案,与TCP使用的参数类似。TFRC是为发送固定大小的数据包的应用程序而设计,以改变每秒发送包数来响应拥塞。但是,一些音频应用需要固定的发送时间间隔,改变发送数据包大小代替改变发送数据包数量,来响应网络拥塞。TFRC是基于接收方的机制,通过数据接收方来计算拥塞控制信息而不是发送方。
在介绍协议之前,先探讨几个相关问题,以便我们带着问题寻找答案。
1)如何计算TCP发送速率,由哪些参数构成;
2)什么是往返时间,如何计算;
3)根据什么信息来改变发送速率,如何改变发送速率;
4)数据包的序列号如何变化的,重传包序列号与丢失包序列号是否相同;
5)如何判定为丢包事件;
6)拥塞控制机制是否安全,会不会受到攻击;
1.协议机制
对于拥塞控制机制,TFRC直接使用允许发送速率的吞吐量方程作为丢包率和往返时间(RTT)的函数,为了TCP的公平竞争,TFRC使用吞吐量方程,它把TCP发送速率粗略地描述为丢包率、往返时间和数据包大小的函数。我们将丢失事件定义为来自数据窗口的一个或多个丢失/标记的数据包,其中标记数据包是指显示拥塞通知(ECN)的拥塞指示。拥塞控制机制工作原理如下:
① 接收方测量丢包率并反馈给发送方;
② 发送方根据反馈信息计算往返时间RTT;
③ 丢包率和RTT输入到吞吐量方程,给出合理的传输速率;
④ 发送方调整发送速率来匹配目标发送速率;
1.1 吞吐量方程
TCP吞吐量方程必须反映超时重传的行为,因为它在更高丢包率下控制TCP吞吐量。接下来介绍的是TCP的Reno精简版的吞吐量方程。我们更倾向于选择基于SACK的TCP吞吐量方程,虽然目前为止没有人推导出基于SACK的吞吐量方程,但是综合仿真与实验,两者之间差异很小。吞吐量方程如下:
s
X = --------------------------------------------------------------
R*sqrt(2*b*p/3) + (t_RTO * (3*sqrt(3*b*p/8) * p * (1+32*p^2)))
其中X为传输速率,单位是bytes/second;
s为数据包大小,单位是byte;
R为往返时间RTT,单位是second;
p为丢包率,范围在0~1之间;
t_RTO为重传定时器的时间,单