reti calcolo dell`errore
Transcript
reti calcolo dell`errore
Controllo dell'errore I protocolli IP, TCP e UDP utilizzano all’interno di ciascuno delle loro intestazioni un semplice controllo di rilevazione di errore basato su un checksum a 16bit denominato internet checksum. Il checksum contenuto all’interno dell’intestazione IP e’ calcolato solo sull’intestazione IP (20 byte). Il calcolo del checksum non viene eseguito su nessuno dei byte che seguono l’intestazione IP. Per calcolare il checksum IP di un frame in uscita per prima cosa il valore viene posto a zero, quindi la somma a 16bit con complemento a uno dell’intera intestazione viene calcolata (l’intestazione viene considerata sempre come sequenze di parole a 16bit). Il complemento a 1 di questa somma viene quindi memorizzata nel campo checksum dell’intestazione IP. Quando il frame IP viene ricevuto la somma a 16bit con complemento a uno viene calcolata. Essendo il checksum calcolato da chi ha trasmesso il frame, gia’ compreso nel frame stesso, il checksum calcolato dal ricevitore dovra’ avere tutti i bit a 1 (ffff in notazione esadecimale, cioe’ uno dei due possibili valori di 0 nella rappresentazione dell’aritmetica a complemento a 1) se l’intestazione e’ stata ricevuta correttamente. Se il checksum contiene un solo bit diverso da 1 allora il frame viene scartato e non viene generato nessun errore. Sara’ compito di uno dei protocolli soprastanti IP (es TCP) a richiedere la ritrasmissione del frame. ICMP, IGMP, UDP e TCP tutti usano lo stesso metodo per calcolare il checksum contenuto della loro intestazione. Il checksum di TCP o di UDP, al contrario di quello calcolato e verificato in IP, contiene l’intero segmento TCP o UDP cioe’ sia l’intestazione che i dati. Mediante il calcolo del Checksum il protocollo di Trasporto riesce ad assicurare (non al 100%...) la correttezza dei segmenti inviati. Il procedimento è il seguente (uguale a quello già detto precedentemente illustrato per l'IP): • I byte adiacenti sono presi a due a due per formare elementi a 16 bit; si esegue poi la loro somma in C1 (complemento a 1) sommando anche i carry; • il campo checksum viene posto a 0 e viene scritto al suo interno il C1 della somma effettuata; • Il ricevente esegue la somma in C1 (questa volta con il checksum all'interno); se il risultato è FFFF tutto è OK. Facciamo un esempio: Simuliamo il controllo dell'errore in un trasferimento tramite il protocollo UDP. • Nel calcolo del checksum UDP dovremmo tener conto di HEADER, PSEUDO-HEADER, DATI. • Il datagramma trasferito sarà composto ad esempio da: 01 00 F2 03 F4 F5 F6 F7 00 00 (00 00 campo usato per il checksum). • Formiamo le word a 16-bit : 0100 F203 F4F5 F6F7. • Calcoliamo la somma: 0100 + F203 + F4F5 + F6F7 = DEEF con un carry di 0002. • Sommiamo i carry accumulati 0002 per ottenere la somma in C1: DEEF + 002 = DEF1. • Adesso calcoliamo il C1 della somma : ~DEF1 = 210E [CHECKSUM]. • Spediamo il pacchetto con incluso il checksum : 01 00 F2 03 F4 F5 F6 F7 21 0E. • Il ricevente calcola il suo checksum : 0100 + F203 + F4F5 + F6F7 + 210E = 0002 FFFD FFFD + 0002 = FFFF (tutto ok!!!). Esercizio: Una applicazione client/server utilizza il protocollo UDP. In un determinato istante un client con indirizzo IP 160.80.10.11 utilizzando la porta numero 1025 invia un segmento UDP, contenente 2 byte di dati di valore 3 e 6 (in formato decimale), al server. Il server ha indirizzo 160.80.10.32 e ascolta le richieste alla porta numero 7. Scrivete il formato del segmento UDP specificando in particolare il valore dei campi contenuti nel segmento inviato dal suddetto client. Pseudo-header Source IP: A0 50 A B Destination IP: A0 50 A 20 UDP-Header Source port: 401 Destination port: 7 Lenght: 2 Checksum: A721 Data 3 6 401(source port)+ 7(destination port)+ 2(lenght)+ A050(client IP)+ A0B(client IP)+ A050(server IP)+ A20(server IP)+ 3(data)+ 6(data)= 58DE+1 di carry->58DFh=0101 1000 1101 1111b=>complemento a 1=> 1010 0111 0010 0000b=A721h