RakNet怎样实现可靠传输的

在raknet中使用两种数据发送机制,最新的使用UDT做为传输控制层

以下即为新的传输控件机制

在raknet中可以用#define _USE_RAKNET_FLOW_CONTROL 来确定是是用旧的传输协议还是使用新的协议

 

控制包:

1 byte 标志位

4 bytes 时间戳, 用来去计算RTT,进行拥塞控制

 3 bytes 序列号 ACK用它来查看数据包

 

 数据包:

 2 bytes 消息长度

 3 bytes 当前消息序列号, 避免重复传送

 1 byte 标志位

 if (UNRELIABLE_SEQUENCED,RELIABLE_SEQUENCED,RELIABLE_ORDERED)

 3 bytes 重传序号

 

1 byte 序列通道

if (消息超过 MTU)

4 bytes 分块数量, 不压缩以提高工作效率

2 bytes 分块标识

 4 bytes 块中索引, 不压缩以提高工作效率

 

 从游戏中发送一段消息,你发送到raknet的所有数据信息都将会把一个控制信息放在一起。因此你仅发送一个消息,那么它应该一个控制信息和一个 数据信息。如果你发送5个信息,那么它是一个控制信息加5 个数据信息。但是如果它比MTV大了10倍,那么它发送10个报文,每个报文包含1个数据 (数据将被拆分)

 

以下即为旧的传输控件机制:

 

 控制包:

1 byte 标志位

8 bytes 时间戳, 用来去计算RTT,进行拥塞控制

 

数据包:

4 bytes 消息长度

4 bytes 当前消息序列号, 避免重复传送

4 bits 标志位

if (UNRELIABLE_SEQUENCED,RELIABLE_SEQUENCED,RELIABLE_ORDERED)

4 bytes 重传序号

 

5 bits 序列通道

if (消息超过 MTU)

4 bytes 分块数量, 压缩,平均是1-2个bytes

4 bytes 分块标识

 4 bytes 块中索引, 压缩,平均是1-2个bytes

 

 

RakNet数据包的可靠性

 UNRELIABLE

Unreliable的数据包是直接被UDP寄出,它们可能按照顺序到达,也可能不会。用这种方法寄出的数据最好是不重要的,或者发送很多次,这样做的 好处就是,遗失的数据包可以得到补偿。

 优点 — 这种类型的数据包不需要被网络告知是否到达目的地。

缺点 — 数据包没有顺序,也可能不会到达目的地,如果发送内存是满的,首先抛弃的就是这种数据。

 

UNRELIABLE_SEQUENCED

 不可靠的连续数据包和不可靠的数据包大体相同。就只有一点不同,那就是老的数据包被忽视,只有最新的数据包可以被接受。

 优点 — 和不可靠的数据包差不多,因此你不用担心老的数据包会改变你的数据。

缺点 — 大量的数据包在他们可能从未到达目的地的情况下丢失,也可能在到达目的地以后丢失。 当发送缓冲区满了的时候,这些数据包首先被丢失。或是最近的数据包寄出后却从未到达。

 

RELIABLE

可靠的数据包是UDP通过一个可靠的层打包后发送到目的地的。

 优点 — 数据包将完整无缺的到达目的地。

缺点 — 没有包顺序。

 

 RELIABLE_ORDERED

 

可靠性顺序包是UDP通过一个可靠层打包后,按照顺序发送到目的地的。

 优点 — 这种数据包将按照一定顺序被寄出。这样做的好处就是很容易编程,因为你不用担心如何组织它们或者遗失的数据包。

缺点 — 可能会占用额外的网络宽带。如果网络很繁忙的时候,数据包可能到达的非常慢。如果一个数据包晚到,那么将延迟许多数据包的到达。不 管怎样,这个缺点可以使用顺序流来缓解。

 

 RELIABLE_SEQUENCED

可靠性连续数据包是UDP使用可靠层打包的,它的目的就是确保这些数据包可以按照连续的顺序到达目的地。

 优点 — 你可以得到UDP数据包的可靠性,顺序数据包的顺序,不用担心老的数据包。

缺点 — 还是占用了大量的网络宽带。 如果收到的包中ACK确认,从包队列中删除该包如果没有收到ACK确认,重新发送 如果要发送的包大于默认MTU大小 ,拆分包进行发送

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值