È 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
- 1. TypeError: I dati immagine non possono essere convertiti in float
- 2. I dati crittografati RSA possono essere inviati tramite HTTP?
- 3. Come possono essere salvati i dati ViewBag dopo un modulo?
- 4. Mailgun: messaggi "Accettati" ma richiedono molto tempo per essere consegnati (o non consegnati)
- 5. Quanti dati possono essere memorizzati in MySQL?
- 6. Quanti dati possono essere inviati tramite $ _GET
- 7. sqlite3_column_text i dati restituiti vengono danneggiati durante la finalizzazione/chiusura
- 8. Come garantire che i messaggi vengano consegnati?
- 9. Rileva dati json danneggiati in PHP json_decode()?
- 10. I org.opencv.imgcodecs.Imgcodecs importazione non possono essere risolti
- 11. I generatori PHP possono essere clonati?
- 12. I costruttori C++ possono essere template?
- 13. I metodi web possono essere sovraccaricati?
- 14. I puntatori possono essere di dimensioni diverse?
- 15. quanti dati possono gestire i grafici js
- 16. Correggere i percorsi danneggiati in ASDoc?
- 17. Checkout CVS ignora i file danneggiati
- 18. Dati primari JPA e parametri che possono essere nulli
- 19. I caratteri Emoji non possono essere codificati in JSON
- 20. non possono essere 'virtuali'
- 21. Django: i ricevitori del segnale possono restituire i dati?
- 22. Quali tipi di dati C# possono essere tipi nullable?
- 23. Dove vengono memorizzati i dati inviati da UDP?
- 24. VTune Profiler che dà errore: "I dati non possono essere visualizzati, non c'è punto di vista disponibile per i dati"
- 25. I campi non possono essere utilizzati nell'espressione parametro report
- 26. I caratteri speciali non possono essere inseriti nel database
- 27. In che modo i dati privati possono essere protetti con l'autenticazione OAuth2?
- 28. iTunes Connect invia per revisione: i dati della tua app non possono essere salvati. Riprovare
- 29. Dove vengono memorizzati i dati di dimensionamento di TOpenDialog e come possono essere ripristinati?
- 30. Come evitare un modello anemico di dati? I repository possono essere iniettati in entità?
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