Reti di Calcolatori a.a. 2005/06 Lezione 8 Reti di Calcolatori Andrea Frosini 1 Nel modello di riferimento: Application Transport Network Data Link Fisico Reti di Calcolatori Andrea Frosini 2 Schema generale della trasmissione Nei livelli Network, Data Link e Fisico esistono tre distinte entità indipendenti (hardware o software) che comunicano tra loro scambiandosi messaggi tramite le opportune interfacce 1. L’entità di livello Network passa un pacchetto all’entità di livello Data Link 2. L’entità Data Link prepara un frame aggiungendo una testata ed una coda contenenti informazioni di controllo 3. L’entità Data Link calcola il checksum del frame e lo inserisce in un opportuno campo nella testata o nella coda del frame 4. L’entità Data Link passa il frame all’entità del livello Fisico 5. L’entità Fisico invia il frame per mezzo del canale di comunicazione Reti di Calcolatori Andrea Frosini 3 Schema generale della ricezione 1. L’entità Fisico riceve una sequenza di bit dal canale di comunicazione e la passa all’entità Data Link 2. L’entità Data Link estrae il frame dalla sequenza di bit 3. L’entità Data Link calcola il checksum del frame e lo controlla con il checksum nell’opportuno campo nella testata o nella coda del frame 4. L’entità Data Link: • se il frame ha errori, adotta una opportuna procedura (ad esempio scarta il frame ed eventualmente trasmette un ack negativo) • se il frame è corretto, estrae il pacchetto dal frame rimovendo la testata e la coda e lo passa all’entità Network Reti di Calcolatori Andrea Frosini 4 Gestione sequenza di trasmissione e flusso I Oltre alla costruzione dei frame ed alla rilevazione/correzione degli errori, il livello Data Link può gestire • il flusso dei frame (per evitare che il calcolatore ricevente sia sovraccaricato) • la sequenza di trasmissione dei frame (soprattutto per evitare che frame duplicati siano passati al livello Network ricevente) Questi due obiettivi sono spesso ottenuti utilizzando un singolo protocollo Reti di Calcolatori Andrea Frosini 5 Gestione sequenza di trasmissione e flusso II Le funzioni effettivamente svolte dal livello Data Link dipendono in realtà dal tipo di servizio offerto: • affidabile: controllo che i frame arrivino tutti, senza errori e senza duplicazioni • non affidabile: controllo che i frame arrivati non contengano errori (quelli con errori vengono semplicemente scartati; questo di solito è “gratis” perché implementato in hardware) Si assume che il livello Data Link non ha mai necessità di spezzare un pacchetto del livello Network in più frame In pratica, i protocolli affidabili del livello Data Link sono anche connection-oriented e garantiscono che i pacchetti raggiungono il livello Network della macchina destinazione nello stesso ordine in cui sono stati trasmessi dal livello Network al livello Data Link della macchina sorgente Reti di Calcolatori Andrea Frosini 6 Acknowledgement L’acknowledgement (ack) o conferma è un messaggio inviato dal ricevente al trasmittente per informarlo che • un frame è arrivato correttamente (positive ack) • un frame è arrivato con errori (negative ack) I messaggi di ack possono essere inviati come • singoli frame (frame ack) • all’interno di opportuni campi della testata dei frame normali (frame dati) Il meccanismo di acknowledgement dei frame fallisce in caso di scomparsa di frame Reti di Calcolatori Andrea Frosini 7 Scomparsa di frame Problema 1: un frame di dati è trasmesso ma scompare completamente; il ricevente non invia nulla perché non deve dare alcuna conferma; il trasmittente aspetta una conferma (negativa o positiva) che non arriverà mai Soluzione: il trasmittente stabilisce, per ciascun frame dati, un termine utile entro il quale deve arrivare il relativo ack. Se l’ack non arriva in questo periodo di tempo, il frame dati viene ritrasmesso Problema 2: un frame di ack scompare del tutto; il trasmittente, dopo aver aspettato invano la conferma, invia un secondo frame di dati identico al precedente; il destinatario riceve un frame dati duplicato Soluzione: il trasmittente inserisce un numero di sequenza all’interno di ciascun frame dati; il ricevente scarta tutti i frame aventi lo stesso numero di sequenza di quello precedentemente ricevuto Reti di Calcolatori Andrea Frosini 8 Gestione del flusso Il meccanismo degli acknowledgement è utile anche per il controllo del flusso di trasmissione Una strategia per il controllo del flusso consiste nell’attesa di una autorizzazione esplicita del destinatario all’invio di nuovi frame Questa comunicazione può essere inserita all’interno di un frame ack che conferma la corretta ricezione di un frame dati precedente Reti di Calcolatori Andrea Frosini 9 Schema di un frame Nell’analisi dei protocolli di trasmissione e flusso del livello Data Link è utile far riferimento ad un frame convenzionale diviso in due campi (header e info): Kind Seq Ack Info Chk Nel campo header si possono individuare altri sottocampi: Kind: Serve a distinguere il tipo di frame (contiene dati, di controllo, ecc.) Seq: Contiene il numero progressivo del frame Ack: Contiene informazioni legate all'acknowledgement Chk: contiene il checksum del frame Il campo info contiene un pacchetto di livello network completo (comprendente le informazioni di controllo di tale livello) Reti di Calcolatori Andrea Frosini 10 Protocolli unidirezionali Prendiamo in considerazione alcuni schemi di protocolli del livello Data Link per il controllo di trasmissione e flusso su un canale simplex: • Protocollo utopia • Protocollo simplex stop-and-wait • Protocollo PAR Reti di Calcolatori Andrea Frosini 11 Protocollo utopia Il protocollo utopia è il più semplice possibile. Si assumono le ipotesi non realistiche: • i dati sono spediti in una sola direzione • il livello Network trasmittente è sempre pronto ad inviare dati • il livello Network ricevente è sempre pronto a ricevere dati • il livello Data Link ha a disposizione buffer di dimensione infinita • il tempo necessario per analizzare i frame è trascurabile • il canale di comunicazione (ossia il livello Fisico) è esente da errori e non perde alcun frame Reti di Calcolatori Andrea Frosini 12 Protocollo utopia – Trasmissione La procedura logica eseguita dall’entità del livello Data Link trasmittente è il seguente loop infinito: while (true) { receive_network(packet); (riceve dati dal livello Network) frame = build_frame(packet); (costruisce il frame di dati) send_physical(frame); (passa il frame al livello Fisico) } Viene utilizzato il campo info del frame, non vengono utilizzati i campi di controllo kind, ack, seq e chk Reti di Calcolatori Andrea Frosini 13 Protocollo utopia – Ricezione La procedura logica eseguita dall’entità del livello Data Link ricevente è il seguente loop infinito: while (true) { wait_data_physical(buffer); (riceve frame dal livello Fisico) packet = extract_packet(frame); (estrae il pacchetto di dati) send_network(packet); (passa i dati al livello Network) } Notare che il canale di comunicazione deve essere wire-like: due bit spediti uno dopo l’altro devono essere ricevuti nello stesso ordine Reti di Calcolatori Andrea Frosini 14 Protocollo utopia – Svantaggi La assunzione meno realistica del protocollo utopia: • il livello Network ricevente è in grado di accettare pacchetti a qualunque velocità o equivalentemente: • il livello Data Link ricevente ha a disposizione un buffer per i frame ricevuti di dimensione infinita Un protocollo più evoluto del protocollo utopia è in grado di controllare il tasso di trasmissione dei frame per evitare il sovraccarico del ricevente Reti di Calcolatori Andrea Frosini 15 Ritardo fissato in trasmissione Per risolvere il problema della congestione del ricevente si può introdurre un ritardo fissato tra l’invio di un frame ed il successivo Questo approccio è conveniente solo in casi molto particolari (ad esempio, reti di comunicazioni sincrone con ricevente ben dimensionato) In generale è da scartare: • l’intervallo temporale tra la ricezione di un frame e la sua trasmissione a livello Network può variare considerevolmente • se il progettista della rete imposta il ritardo di trasmissione dei frame sul caso peggiore, la rete di comunicazione è sotto-utilizzata Reti di Calcolatori Andrea Frosini 16 Protocollo simplex stop-and-wait Rendiamo ora le assunzioni iniziali un po’ più veritiere: • i dati sono spediti in una sola direzione (ma i frame devono poter viaggiare in entrambe le direzioni!) • il canale di comunicazione (ossia il livello Fisico) è esente da errori e non perde alcun frame Il più semplice protocollo simplex stop-and-wait è basato sull’invio di un frame ack ogni volta che un pacchetto è stato trasmesso con successo all’entità Network ricevente Il canale di comunicazione deve essere half-duplex o full-duplex Reti di Calcolatori Andrea Frosini 17 Protocollo simplex stop-and-wait – Trasmissione La procedura logica eseguita dall’entità del livello Data Link trasmittente: while (true) { receive_network(packet); frame = build_frame(packet); send_physical(frame); wait_data_physical(buffer); (attesa del frame ack vuoto) } Reti di Calcolatori Andrea Frosini 18 Protocollo simplex stop-and-wait – Ricezione La procedura logica eseguita dall’entità del livello Data Link ricevente: while (true) { wait_data_physical(buffer); packet = extract_packet(frame); send_network(packet); frame = build_frameack(); (costruzione del frame ack vuoto) send_physical(frame); (invio del frame ack vuoto) } Reti di Calcolatori Andrea Frosini 19 Protocollo simplex stop-and-wait con rumore I La assunzione meno realistica del protocollo simplex stop-and-wait è che ogni frame trasmesso venga ricevuto correttamente poiché nessun canale di comunicazione reale è del tutto privo di errori L’uso di un timer (da parte dell’entità trasmittente) e di checksum insieme al protocollo simplex stop-and-wait sembra essere sufficiente: • quando il trasmittente invia un frame, fa partire un timer • se non arriva il relativo frame ack entro la scadenza del timer, il trasmittente invia nuovamente il frame • il ricevente invia un frame ack solo quando riceve un frame senza errori Reti di Calcolatori Andrea Frosini 20 Protocollo simplex stop-and-wait con rumore II Lo svantaggio principale del protocollo simplex stop-and-wait unito con l’uso del timer è che l’entità Data Link ricevente non è in grado di gestire i pacchetti duplicati Infatti, tutti i pacchetti duplicati vengono trasmessi al livello Network: • Il trasmittente invia un frame dati • Il destinatario riceve il frame dati correttamente, ed invia il frame ack • Il trasmittente non riceve il frame ack • Scaduto il timer, il trasmittente invia per la seconda volta il frame dati • Il destinatario riceve il frame dati correttamente, ed invia il frame ack • Il trasmittente riceve il frame ack Lo stesso pacchetto è stato passato al livello Network ricevente due volte Reti di Calcolatori Andrea Frosini 21 Protocollo PAR E’ necessario aggiungere al protocollo simplex stop-and-wait con timer la capacità del livello Data Link destinatario di distinguere frame dati già ricevuti in precedenza Ciò che si ottiene è un protocollo PAR (Positive Acknowledgement with Retransmission), anche chiamato protocollo ARQ (Automatic Repeat Request) Il metodo più semplice per distinguere i frame dati consiste nel memorizzare nel campo seq della testata del frame un numero di sequenza, incrementato automaticamente dal livello Data Link trasmittente per ciascun diverso frame dati Quando il destinatario riceve un frame dati con lo stesso numero di sequenza del frame ricevuto in precedenza, riconosce un frame duplicato e lo scarta Reti di Calcolatori Andrea Frosini 22 Protocollo PAR – Numeri di sequenza Quanti bit devono essere riservati nella testata del frame per il campo seq? Nel caso di protocolli di tipo PAR, un frame dati è inviato solo dopo la ricezione del frame ack relativo al frame dati inviato prima Se dunque il livello Data Link ha ricevuto un certo frame con numero di sequenza m, il prossimo frame dati che riceverà potrà solo essere: m+1 in caso di ricezione corretta del frame ack, oppure m in caso di perdita del frame ack Sono sufficienti due soli numeri di sequenza, quindi seq può essere costituito da un singolo bit Reti di Calcolatori Andrea Frosini 23 Protocollo PAR – Trasmissione I La procedura logica eseguita dall’entità del livello Data Link trasmittente: seq = 0; receive_network(packet); while (true) { frame = build_frame(packet,seq); send_physical(frame); timed_wait_data_physical(buffer); (resetta il timer e attende) if (frame_arrival) { frame = extract_frame(buffer); if (checksum(frame) && frame.ack == seq){ receive_network(packet); seq = 1 - seq; } } } Reti di Calcolatori Andrea Frosini 24 Protocollo PAR – Trasmissione II Commenti: • il valore di seq viene cambiato solo quando il giusto ack è arrivato • il tempo di attesa della procedura timed_wait_data_physical() è finito. Una volta scaduto si attua nuovamente l’invio del frame • una volta che il giusto frame è arrivato si accetta un nuovo frame dal livello superiore (Network) e si invia ponendo l’header seq modificato • tale protocollo potrà essere reso più efficiente utilizzando un numero di bit maggiore per seq (come vedremo) Reti di Calcolatori Andrea Frosini 25 Protocollo PAR – Ricezione I La procedura logica eseguita dall’entità del livello Data Link ricevente: seq = 0; while (true) { wait_data_physical(buffer); frame = extract_frame(buffer); if (checksum(frame)) { if (frame.seq == seq) { packet = extract_packet(frame); send_network(packet); seq = 1 - seq;} frame = build_frameack(1 - seq); (qui seq NON cambia) send_physical(frame);} } Reti di Calcolatori Andrea Frosini 26 Protocollo PAR – Ricezione II Il mittente etichetta i frame dati con la sequenza ...0,1,0,1..., ma passa all'etichetta e frame successivi solo quando arriva un ack; finché ciò non succede, continua a ritrasmettere lo stesso frame Il ricevente invia un ack di conferma per tutti i frame dati privi di errori, ma consegna al livello network solo quelli giusti, e cioè etichettati secondo la sequenza ...0,1,0,1.… Quando un frame con etichetta sbagliata arriva a destinazione lo ignora e chiede il successivo Reti di Calcolatori Andrea Frosini 27 Protocollo PAR – Normale funzionamento host1 host2 1 ack 1 0 0 ack 1 Reti di Calcolatori Andrea Frosini 28 Protocollo PAR – Errore su frame dati host1 host2 timeout 1 1 ack 1 1 0 Reti di Calcolatori Andrea Frosini 29 Protocollo PAR – Errore su frame ack host1 host2 timeout 1 ack 1 non passato al livello Network 1 ack 1 1 0 Reti di Calcolatori Andrea Frosini 30 Protocollo PAR – Lunghezza del timer La scelta dell’intervallo a cui impostare il timer per la ritrasmissione è critica: • se il valore del timer è troppo lungo, il protocollo è inefficiente perché ogni frame ack perso provoca lunghi “stalli” • se il valore del timer è troppo corto, il mittente può ritrasmettere un frame dati mentre il frame ack atteso sta per essere correttamente ricevuto L’ultimo scenario è particolarmente disastroso se l’entità Data Link trasmittente non ha modo di associare ciascun frame ack al numero di sequenza del relativo frame dati Perciò il campo ack del frame ack contiene il numero di sequenza (0 o 1 nel nostro caso) del frame dati a cui l’acknowledgement si riferisce Reti di Calcolatori Andrea Frosini 31 Protocollo PAR (ack anonimo!) – Timeout troppo corto associazioni fatte da host1 timeout host1 host2 1 ack 1 ack 1 non passato al livello Network 1 0 1 Perdita di ack 1 0 !!! 0 Reti di Calcolatori Andrea Frosini 32 Protocollo PAR (ack anonimo) – No ack su frame duplicati Cosa accade nel caso di ack anonimo se non inviamo ack per frame duplicati? Completa la trasmissione utilizzando: host1 host2 ack personaggi: 0 Reti di Calcolatori 1 timeout oggetti da utilizzare: Andrea Frosini 33