2019-03-28 【网络】KCP+UDP=RUDP

1.原理图

https://blog.csdn.net/kim_weir/article/details/78777221

image.png

2.KCP

KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,以 callback的方式提供给 KCP。 连时钟都需要外部传递进来,内部不会有任何一次系统调用。本文传输协议之考虑UDP的情况。
参考文章:
https://www.cnblogs.com/wetest/p/9190786.html
https://blog.csdn.net/qq_36748278/article/details/80171575
https://blog.csdn.net/yongkai0214/article/details/85212831(这篇文章个人认为最容易理解)

2.1 重点函数:

  • 1.send:将要发送的数据,根据MSS大小,分片,并将分片加入发送队列。
      seg.frg:分片的index。
  • 2.recv:涉及到:【滑动窗口】【数据恢复成一条完整数据】。一共分为四步:


    image.png

    首先规定了一个窗口大小(int),当接收队列中,存有的(未处理)数据数量大于这个值,那么发送方将不继续发送数据,然后等待处理;
    处理过程,就是将队列中的数据,按照frg来恢复成一条完整的数据,然后把这些数据从原始队列中删除;
    删除后,将接收到的暂存数据,按照【sn】确保数据的顺序,放入到队列中。
    最后,判断加入暂存数据后的队列,存有的(未处理)数据数量是否小于窗口大小,若此时小于,而开始时大于,那么回馈给发送方可以发送数据的信号。

你可能感兴趣的:(2019-03-28 【网络】KCP+UDP=RUDP)