mKCP 是一个基于 UDP 的协议,所有通讯使用 UDP 传输。mKCP 是流式传输协议,由 KCP 协议修改而来,可以按顺序传输任意的数据流。mKCP 没有版本号,不保证版本之间兼容性。
mKCP 是一个基于 UDP 的协议,所有通讯使用 UDP 传输。mKCP 是流式传输协议,由 KCP 协议修改而来,可以按顺序传输任意的数据流。mKCP 没有版本号,不保证版本之间兼容性。
mKCP 将数据流拆成若干个数据包进行发送。一个数据流有一个唯一标识,用以区分不同的数据流。数据流中的每一个数据包都携带了同样的标识。
mKCP 没有握手过程,当收到一个数据包时,根据其携带的数据流的标识来判断是否为新的通话,或是正在进行中的通话。
每一个数据包中包含若干个片段(Segment),片段分为三类:数据(Data)、确认(ACK)、心跳(Ping)。每个片段需要单独处理。
KCP 协议
KCP 是一个快速可靠协议,能以比 TCP 浪费 10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如 UDP)的收发,需要使用者自己定义下层数据的发送方式,以 callback 的方式提供给 KCP。连时钟都需要外部传递进来,内部不会有任何一次系统调用。
TCP 是为流量设计的(每秒内可以传输多少 KB 的数据),讲究的是充分利用带宽。而 KCP 是为流速设计的(单个数据从一端发送到一端需要多少时间),以 10%-20%带宽浪费的代价换取了比 TCP 快 30%-40%的传输速度。