I have been reading up on UDP connections
Non esiste una "connessione UDP". UDP è un protocollo senza connessione , che è praticamente la sua ragione di esistere in primo luogo.
So if something happens and only two packets out of the three get sent:
Come lo sai? Non ci sono numeri di sequenza in UDP, ogni datagramma si trova da solo. Non c'è modo di sapere che anche in questo caso dovrebbero esserci tre datagrammi. Dal punto di vista del ricevitore, ha ricevuto due datagrammi. Periodo.
L'intero motivo per cui UDP è stato inventato in primo luogo è che ci sono applicazioni in cui non puoi permetterti di aspettare finché non ottieni dati "corretti" e dove puoi permettersi di procedere con dati incompleti. UDP è stato originariamente creato per le applicazioni di telefonia, dove è più importante che la latenza sia bassa rispetto a quella che ogni campione è corretto. Le persone sono abituate agli abbandoni, ai clic e ai crepitii dei telefoni analogici, a cosa sono non abituati e non accettano è in attesa di un secondo per un pacchetto danneggiato trasmessi.
Tipicamente, in un'applicazione di questo tipo, il protocollo applicativo di livello superiore userà un qualche tipo di numero di sequenza o timestamp, in modo che possa rilevare la perdita (o l'esaurimento dell'ordine, che in un'applicazione del genere è la stessa cosa di perso) i datagrammi e basta inserire un millisecondo di silenzio (in un flusso audio) o una riga vuota (in un flusso video). Se si tratta di un protocollo basato su dati bulk anziché di uno streaming, potrebbe reintegrare i dati da datagrammi "tardivi" nel proprio modello di dati anziché trattarli come persi. Se l'applicazione non può vivere con un modello di dati incompleto, potrebbe richiedere nuovamente i dati. Ma questa è una decisione a livello di applicazione, non ha nulla a che fare con UDP.
Per i flussi video e audio, ad esempio, esiste una specifica SMPTE, l'organizzazione professionale per broadcast video e audio, chiamata SMPTE 2022-7 Seamless Protection Switching, che (semplificata) specifica come inviare lo stesso video / audio trasmettere i dati allo stesso tempo su più flussi e come il ricevitore può ricostruire il flusso originale da quei flussi multipli identici. In senso lato, i datagrammi sono marcati con il timestamp e il ricevitore prende il primo datagramma da qualsiasi stream che abbia il timestamp corretto. (È molto più complesso di quello in realtà, ovviamente.) È un modo per migliorare l'affidabilità utilizzando la ridondanza della rete anziché la ritrasmissione. In altre parole, sprechi metà dell'ampiezza di banda, ma ottieni affidabilità e tieni bassa latenza e jitter. (In un'applicazione del mondo reale, si disporrebbe in modo tale che i diversi flussi siano inviati da diverse porte di rete al trasmettitore e ricevuti da diverse porte di rete sul ricevitore, prendendo percorsi diversi attraverso la rete e trasmessi attraverso diversi interruttori e differenti cavi, ecc. per ottenere la massima ridondanza.)