KCP传输总结

KCP是一个高效可靠的传输协议,相比TCP牺牲10%-20%的带宽,可降低30%-40%的延迟。它不处理底层协议,需要用户自定义数据包发送方式。KCP包括快速重传、拥塞控制等机制,适用于实时性要求高的场景。本文介绍了KCP的工作流程、配置选项和拥塞控制策略。
摘要由CSDN通过智能技术生成

一、简介

KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,以 callback的方式提供给 KCP。 连时钟都需要外部传递进来,内部不会有任何一次系统调用。

二、相关概念

MTU:最大传输单元。即每次发送的最大数据
RTO:Retransmission TimeOut,重传超时时间。

cwnd:congestion window,拥塞窗口,表示发送方可发送多少个KCP数据包。与接收方窗口有关,与网络状况(拥塞控制)有关,与发送窗口大小有关。

rwnd:receiver window,接收方窗口大小,表示接收方还可接收多少个KCP数据包。
snd_nxt:下一个即将发送的kcp数据包序列号
snd_una:下一个待确认的序列号

RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。

MSS:(Maximum Segment Size,最大报文长度。

拥塞窗口:指某一源端数据流在一个RTT内可以最多发送的数据包数, 拥塞窗口(cwnd)会随着网络状态的变化而变化。

接收窗口:rcv_nxt(待接收消息序号),rcv_nxt + rcv_wnd(接收窗口大小)

快速重传机制:假如开启KCP的快速重传机制,并且设置了当重复的ACK个数大于resend时候,直接进行重传。 当发送端发送了1,2,3,4,5五个包,然后收到远端的ACK:1,3,4,5。当收到ACK3时,KCP知道2被跳过1次,当收到ACK4的时候,KCP知道2被跳过2次,当次数大于等于设置的resend的值的时候,不用等到超时,可直接重传2号包。这就是KCP的快速重传机制。

拥塞窗口:指某一源端数据流在一个RTT内可以最多发送的数据包数, 拥塞窗口(cwnd)会随着网络状态的变化而变化。

慢启动机制:慢启动也就是控制拥塞窗口从0开始增长,在每收到一个报文段确认后,把拥塞窗口加1。是为了防止拥塞窗口过大引起网络阻塞,还需要设置一个慢机制的的门限(ssthresh即拥塞窗口的阈值)。当拥塞窗口增长到阈值以后,就减慢增长速度,缓慢增长。

三、kcp源码工作流程图

 

1.首先通过ikcp_create创建一个kcp传输对象,创建时需要传入会话ID和用户ID,conv为一个表示会话编号的整数,用来标记本次传输会话。用户ID,用户ID作用不大,估计就是标记一下KCP对象是由哪个用户创建,可以传入用户对象,方便内部使用,没有用到可以传0.

2.设置回调函数,kcp→output,kcp数据封装好以后,需要发送到网络上时会调用该接口,如果使用的是UDP传输,就是调用系统接口sendto

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值