lol美服延迟高怎么解决,一招帮你快速解决( 二 )


RTO翻倍vs不翻倍(RTO超时重传):TCP超时计算是RTOx2 , 这样连续丢三次包就变成RTOx8了 , 十分恐怖 , 而KCP启动快速模式后不x2 , 只是x1.5(实验证明1.5这个值相对比较好) , 提高了传输速度 。
选择性重传 vs 全部重传:TCP丢包时会全部重传从丢的那个包开始以后的数据 , KCP是选择性重传 , 只重传真正丢失的数据包 。
快速重传:发送端发送了1,2,3,4,5几个包 , 然后收到远端的ACK: 1, 3, 4, 5 , 当收到ACK3时 , KCP知道2被跳过1次 , 收到ACK4时 , 知道2被跳过了2次 , 此时可以认为2号丢失 , 不用等超时 , 直接重传2号包 , 大大改善了丢包时的传输速度 。
延迟ACK vs 非延迟ACK:TCP为了充分利用带宽 , 延迟发送ACK(NODELAY都没用) , 这样超时计算会算出较大 RTT时间 , 延长了丢包时的判断过程 。KCP的ACK是否延迟发送可以调节 。
UNA vs ACK UNA:ARQ模型响应有两种 , UNA(此编号前所有包已收到 , 如TCP)和ACK(该编号包已收到) , 光用UNA将导致全部重传 , 光用ACK则丢失成本太高 , 以往协议都是二选其一 , 而 KCP协议中 , 除去单独的 ACK包外 , 所有包都有UNA信息 。
非退让流控:KCP正常模式同TCP一样使用公平退让法则 , 即发送窗口大小由:发送缓存大小、接收端剩余接收缓存大小、丢包退让及慢启动这四要素决定 。但传送及时性要求很高的小数据时 , 可选择通过配置跳过后两步 , 仅用前两项来控制发送频率 。以牺牲部分公平性及带宽利用率之代价 , 换取了开着BT都能流畅传输的效果 。
如果网络永远不卡 , 那 KCP/TCP 表现类似 , 但是网络本身就是不可靠的 , 丢包和抖动无法避免(否则还要各种可靠协议干嘛) 。在内网这种几乎理想的环境里直接比较 , 大家都差不多 , 但是放到公网上 , 放到3G/4G网络情况下 , 或者使用内网丢包模拟 , 差距就很明显了 。公网在高峰期有平均接近10%的丢包 , wifi/3g/4g下更糟糕 , 这些都会让传输变卡 。

推荐阅读