Newsgroup: it.discussioni.ingegneria
Titolo: Calcolo crc in un messaggio udp

Dunque la mia domanda è questa:
sulle dispense del mio professore c'è scritto che l'udp preleva dal 
pacchetto ip una parte del suo header (contenente gli indirizzi ip sorgente 
e destinaizone) per costruirsi uno pseudoheader incluso nel calcolo del crc, 
per accertarsi in fase di ricezione che sia stato raggiunto il destinatario.
Ma come può l'udp prelevare informazioni dall'header ip se questo header 
ancora non esiste in fase di creazione del messaggio udp? Quando poi il 
messaggio udp sarà stato passato al livello 3 e l'ip avrà costruito il suo 
bel pacchetto con dentro incapsulato il messaggio udp, a quel punto l'udp 
non c'entrerà più niente, e non vedo come potrebbe riprendersi il pacchetto, 
spacchettarlo e usare le informazioni dell'header per scrivere il crc (che 
nel mentre immagino avrebbe dovuto essere stato settato a zero).
A questo punto mi viene il dubbio che, in barba ai principi 
dell'architettura a livelli, sia il livello ip che scriva il crc del 
messaggio di livello trasporto.
Qualcuno mi sa dare lumi in proposito?
Grazie a tutti.
Ciao 

 messaggio di livello trasporto.
Certo che no. :->

sorgente (che e' quello locale che devo sapere per forza anche quello).
E allora in ricezione come fa l'udp a ricostruirsi lo pseudo-header per 
effettuare il controllo? L'indirizzo locale non potrà conoscerlo, in quanto 
una stessa macchina può avere più interfacce di rete e quindi più indirizzi 
ip, e tantomeno può conoscere quello sorgente. Le informazioni contenute 
nell'header ip saranno già andate perse una volta che il messaggio udp è 
stato scapsulato e passato al livello 4. E allora, come funziona?
Inoltre ho trovato un paio di slide online di vari corsi di telematica e 
reti di telecomunicazioni in cui si accennava al fatto che veniva violata 
l'indipendenza dei livelle rete e trasporto, ma non veniva spiegato 
esattamente il meccanismo.


Forse ho trovato da me la soluzione: la procedura di servizio invocata dal 
livello ip per comunicare che ha un messaggio da consegnare al livello udp, 
DELIVER, passa come parametri, oltre ai dati stessi ed alle porte sorgente e 
destinazione, anche source addr, dest. addr, e message lenght. Ovvero 
esattamente le informazioni necessarie per costruire lo pseudo-header.
Però che fatica per trovare informazioni complete.
Ciao, e grazie 

 Però che fatica per trovare informazioni complete.
Dannazione, mi sono sbagliato: la procedura deliver di cui ho trovato 
documentazione è la procedura invocata dall'udp per la consegna dei dati al 
livello applicativo, e non quella invocata dall'ip per la consegna del 
messaggio all'udp...
Quindi resta valido il quesito del mio precedente post: come fa l'udp a 
reperire le informazioni necessarie alla creazione dello pseudo-header in 
ricezione?
Ciao 

Incollo dall'RFC 768:
The UDP module  must be able to determine  the  source  and  destination
internet addresses and the protocol field from the internet header.  One
possible  UDP/IP  interface  would return  the whole  internet  datagram
including all of the internet header in response to a receive operation.
Such an interface  would  also allow  the UDP to pass  a  full  internet
datagram  complete  with header  to the IP to send.  The IP would verify
certain fields for consistency and compute the internet header checksum.
Quindi avevo ragione io :P
Ciao 

esattamente il meccanismo.
IMHO non c'e' nessuna violazione sostanziale. In trasmissione e' UDP
che calcola il checksum, ed e' sempre lui che lo verifica in ricezione,
anche se lo fa usando dati che a stretto rigore sono relativi al
livello 3.
Se ti interessa studiarti un' implementazione abbastanza ben fatta,
scaricati il socket della Waterloo University (
www.wattcp.com
). Ci sono
tutti i sorgenti ed e' completamente gratis ( se la vuoi paghi solo la
documentazione).
Ciao,
Paolo