Here's what I don't understand about distributed systems: TCP works amazing, so why not use the same ideas? Every message increments a counter, so the receiver can tell the ordering and whether some message is missing. Why is this complicated?
TCP is a one to one relation, distributed systems are many to many.
Not trying to be snarly, but you should read the article and come back to discuss. This specific point is adressdd.