TCP Qos 问题
TCP的流量控制仅针对单条TCP连接,而在网络中UDP、ICMP等包并不遵循这个规则,TCP迫于流量控制,检测到端到端阻塞就会减小自己的窗口,然后被UDP等占据闲置出的带宽,导致饿死。
由于这个TCP在阻塞情况下迫于大环境无法保证传输质量,就有大批转而使用UDP协议加速的方式。
UDP 加速
kcp的设计是为了解决在网络拥堵情况下tcp协议的网络速度慢的问题。(包括BBR等,还有很多)一般使用udp作为下层传输协议。
KCP对TCP的一些细节进行了改良[1]
- RTO翻倍VS不翻倍
- 全部重传VS选择性重传
- 快速重传
- 非延迟ACK VS 延迟ACK
- ACK+UNA VS UNA
- 非退让流控
- KCP正常模式同TCP一样使用公平退让法则,即发送窗口大小由:发送缓存大小、接收 端剩余接收缓存大小、丢包退让及慢启动这四要素决定。但传送及时性要求很高的小 数据时,可选择通过配置跳过后两步,仅用前两项来控制发送频率。以牺牲部分公平 性及带宽利用率之代价,换取了开着BT都能流畅传输的效果。
RTT(round trip time) && RTO(Retransmission timeout)
RTT: 数据包往返时间 RTO: 超时重传时间
RTO重传间隔是指数增加的。丢包一次后,下一次重传RTO会从1,2,4,8……。叫做指数回避策略。(RTO下限200ms,写在协议里的,无法修改)
数据链路层ARQ与传输层ARQ区别
数据链路层的ARQ只能保证点到点之间传输的可靠性。
如A-B-C,数据链路层只能保证A-B不丢包,但是B会不会由于传输窗口满而丢弃包就无法保证,A-C之间传输的可靠就需要上层传输层协议来确认,这就叫做端到端的可靠性。