UDP support


The problem: In an environment when messages have a very short time-of-usefulness, it is sometimes necessary to sacrifice reliability for absolutely minimum latency. It's okay if messages are occasionally dropped or occasionally arrive too late, but this percentage should be kept as low as possible, and as close to i.i.d. as possible.

With a protocol like TCP, a dropped packet requires retransmission after a delay. Not only the dropped packet but all later packets are therefore delayed. In the messaging world, this means the dropping of one message could negatively affect the latency of later, unrelated messages, and the distribution of delayed messages is not i.i.d. This is undesirable in latency-critical applications.

While NACK-based protocols like PGM may provide somewhat better behavior in this regard, they still use bandwidth to attempt to restore lost messages without regard to whether or not those messages are still useful. A completely unreliable messaging transport is therefore desirable.

Another advantage of UDP transport is the ability to operate over one-way physical links, such as radio links where the transmitters on one end are much more powerful than the transmitters on the other end.

The UDP transport layer should minimally support IPv4 and IPv6 UDP unicast. IPv4 and IPv6 multicast, as well as IPv4 broadcast and subnet broadcast support, are desirable.

Some work was done on a UDP transport for the Crossroads IO library forked from 0MQ some time ago. I believe this code is a good place to start, although it will require some adaptations to reverse Crossroads-specific changes and implement 0MQ-specific changes since the fork.






Lindley French




Affects versions