On 19 October 2015 at 20:31, Aleksandar Kuktin <akuktin@gmail.com> wrote:
I seem to remember IL being more complex than just a UDP with counters
and ACK, which is what I'm - sort of - looking for.

I think you might find Plan 9's rudp is essentially that. Conversations are determined by
a generation number; packets are labelled  (gen, seq) for seq within a given generation gen;
and acks are piggybacked as (agen, aseq) in every packet. The header is just

uchar relseq[4]; /* id of this packet (or 0) */
uchar relsgen[4]; /* generation/time stamp */
uchar relack[4]; /* packet being acked (or 0) */
uchar relagen[4]; /* generation/time stamp */

I can't say much about how well it works, because it has been years since I last poked at it,
and for my purposes I thought I needed something more elaborate (but I might have been wrong about that).
In your case, allowing for implementation bugs, it sounds as though it might work for you, or at least be easily adaptable.