后端技术_UDP可靠传输QUIC(施工...)
最近更新:2024-09-23
|
字数总计:1.1k
|
阅读估时:3分钟
|
阅读量:次
- 可靠性传输
- ACK、重传机制——ARQ协议
- 即停等式
- 回退n帧
- 选择性重传
- RTT与RTO对重传策略机制影响
- 流量控制
- 拥塞控制
- KCP协议
- UDP可靠传输——KCP协议优势
- KCP协议设计
- KCP发送数据过程
- KCP接收数据过程
- KCP_ChatRoom分析
- 参考及巩固(练习)
- QUIC
可靠性传输
- ACK机制
- 重传机制 重传策略
- 序号机制
- 重排机制
- 窗口机制 流量控制
ACK、重传机制——ARQ协议
- ARQ协议(Automatic Repeat-reQuest,即自动重传请求)
- 三种模式:即停等式、回退n帧、选择性重传
即停等式
- A->B 发送0
- B->A ack0
- A->B 发送1
- B->A ack1
- 发送数据后,直接停止发送下一个数据,直到收到对方的上一个ack,或者超时重新传上一个数据
- 缺陷:较长的等待时间导致低的数据传输速度
回退n帧
- A->B 1
- A->B 2
- B->A ack1
- B->A ack2
- A->B 3
- A->B 4
- A->B 5
- A->B 6
- A检测到超时没有收到3的ack,按序重传3~6包
- 发送方连续发送n个包,其中有一个i包超时没有收到ack,那么该i包及后所有的包都重传
选择性重传
- 在回退n帧的策略基础上,检测到i包,只重传i包,后续收到确认的包无需重传
RTT与RTO对重传策略机制影响
- RTO,重传超时时间
- RTT,往返时延,即发送数据及确认包收到总共的时间
- RTO不能比RTT设置的还小, RTO > RTT
- 如何获得RTT?:发送端发送包携带时间戳,ACK将该时间戳携带回来,ACK收到时即可以用当前时间戳-携带的时间戳得到RTT
流量控制

- 窗口通知策略,当ack,win=0时停止发送数据
- 定时发送窗口探测包,win>0时启动继续发送数据
拥塞控制
- 明确两个窗口:接收窗口与发送窗口
- 流量控制通过检测接收窗口的情况来实现,而拥塞控制通过检测发送窗口的情况来实现
- 拥塞控制和流量控制虽然采取的动作很相似,但拥塞控制与网络的拥堵情况相关联,而流量控制与接收方的缓存状态相关联。
KCP协议
UDP可靠传输——KCP协议优势
- TCP超时计算是RTOx2,那么连续丢包三次就变成RTOx3,KCP可以自由设置RTT时间,提高传输速度
- TCP丢包时选择回退n帧策略,KCP可以实现选择重传
- 快速重传机制:忽略RTO设置直接重传,例如:在发送端设置fastresend=2,发送1,2,3,4,5包后,收到ACK:1,3,4,5,KCP立马知道2包被跳过了2次,那么认为2包丢失,直接重传2号包,大大改善了丢包的传输速度。
- 非延迟ACK,TCP为了充分利用带宽会延迟发送ACK,这样RTT较大,KCP可以调节是否延迟发送ACK。
- ARQ有UNA与ACK两种相应模型,UNA表示此编号前的所有包都收到(TCP),ACK表示该编号收到,UNA会导致全部重传,ACK则丢失成本高,KCP协议除去单独的ACK包,所有包都有UNA。
- 非退让流量控制,KCP正常模式同TCP一样使用公平退让法则,即发送窗口大小由: 发送缓存大小、接收
端剩余接收缓存大小、丢包退让及慢启动这四要素决定。但传送及时性要求很高的小数据时,可选择通过配置跳过后两步,仅用前两项来控制发送频率。以牺牲部分公平性及带宽利用率之代价,换取了开着BT都能流畅传输的效果。
- 总结:以10%-20%带宽浪费的代价换取比TCP快30%-40%的速度
KCP协议设计
KCP发送数据过程
KCP接收数据过程
KCP_ChatRoom分析
参考及巩固(练习)
- KCP优秀博文选集
- kcp源码
- kcp_server、kcp_client源码
- 小实验:
- 设置弱网规则:sudo tc qdisc add dev eth0 root netem loss 10% # 网卡丢包率设置为10%
- 设置限制带宽规则:tc qdisc add dev eth0 root handle 5:htb default 5 # 限制5M
- 测试TCP和UDP的RTT
- 实现tcp和udp模式下的文件传输,测试独立传输和抢带宽效果
- 删除规则:tc qdisc del dev eth0 root
QUIC
2024-01-29
该篇文章被 Cleofwine
归为分类:
服务端