Networking: Laminar Reliabilities


(Timon) #1

Laminar has the option for you to choose different reliabilities. This is a very important concept which could be at first sight difficult but which will be very handy later on.

As you know we have two opposites, TCP on one hand and UDP on the other.

TCP has a lot of feature UDP does not have, like shown below.

TCP

  • Guarantee of delivery.
  • Guarantee for order.
  • Packets will not be dropped.
  • Duplication not possible.
  • Automatic fragmentation

UDP

  • Unreliable.
  • No guarantee for delivery.
  • No guarantee for order.
  • No way of getting dropped packets.
  • Duplication possible.
  • No fragmentation

So handy would be if you somehow could specify which features you want on top of UDP. You could say for example I want the guarantee for my packets to arrive, however, they don’t need to be in order.

Laminar supports three types of reliabilities:
1. Reliable
Like TCP we can guarantee all packets send will be arrived. This is handy when you want to send packets that really matters like a building command. If we send packets in order 1,2,3,4,5,6 we get: 1,2,3,4,5,6.
2. Sequenced
Sequenced means that we only want the newest packets. If packets arrive in order: 1,2,5,4,6,3 we get: 1,2,5,6. This is handy for things like position updates. We don’t care about old locations something was at.
3. Unreliable
Like UDP packets can be dropped, duplicated or arrive without order. If we send packets in order 1,2,3,4,5,6 we get: 1,3,4,6,2,5 (extreme example though).

Some examples of reliabilities we want to support:

Reliability Type Packet Drop Packet Duplication Packet Order Packet Fragmentation Packet Delivery
Unreliable Unordered Yes Yes No No No
Unreliable Ordered Yes Yes Yes No No
Reliable Unordered No No No Yes Yes
Reliable Ordered No No Yes Yes Yes
Sequenced Yes No Yes Yes No

Note: that not all types are supported yet, currently only Unreliable Unordered and Reliable Unordered is supported. There is a PR about sequenced packets.