È possibile che i dati UDP vengano danneggiati? So che è possibile che sia perso.I dati UDP possono essere consegnati danneggiati?
risposta
pacchetti UDP utilizzano un checksum a 16 bit. Non è impossibile che i pacchetti UDP abbiano corruzione, ma è piuttosto improbabile. In ogni caso non è più suscettibile alla corruzione di TCP.
possibile? Assolutamente. Inosservato? Unlikely, poiché UDP utilizza un checksum che richiederebbe la visualizzazione di errori a più bit. Se viene rilevato un errore, è probabile che il sistema rilasci il pacchetto - tali sono i rischi legati all'uso di UDP.
pacchetti UDP possono anche essere consegnati fuori ordine, quindi se siete escogitare un protocollo su UDP bisogna tenerne conto pure.
Una forma comune di "corruzione" che colpisce i programmatori ignari è troncatura del datagramma. Vedere "Programmazione rete Unix" di Stevens per ulteriori informazioni (pagina 539 nel 2 ° ed.)
Si potrebbe verificare la bandiera MSG_TRUNC ...
Prima di tutto, il "checksum IP" di cui sopra è solo un Checksum dell'intestazione IP. Non protegge il carico utile. Vedi RFC 791
secondo luogo, permette UDP checksum trasporto con NO, il che significa che il checksum a 16 bit è impostato a 0 (cioè nessuno). Vedi RFC 768. (Un all valore di checksum trasmesso zero significa che il trasmettitore generato alcun checksum)
terzo luogo, come altri hanno già detto, UDP ha un checksum a 16 bit, che non è il modo migliore per rilevare un multi-bit errore, ma non è male. È certamente possibile che un errore non rilevato entri di nascosto, ma molto improbabile.
Se il datagramma arriva senza checksum, l'applicazione può chiedere tali informazioni? – benc
Grazie per aver chiarito che il checksum IP è solo per l'intestazione. – RandomInsano
@RandomInsano Si prega di notare che il poster aveva tre punti. Il punto 1 parla di "checksum IP", che è un livello sotto UDP, il punto 3 dice che UDP ha un checksum. Quindi ci sono 2 checksum, IP che protegge l'intestazione IP e checksum UDP che protegge l'intestazione ei dati UDP. Quindi i dati sono protetti. – mikijov
Tecnicamente il checksum è facoltativo. Da RFC 768: "Un valore di checksum interamente trasmesso a zero significa che il trasmettitore non ha generato alcun checksum (per il debug o per i protocolli di livello superiore a cui non interessa)." –
sì, ma: a) il checksum, immagino, è sempre calcolato per una trasmissione UDP normale non specificamente configurato, b) se il pacchetto sembra avere una lunghezza corretta e checksum, allora è corretto, o altrimenti il sistema non sarebbe consegnare un tale pacchetto al chiamante. Destra? – Ethouris