Ciao!
dipende molto dalla criticità della comunicazione... normalmente aggiungo almeno un byte di parità alla fine del pacchetto (classico XOR bit a bit degli altri bytes) in modo che chi riceve abbia un minimo di controllo sulla bontà di quanto ricevuto.
l'ack invece l'ho implementato solo in un caso, unito ad un sistema locale di buffer (= memorizzo i pacchetti trasmessi) per eventuali ritrasmissioni... ti complica non poco l'algoritmo perché devi prevedere qualche forma di identificazione dei pacchetti e di timeout.