Newsgroup: it.comp.os.linux.development
Titolo: Chiarimento su UDP

UDP a differenza di TCP non è un protocollo affidabile, quindi non c'è la
certezza che il pacchetto arrivi a destinazione.
Quello che vorrei capire è questo: *SE* il pacchetto arriva a destinazione,
sono *sicuro* che contiene gli stessi dati che ho inviato ? Oppure c'è la
possibilità che si sia corrotto durante il viaggio ?
In quest'ultimo caso dovrei implementare io un checksum, cosa mi
consigliate, crc32 ?
Grazie !!
-- 
LF

 consigliate, crc32 ?
Se non ricordo male si usa proprio crc nei protocolli
sopra elencati.
Comunque puoi vedere RFC1071.
SiMoStro

 Oggi credo che il check sia sempre effettuato.
Quindi, riassumendo: lo standard dice che il checksum sul *payload* dei
pacchetti UDP (e relativo scarto dei pacchetti con checksum errato) può
essere implementato o meno a piacimento dello stack TCP/IP: come si
comportano i sitemi operativi attuali (Linux/BSD/Windows...) ?
-- 
LF

 comportano i sitemi operativi attuali (Linux/BSD/Windows...) ?
Qui mi cogli un po' impreparato :-)
A tal proposito lo Stevens dice che:
"L'RFC sugli Host Requirements richiede che
 il checksum sugli UDP sia abilitato per default.
 Stabilisce inoltre che un'implementazione deve
 verificare il checksum se il mittente ne ha
 calcolato uno (cioà il chksum è diverso da zero).
 Tuttavia molte implementazioni violano tutto ciò
 e ci si limita a verificare un chksum solo se il
 checksum in uscita è abilitato."
Ho letto in reto che le implementazioni di FreeBSD hanno
il checksum su UDP abilitato.
Magari dai un'occhiata in rete...
SiMoStro

  checksum in uscita è abilitato."
Direi che alla luce di questo sia inutile implementare un checksum
aggiuntivo... non è mio compito correggere i bug degli stack TCP/IP,
no ? :)
Grazie 1000 !!
-- 
LF

 comportano i sitemi operativi attuali (Linux/BSD/Windows...) ?
Se usi socket raw puoi decidere tu se mettere il checksum oppure no.
Luca
-- 
Home: 
http://kronoz.cjb.net
Ci sono due cose che l'uomo non puo` nascondere:
essere ubriaco ed essere innamorato.

> consigliate, crc32 ?
dipende da quanti errori stimi di avere e se vuoi un codice a correzione
d'errore o meno. :-)

 pacchetto e basta.
Dalla RFC 768:
"Checksum is the 16-bit one's complement of the one's complement sum of a
pseudo header of information from the IP header, the UDP header, and the
data,  padded  with zero octets  at the end (if  necessary)  to  make  a
multiple of two octets."
e ancora:
"This checksum procedure is the same as is used in TCP."
Che dire, non è molto chiaro... ma se funziona bene in TCP dovrebbe fare lo
stesso in UDP...:)
-- 
LF

 stesso in UDP...:)
la somma complemento ad 1 dell'udp me la ricordavo. mi sembra anche di
ricorda che tcp usi invece un codice a ridondanza ciclica, cosa che la
somma in complemento 1 dell'udp non č.

 somma in complemento 1 dell'udp non è.
La somma in complemento a 1 avrebbe dovuto essere una soluzione
temporanea per le prime installazioni sperimentali, il checksum avrebbe
dovuto essere il CRC16. Non so come mai non sia avvenuto il cambio,
forse la base installata era gia` troppo vasta? 
Luca
-- 
Home: 
http://kronoz.cjb.net
Il coraggio non mi manca.
E` la paura che mi frega...

 forse la base installata era gia` troppo vasta? 
forse perché altrimenti sarebbe stato troppo simile a tcp?

 ha scritto:

Il TCP non usa CRC, usa lo stesso algoritmo. E ricordavo male, il
dettaglio del CRC si riferiva all'IP, dove una nota di Postel dice:
"This is a simple to compute checksum and experimental evidence
 indicates it is adequate, but it is provisional and may be replaced
 by a CRC procedure, depending on further experience."
Luca
-- 
Home: 
http://kronoz.cjb.net
E' stato a causa di una donna che ho cominciato a bere e non ho mai
avuto la cortesia di ringraziarla.