Se o programa espera conexões confiáveis, então ele precisa usar o TCP, não o UDP. O UDP está desprotegido contra perda no nível do protocolo - é apenas um sistema de entrega de melhor esforço. O TCP é um sistema de entrega garantida.
Suponha que haja uma conexão UDP que não espere muita perda de pacotes.
Já existem ferramentas que permitem envolver uma conexão UDP para ganhar mais confiabilidade na despesa de largura de banda e sobrecarga, por exemplo, usando códigos Reed-Solomon.
Uso esperado:
host1$ someprogram --listen-udp 127.0.0.1:1234
host1$ reedsolomon_udp --listen 0.0.0.0:1235 --connect 127.0.0.1:1234
host2$ reedsolomon_udp --connect host1:1235 --listen 127.0.0.1:1234
host2$ someprogram --connect-udp 127.0.0.1:1234
Não se espera que a solução remova as perdas, espera-se reduzi-las, especialmente se mais de 50% dos pacotes forem perdidos.
Se o programa espera conexões confiáveis, então ele precisa usar o TCP, não o UDP. O UDP está desprotegido contra perda no nível do protocolo - é apenas um sistema de entrega de melhor esforço. O TCP é um sistema de entrega garantida.
ARQ é o nome de uma família de métodos, uma variedade da qual é usada pelo TCP. Algumas variedades são usadas às vezes para "embrulhar" o UDP.
Por exemplo, no streaming de vídeo, o UDP pode ser usado para evitar a sobrecarga do TCP. Uma variedade de ARQ é usada em alguns casos para adicionar alguma confiabilidade para um fluxo de transporte MPEG transportando vídeo pela Internet. Essa variedade de ARQ destina-se a criar menor sobrecarga do que o TCP, enquanto ainda permite aumentar a confiabilidade de recebimento do fluxo de vídeo.
Veja este artigo da wikipedia para uma discussão mais completa e uma lista de referências: link
Tags networking udp redundancy