定义
kcp协议是传输层的一个具有可靠性的传输层ARQ协议。
它的设计是为了解决在网络拥堵情况下tcp协议的网络速度慢的问题。
kcp力求在保证可靠性的情况下提高传输速度。
kcp协议的关注点主要在控制数据的可靠性和提高传输速度上面,因此kcp没有规定下层传输协议,一般用udp作为下层传输协议,kcp层协议的数据包在udp数据报文的基础上增加控制头。当用户数据很大,大于一个udp包能承担的范围时(大于mss),kcp会将用户数据分片存储在多个kcp包中。因此每个kcp包称为一个分片。
其实kcp是在应用层上进行了一次拆包解包的过程,你可以把他作为tcp基础上拆解包的逻辑使用,也可以作为udp基础上的拆解包使用。至于kcp的一些简单基础的概念,我这里就不赘述了,大家可以在github上看下skywind的readme文档,这里我只说下kcp的重传机制,拥塞窗口。
KCP重传机制
为了提供可靠性,kcp采用了重传机制。
为实现重传机制,kcp为每个分片分配一个唯一标识,接收方收到一个包后告知发送方接到的包的序号,发送方接到确认后再继续发送。而如果发送方在一定时间内(超时重传时间)没有接到确认,就说明数据包丢失了,发送方需要重传丢失的数据包,所以发送方会把待确认的数据缓存起来,方便重传。 停等的重传机制发送一个包后必须等待确认后再发下一个包,传输速度较慢,所以为了提高发送速度,发送方可以不必再每发送一个包后就进行等待确认,而是可以发送多个包出去,然后等待接收方一一确认。又由于接收方不可能同时处理无限多的数据,因此需要