KCP相关

数据的可靠性传输

ACK机制 -- 保证对端接收数据

重传机制 -- 对端未接收到就重传

序号机制 -- 由于网络本身包会前后到达对端

重排机制 -- 根据需要保证数据的顺序

窗口机制 -- 等待对端可以进行数据接收,针对对端缓冲区可用空间,用于控制发送端发送速度,避免接受方的缓冲不够大导致溢出,同时控制流量避免网络拥塞。发送方的窗口大小由接受方确定。

ARQ协议 -- Automatic Repeat-request -- 自动重传请求

基于 对端确认 和 超时重传 这两个机制来

1.停等式 -- 发送端发送完毕后,等待对端ack确认包,收到后在继续之后的包发送;没收到一定时间后重传数据包;缺点就是效率低。

2.回退n帧 -- 在停等式的等待对端ACK的过程中,发送发送窗口中的数据,然后根据对端返回的ACK以累积确认(收到多个分组,前面的分组ACK可以省略应答)的方式(收到ACK表示对应序号之前的所有数据都接收到了)移动发送窗口;如果超时,就重传窗口中还未被确认的分组(从丢包位置开始重传)。根本目的就是为了提升网络信道的利用率。

3.选择重传 -- 针对第二种重传方案的升级版本,避免不必要的重传,对每个分组都有独立的计时器,对每个分组都记录对端是否已接收的状态,在窗口移动过程中如果在窗口的分组未发送就进行发送,在分组超时就进行重传。

重传触发

1.发送方没有收到ack超时

2.接收端收到包序号有缺失,从而向发送端进行申请重传。

RTT和RTO

RTT -- 往返时延,发送端发送数据开始,到发送端接收到来自接收端的确认(接收端收到后便立即发送确认)一共经历的时延。 链路的传播时间 + 主机的处理时间 +路由的转发时间(缓冲中排队和处理)。在三次握手的时候进行初始化。

RTO -- 重传超时时间

流量控制 -- 对发送方发送速率的控制

通过滑动窗口实现,发送端是发送滑动窗口,接收端是接收滑动窗口,每个TCP端都有一个发送滑动窗口和接收滑动窗口。接收端先将数据存储在内核缓冲区,然后TCP从缓冲区中提取数据,如果缓冲区满了发送方依旧在发送数据,那么这些数据会被丢弃。

因此发送方需要根据接收端的接收窗口来发送数据,让发送方和接收方速率平衡。

当接收端接收窗口满了,发送端停止发送,恢复发送的触发一种是接收端主动发包通知发送端,另一种就是发送端主动询问。

拥塞控制

拥塞窗口 -- 发送窗口,用于管理数据发送

窗口通告 -- 接收窗口 ,用于管理数据接收

tcp分组 -- 如果tcp一个分组太大的话,那么到IP层,IP层也会对其进行分片,这些IP分片到达对端还需要组装成为tcp分组,缺少一个就会丢弃整个tcp分组,因此为了尽可能避免这种情况tcp的分组大小会在握手的时候交换各自MTU,避免IP分片。

拥塞控制 -- 目的:对发送数据的速度进行控制,最大程度利用信道有效的发送数据。

慢启动 -- 以前带宽有限,一种方案避免流量拥塞

快恢复 -- 丢包了,一般就是因为网络拥塞,因此减少发包量,然后尽快恢复到原来的效率。

KCP协议(https://github.com/skywind3000/kcp)

处于实时性考虑,基于UDP,

重传效率

缩减重传等待时间,以带宽换取传输速度:TCP的在重传的时候不断进行RTO的翻倍延时然后进行重传,KCP可以自由设置;

KCP为选择性重传分组,TCP是回退n帧的重传方式;

TCP延迟应答:对于ACK应答,TCP使用的是回退n帧的方式,就是说收到数据包之后会进行累积确认,在进行确认的时候不会立即发送ack包,而是延时一段时间,以接收到尽可能多的包然后进行ack;这个延迟也是有限制的:
数量限制:每隔n个包就应答一次,一般n取2;
时间限制:超过最大延迟时间就应答一次,一般延迟时间为200ms。

KCP的ACK是否延迟发送可以调节;

TCP的重传策略是回退N帧重传,他管理的是一块连续的缓冲;KCP的回退策略是选择重传,他管理针对的对象是单独分组对象;后者是以内存资源换取重传效率。

KCP就是将数据的可靠性功能放到用户层来实现,当希望在用户态完成上述的可靠性属性的时候,就需要管理窗口等属性,也就需要封装对应的数据结构。

ACK

由于udp没有ack帧,因此ack包需要用户层以UDP包的形式来进行实现;

asio_kcp

待学习;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值