Modello ISO/OSI Un metodo di studio Vallì Rossella Carando 2006 SIS
Livello data link Compiti: Framing Framing Accesso al mezzo trasmissivo (MAC) Accesso al mezzo trasmissivo (MAC) Controllo errori Controllo errori Controllo del flusso Controllo del flusso pdu: frame
rete Compiti: Determinazione percorso nella sottorete Determinazione percorso nella sottorete Indirizzamento (compatibilità) Indirizzamento (compatibilità) Enumerazione pacchetti Enumerazione pacchetti Controllo congestione Controllo congestione pdu:pacchetto
trasporto Compiti: Accetta dati dal livello superiore Accetta dati dal livello superiore Passa al livello rete Passa al livello rete Controllo trasmissione Controllo trasmissione Regolazione del flusso Regolazione del flusso pdu:segmento
sessione Compiti: Permette linstaurarsi delle sessioni Permette linstaurarsi delle sessioni Ad es. trasferimento archivi Ad es. trasferimento archivi Gestione dei token Gestione dei token Sincronizzazione Sincronizzazione Esempio: nel trasferimento di files Pdu: SPDU
presentazione Compiti: Calcolatori differenti hanno formati diversi Calcolatori differenti hanno formati diversi Strutture dati astratte Strutture dati astratte Codifica di dati in un formato riconosciuto Codifica di dati in un formato riconosciuto Pdu: PPDU
Applicazione Compiti: Interfaccia utente Interfaccia utente File transfer File transfer Mail Mail Terminali virtuali remoti Terminali virtuali remoti Pdu: APDU
Data link Rete Trasporto Sessione Applicazione Presentazione Trasporto Sessione Applicazione Presentazione Modello ISO-OSI fisico Data link Rete fisico dl Rete fisico dl Rete fisico
Data Link: il framing Per framing si intende il frazionamento di un insieme di bytes in porzioni adatte al trasporto sulla linea. Per framing si intende il frazionamento di un insieme di bytes in porzioni adatte al trasporto sulla linea. 1.Conteggio caratteri 2.Character stuffing 3.Bit stuffing
Dove lo collochiamo? Sulla scheda di rete Sulla scheda di rete Gira insieme al livello fisico Gira insieme al livello fisico Entrambi possono essere visti come procedure chiamate dal livello network Entrambi possono essere visti come procedure chiamate dal livello network Noi assumiamo che siano processi indipendenti Noi assumiamo che siano processi indipendenti
Caratteristiche Il DL vede il prossimo computer sulla rete Il DL vede il prossimo computer sulla rete
Cosa succede ? Pacchetto da livello reteheader trailer
Relazioni con gli altri livelli….. Rete Data link fisico Rete Data link fisico
Come è fatto un frame? Assumiamo che vi siano i seguenti campi: tiposeqackInformazioni
Funzioni e livelli Il DL comunica attraverso funzioni e strutture dati: al_livello_fisicodal_livello_fisicoal_livello_retedal_livello_rete
Strutture dati Pacchetto ( struttura livello rete) Pacchetto ( struttura livello rete) Frame ( struttura livello data link) Frame ( struttura livello data link) Immagino che siano strutture o record Lo schema del frame è quello già visto
Se arriva un frame… Definiamo una funzione attesa_evento in grado di segnalare larrivo di un frame Definiamo una funzione attesa_evento in grado di segnalare larrivo di un frame attesa_evento
Primo protocollo (heaven) Ipotesi: Ipotesi: unidirezionalità unidirezionalità Livelli sempre pronti Livelli sempre pronti Tempo di elaborazione 0 Tempo di elaborazione 0 Canale perfetto senza errori Canale perfetto senza errori
Heaven trasmettitore while (true){ dal_livello_rete(pacchetto);frame.info=pacchetto;al_livello_fisico(frame);}Ricevitore attesa_evento;dal_livello_fisico(frame);pacchetto=frame.info;al_livello_rete(pacchetto);}
Irrealizzabile, perché? Si dà per certa una velocità di elaborazione molto bassa (tendente a 0) Si dà per certa una velocità di elaborazione molto bassa (tendente a 0) I buffer non sono mai pieni I buffer non sono mai pieni Non ci sono errori Non ci sono errori Lesempio che segue (stop and wait) cerca di essere più realistico …
stop and wait trasmettitore while (true){ dal_livello_rete(pacchetto);frame.info=pacchetto;al_livello_fisico(frame);aspetta_evento(ack);}Ricevitore attesa_evento();dal_livello_fisico(frame);pacchetto=frame.info;al_livello_rete(pacchetto);al_livello_fisico(ack);}
Irrealizzabile, perché? Si dà per certa il fatto che i frame arrivino sempre giusti Si dà per certa il fatto che i frame arrivino sempre giusti E se usassimo un timer? Si potrebbe pensare di inviare un riscontro ogni volta che arriva un frame corretto. Se il trasmettitore non riceve nulla, dopo un certo tempo rispedisce.
ma anche questo non funzionerebbe…. E se si perde il frame di ack? E se si perde il frame di ack? In assenza di numerazione dei frame verrebbe rispedito lo stesso frame spedito prima, creando una duplicazione dannosa……. Infatti non abbiamo uno strumento per avvertire il livello rete che una cosa è già arrivata!
Per esempio ….. Rimando un frame perché è andato perso ack! Risultato: frame duplicato
stop and wait per canale disturbato Inserisco un numero di sequenza e un timer Se il ricevitore riceve il frame atteso manda l ack, il trasmettitore spedisce il prossimo Se non arriva l ack il trasmettitore rispedisce
stop and wait per canale disturbato trasmettitoreNum_seq=0;dal_livello_rete(pacchetto); while (true){ frame.info=pacchetto;Frame.seq=Num_seq;al_livello_fisico(frame);Inizio_timer;aspetta_evento(ack); Se (evento==arrivo_ack) { dal_livello_rete(pacchetto);Pacchetto=frame.info; Al_livello_rete (pacchetto); }}
stop and wait per canale disturbato ricevitoreNum_seq=0; while (true){ aspetta_evento(arrivo_frame); Se (evento==arrivo_frame) { dal_livello_fisico(frame); Se (frame. Seq==num_seq) Al_livello_rete(frame.info);Num_seq++; } }
criticità I protocolli precedenti presentavano criticità I protocolli precedenti presentavano criticità Unidirezionali Unidirezionali Se usiamo un collegamento full duplex uno dei due canali porta solo ack (è quindi sprecato) Se usiamo un collegamento full duplex uno dei due canali porta solo ack (è quindi sprecato) Invece, usando un canale solo in half duplex
Il piggybacking Significa letteralmente viaggiare a scrocco Significa letteralmente viaggiare a scrocco Invece di mandare lACK separato.. Invece di mandare lACK separato.. Si attende che il ricevente debba inviare un frame Si attende che il ricevente debba inviare un frame Si appende lack al frame risparmiando Si appende lack al frame risparmiando ack
problemi Cè un timeout per inviare lACK? Cè un timeout per inviare lACK? Si, se non cè necessità impellente di inviare un frame di risposta si manda lack separatamente Se il timer scatta troppo presto cosa succede? Se il timer scatta troppo presto cosa succede? Viene rispedito il frame, con ovvio dispendio di banda
Riassumendo su un canale unico…. A B dati da A a B ack da A a B dati da B ad A ack da B ad A
Sliding windows Letteralmente finestre scorrevoli Letteralmente finestre scorrevoli Ack contiene il numero dellultimo frame ricevuto senza errori Ack contiene il numero dellultimo frame ricevuto senza errori Gli stop and wait per canale disturbato hanno finestra 1 Gli stop and wait per canale disturbato hanno finestra 1
In cosa consiste: parte mittente Ogni frame spedito contiene un numero progressivo (0-2 n-1 ) Il campo dedicato ad ack è grande n bit Mittente ha una finestra in cui mantiene la sequenza dei frame che può trasmettere finestra vi sono gli indici, in un buffer i frame
Inoltre… Se arriva un ack (numerato) viene tolto lindice corrispondente dalla finestra Se arriva un ack (numerato) viene tolto lindice corrispondente dalla finestra Se dal livello network arriva un nuovo pacchetto Se dal livello network arriva un nuovo pacchetto si fa avanzare la finestra di una posizione (entra un nuovo indice) Se i buffer sono pieni si ferma il livello network Se i buffer sono pieni si ferma il livello network
Cosa succede parte destinatario Il destinatario mantiene una finestra Il destinatario mantiene una finestra Questa non è necessariamente uguale a quella del mittente Questa non è necessariamente uguale a quella del mittente Se arriva un frame il cui indice è fuori dalla finestra è scartato (non si invia lack) Se arriva un frame il cui indice è fuori dalla finestra è scartato (non si invia lack) Se arriva un frame il cui indice è dentro la finestra è accettato ( si invia lack) Se arriva un frame il cui indice è dentro la finestra è accettato ( si invia lack)
Nella finestra Frame inviati ma non ancora confermati Frame inviati ma non ancora confermati Frame da inviare Frame da inviare
ricevitore Avanza solo se arriva il frame giusto Se arriva un frame il cui indice è fuori dalla finestra è scartato (non si invia lack) Se arriva un frame il cui indice è fuori dalla finestra è scartato (non si invia lack)
E se volessimo ottimizzare? Si mandano più frame in cascata, senza aver ricevuto ack del primo Si mandano più frame in cascata, senza aver ricevuto ack del primo Questo metodo è detto pipelining Questo metodo è detto pipelining Ho due metodi per il controllo: go-back-n Ho due metodi per il controllo: go-back-n e selective repeat
Go-back-n È in effetti un metodo a finestra 1 È in effetti un metodo a finestra 1 Usato per comunicazioni satellitari Usato per comunicazioni satellitari Se arriva un frame danneggiato o fuori sequenza non si manda ack Se arriva un frame danneggiato o fuori sequenza non si manda ack Il mittente va in timeout, quindi ritrasmette a partire dal primo di cui non ha avuto lACK Il mittente va in timeout, quindi ritrasmette a partire dal primo di cui non ha avuto lACK
Selective repeat Il destinatario, invece di scartarli, mantiene i frame successivi a quello non arrivato in un buffer Il destinatario, invece di scartarli, mantiene i frame successivi a quello non arrivato in un buffer Non appena arriva il frame atteso si manda tutto il contenuto del buffer a livello network Non appena arriva il frame atteso si manda tutto il contenuto del buffer a livello network Per ogni frame arrivato bene, viene mandato un ack con il numero più alto ricevuto fino ad allora. Per ogni frame arrivato bene, viene mandato un ack con il numero più alto ricevuto fino ad allora.