KCP协议:从TCP到UDP家族QUIC/KCP/ENET
TCP/UDP/KCP
TCP
TCP协议的可靠性让使用TCP开发更为简单,同时它的这种设计也导致了慢的特点。
TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。
TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程以及重传策略。由于TCP内置在系统协议栈中,极难对其进行改进。
UDP
UDP协议简单,所以它更快。但是,UDP毕竟是不可靠的,应用层收到的数据可能是缺失、乱序的。
UDP协议以其简单、传输快的优势,在越来越多场景下取代了TCP,如网页浏览、流媒体、实时游戏、物联网。
随着网络技术飞速发展,网速已不再是传输的瓶颈,CDN服务商Akamai报告从2008年到2015年7年时间,各个国家网络平均速率由1.5Mbps提升为5.1Mbps,网速提升近4倍。网络环境变好,网络传输的延迟、稳定性也随之改善,UDP的丢包率低于5%,如果再使用应用层重传,能够完全确保传输的可靠性。
KCP
KCP协议就是在保留UDP快的基础上,提供可靠的传输,应用层使用更加简单——TCP可靠简单,但是复杂无私,所以速度慢。KCP尽可能保留UDP快的特点下,保证可靠。
TCP是为流量设计的(每秒内可以传输多少KB的数据),讲究的是充分利用带宽。
KCP是为流速设计的(单个数据包从一端发送到一端需要多少时间),以10%-20%带宽浪费的代价换取了比 TCP快30%-40%的传输速度。