Livello di trasporto (Transport layer 4) Flashcards
Quali sono le funzioni del livello di trasporto?
Il livello di trasporto ha il compito di instaurare un collegamento logico tra le applicazioni residenti su host remoti, rende invisibile il trasporto fisico dei messaggi alle applicazioni
Il livello di trasporto è presente solo negli end systems (host)
Svolge funzioni di multiplexing/demultiplexing per applicazioni
Come avviene l’indirizzamento dei processi applicativi? (Gestione del multiplexing)
Le funzioni di multiplexing/demultiplexing vengono gestite mediante indirizzi contenuti nelle PDU di livello di trasporto, questi indirizzi sono lunghi 16 bit e prendono il nome di porte e possono assumere valori compresi tra 0 e 65535.
I numeri noti sono assegnati ad importanti applicativi dal lato server (HTTP, FTP, SMTP, DNS, ecc.) 1 - 1023
I numeri registrati sono assegnati a specifiche applicazioni da chi ne faccia richiesta (tipicamente protocolli proprietari) 1024 - 49151
I numeri dinamici sono assegnati dinamicamente ai processi applicativi lato client 41952 - 65535
Cos’è il servizio di buffering?
Quando un processo viene associato ad una porta (lato client o lato server) viene associato dal sistema operativo a due code, una d’ingresso e una d’uscita
Quali sono i principali protocolli per il servizio di trasporto?
TCP (Transmission Control Protocol), orientato alla connessione e affidabile
UDP (User Datagram Protocol), senza connessione e non affidabile
Quali sono le caratteristiche del protocollo UDP?
E’ il modo più semplice di usare le funzionalità di IP
Funzionalità aggiuntive:
– Indirizzamento delle applicazioni (mux/demux)
– Blando controllo d’errore sull’header (senza correzione)
Protocollo datagram
Non garantisce la consegna
Non esercita nessun controllo (né di flusso, né di errore)
Come sono formati i segmenti del protocollo UDP?
Gli header contengono 4 campi: source port, destination port, length, checksum
Infine vi è il campo dati a cui è destinato un numero arbitrario di spazio
Perchè usare UDP e non TCP?
Minore latenza poichè non occorre stabilire una connessione
Maggiore semplicità:
– Non occorre tenere traccia dello stato della connessione
– Poche regole da implementare
Minore overhead cioè l’header UDP è minore dell’header TCP
Come viene effettuato il controllo di integrità?
Il protocollo UDP per effettuare questo controllo utilizza il campo checksum
Il campo di checksum (16 bit) è calcolato dal trasmettitore ed inserito nell’header del datagram
Il ricevitore ripete lo stesso calcolo sul segmento ricevuto e se il risultato è corretto accetta il segmento, altrimenti lo scarta
Come viene calcolato il checksum lato client e lato server?
Viene calcolato considerando l’header UDP, uno pseudo-header IP ed i dati
Lato trasmettitore:
L’insieme dei campi è diviso in blocchi da 16 bit
Il campo Checksum è inizializzato a 0
Tutti i blocchi vengono sommati in aritmetica complemento a uno
Il risultato è complementato ed inserito nel campo di checksum del segmento inviato
Lato ricevitore:
L’insieme di bit è diviso ancora in blocchi da 16 bit
Tutti i blocchi vengono sommati in aritmetica complemento a uno
Il risultato è complementato
Se sono tutti 0 il pacchetto è accettato altrimenti è scartato
Cos’è un collegamento ideale?
Un collegamento su cui tutto ciò che viene trasmesso arriva nello stesso ordine e viene correttamente interpretato a destinazione
Come vengono effettuati i controlli d’errore?
Gli errori sono gestiti attraverso i protocolli d’errore
Ciascuna trama ricevuta correttamente viene riscontrata positivamente con un messaggio di (Acknowledgment o ACK)
A volte l’errore può essere segnalato da un messaggio detto di NACK
La mancanza di ACK o la presenza di NACK segnala la necessità di ritrasmettere
La procedura si ripete finché la trama viene ricevuta corretta
Sono usati meccanismi come: timeout, finestra di ritrasmissione
Queste procedure possono essere attivate a qualunque livello, sono state sempre presenti a livello di linea
sui collegamenti fisici a causa delle cattive linee fisiche del passato ma proteggere i collegamenti fisici non basta, i pacchetti
possono andare persi nei buffer dei router
Da quali componenti è composto il protocollo di ritrasmissione Stop and Wait? Cos’è e come si calcola la sua efficienza?
Come messaggio usa ACK
Meccanismo di timeout
Ogni messaggio ricevuto correttamente è riscontrato dal ricevitore
Numerazione dei pacchetti
L’efficienza di un protocollo è data dalla frazione di tempo in cui il canale è usato per trasmettere informazione utile in assenza di errori (Tempo utile/Tempo totale)
Efficienza bassa se T«_space;tau
Protocollo non adatto a situazioni con elevato ritardo di propagazione e/o elevato ritmo di trasmissione
Utilizzato spesso in modalità half-duplex
Com’è organizzata la numerazione dei pacchetti nel flusso?
Sono numerati i pacchetti (sn) e gli ack
Se viene inviato uno stesso pacchetto questo viene riconosciuto perchè avrà lo stesso sn di un precedente
Quando il trasmettitore riceve un ACK lo può assegnare al pacchetto corretto
Da quali componenti è composto il protocollo di ritrasmissione Go Back N? Cos’è e come si calcola la sua efficienza?
Come messaggio usa ACK Meccanismo di finestra scorrevole: se il riscontro del primo pacchetto arriva prima della fine della finestra, la finestra viene fatta scorrere di una posizione, sennò (quando si verifica un errore) si ricomincia a trasmettere la finestra dal primo pacchetto non riscontrato allo scadere di un timeout Il riscontro (ACK) può essere collettivo, dunque convalidare la ricezione di pacchetti precedenti
Se non ci sono errori la trasmissione non si ferma mai (efficienza 100%)
Cos’è il piggy banking?
Gli ACK possono anche essere inseriti negli header dei pacchetti che viaggiano in direzione opposta
Come funziona lo sliding window flow control?
Controllo di flusso a finestra mobile
E’ possibile usare un meccanismo come quello del Go-Back-N
La sorgente non può inviare più di W trame (stessa funzione del parametro N) senza aver ricevuto il riscontro
I riscontri vengono inviati dal ricevitore solo quando i pacchetti vengono letti (tolti dal buffer) dal livello superiore
Come può essere usato il campo W nello sliding window flow control?
Può essere usato per la gestione della finestra del controllo di flusso, comunicando lo spazio di buffer libero. Si può anche decidere di comunicare un numero minore dell’effettivo spazio libero come margine di sicurezza.
Quali servizi offre e quali sono le caratteristiche del protocollo TCP?
Mediante TCP è possibile costruire applicazioni che si basano sul trasferimento di file senza errori tra host remoti
Il TCP effettua anche un controllo di congestione end-to-end che limita il traffico in rete e consente agli utenti di condividere in modo equo le risorse
TCP è connection oriented:
Prima del trasferimento di un flusso dati occorre instaurare una connessione mediante opportuna segnalazione, che si appoggia su una rete connectionless (datagram) e le connessioni TCP sono di tipo full-duplex
Come viene gestito il flusso dati in una comunicazione tra socket TCP?
TCP trasmette un flusso di dati, la socket del trasmettitore converte il flusso di dati in segmenti che possono essere trasmessi in rete, le dimensioni dei segmenti sono variabili. Il processo applicativo che vuole comunicare passa i dati alla TCP socket che li posiziona in un buffer da cui, periodicamente, o quando avvengono particolari condizioni, TCP forma un segmento.
Quale meccanismo di controllo d’errore utilizza TCP?
TCP adotta un meccanismo per il controllo delle perdite di pacchetti di tipo Go-Back-N
Da quali campi è formato l’header di un segmento TCP?
Source port, Destination port: indirizzi di porta sorgente e porta destinazione di 16 bit
Sequence Number: il numero di sequenza del primo byte nel payload
Acknowledge Number: numero di sequenza del prossimo byte che si intende ricevere (numero valido solo se flag ACK valido)
HLEN (4 bit): contiene la lunghezza complessiva dell’header TCP, che DEVE essere un multiplo intero di 32 bit
Window: contiene il valore della finestra di ricezione come comunicato dal ricevitore al trasmettitore
Checksum: il medesimo di UDP, calcolato in maniera uguale
Flags:
URG: vale 1 se vi sono dati urgenti e quindi il TCP deve passare in modalità urgente; in questo caso urgent pointer punta all’ultimo byte dei dati all’interno del flusso oltre il quale TCP può tornare in modalità normale
ACK: vale 1 se il pacchetto è un ACK valido; in questo caso l’acknowledge number contiene un numero valido
PSH: vale 1 quando il trasmettitore intende usare il comando di PUSH; il ricevitore può anche ignorare il comando (dipende dalle implementazioni)
RST: reset, resetta la connessione senza un tear down esplicito
SYN: synchronize; usato durante il setup per comunicare i numeri di sequenza iniziale
FIN: usato per la chiusura esplicita di una connessione
Options and Padding: riempimento (fino a multipli di 32 bit) e campi opzionali, es., durante il setup per comunicare il MSS o il fattore di scala della finestra
Cos’è il MSS?
Il MAX SEGMENT SIZE definisce la dimensione massima del segmento che verrà usata nella connessione TCP
La dimensione è decisa dal mittente durante la fase di setup, di default è 536 byte, il valore massimo 65535 byte
Cos’è il fattore di scala della finestra?
Definisce il fattore di scala della finestra, di default è 1
L’opzione fa sì che venga moltiplicato il valore del campo Window di un fattore pari a 2 elevato al valore contenuto nel campo fattore di scala
Quali sono le porte delle applicazioni più diffuse?
22 SSH 21 FTP signalling 20 FTP data 23 telnet 25 SMTP 53 DNS 80 HTTP 110 POP 143 IMAP
Come avviene il setup delle connessioni? Three Way HandShake
- Passive open: Il processo applicativo server comunica alla socket di essere pronto a ricevere connessioni
- Active open: Il processo applicativo client comunica alla socket di volersi connettere a una data socket
- Il client manda un SYN con un SN iniziale casuale (900)
- Quando il client lo riceve manda un ACK/SYN con un SN iniziale casuale (6667) e AN (901)
- Quando il client riceve l’ACK/SYN invia un ACK con AN = 6668 ed SN = 901 ed inserisce anche la dimensione della finestra del server.
- A questo punto la connessione TCP è aperta sul client la socket client notifica all’applicazione che la
connessione è aperta - Non appena il TCP server riceve l’ACK del TCP client, notifica al suo applicativo che la connessione è aperta
Come avviene il teardown (chiusura) delle connessioni TCP?
Il socket TCP che chiude la connessione invia un messaggio di FIN (flag FIN=1) con gli ultimi dati
L’altro socket invia un ACK per confermare la chiusura
La connessione rimane comunque aperta nell’altra direzione e quindi il TCP dall’altra parte può continuare ad inviare dati
Infine, il TCP dall’altra parte chiude la connessione invia anch’esso un messaggio di FIN (flag FIN=1)
Il TCP che aveva già chiuso la connessione in direzione opposta invia un ACK finale per confermare
Qual è l’utilità del flag RST?
Il flag RST se impostato permette di chiudere la connessione in entrambi le direzioni ed interrompendo ogni invio dati
Come viene eseguito il controllo sul flusso nel protocollo TCP?
Il TCP ricevente controlla il flusso di quello trasmittente ed organizza i dati ricevuti in buffer di entrata, al contrario il TCP trasmittente li organizza in buffer di uscita per inviarli al momento giusto
Nel lato ricevitore:
Esiste il campo Receiver Window (RCVWND) che indica lo spazio disponibile per ricevere nuovi dati
Nel lato trasmittente:
Esiste il campo Send Window (SNDWND): parte inutilizzata del buffer, rappresenta i byte che possono essere trasmessi senza attendere ulteriori riscontri
Cos’è la Silly Window Syndrome lato ricevente e lato trasmittente? E quali sono le rispettive soluzioni?
Lato ricevitore:
Se il ricevitore per qualche eventualità svuota lentamente il buffer di ricezione, il trasmettitore invia segmenti di finestra molto piccola ed invia segmenti corti con molto overhead (penalità: poca informazione e molti più header)
La soluzione è l’algoritmo di Clark: il ricevitore “mente” al trasmettitore indicando una finestra nulla sino a che il suo buffer di ricezione non si è svuotato per metà o per una porzione almeno pari al MSS
Finestra = max(1/2 Receive_Buffer_Size, Maximum_Segment_Size)
Lato trasmettitore:
L’applicazione genera dati da inviare lentamente e la socket invia segmenti molto piccoli man mano che vengono prodotti
La soluzione è l’algoritmo di Nagle: il TCP sorgente invia la prima porzione di dati anche se corta, gli altri segmenti vengono generati e inviati solo se: 1 - Il buffer d’uscita contiene dati sufficienti a riempire un MSS, 2- Quando si riceve un acknowledgement per un
segmento precedente
Come viene gestito il controllo d’errore nel protocollo TCP?
Il meccanismo di ritrasmissione è di tipo Go-back-N con Timeout con delle differenze:
TCP mantiene nel buffer anche i segmenti fuori ordine
Quando arrivano i segmenti mancanti la finestra scorre in avanti fino al primo segmento non riscontrato in quelli ricevuti fuori ordine
Viene mandato un ACK che riscontra collettivamente anche i segmenti fuori ordine
Come viene stimato il valore ottimale del timeout?
Il TCP adatta il timeout di trasmissione alle condizioni reali della rete tramite gli algoritmi di Karn e Jacobson
All’inizio il timeout parte da 1 s
A seguito di una ritrasmissione è meglio passare all’algoritmo di Karn:
– RTT non viene aggiornato
– Il timeout è moltiplicato per un fattore fisso (tipicamente 2)
– Il timeout cresce fino ad un valore massimo
– Dopo un numero massimo di ritrasmissioni la connessione viene chiusa
Come viene gestito il controllo di congestione dal protocollo TCP?
Il modo più naturale per controllare il ritmo di immissione in rete dei dati per il TCP è quello di regolare la finestra di trasmissione. Il trasmettitore mantiene una Congestion Window (CWND) che varia in base agli eventi che osserva.
Il trasmettitore non può trasmettere più del minimo tra RCVWND e CWND. W = min(RCVWND, CWND)
Ogni perdita viene interpretata come un congestionamento della rete da TCP
La reazione ad un evento di congestione è quella di ridurre la finestra (CWND) a 1 MSS
Il valore della finestra CWND viene aggiornato dal trasmettitore TCP in base ad un algoritmo
Come funziona il meccanismo slow start?
Il trasmettitore pone la CWND a 1 segmento (MSS) e la SSTHRESH ad un valore di default molto elevato
Dunque essendo CWND < SSTHRESH si parte in Slow Start
La CWND viene incrementata di 1 per ogni ACK ricevuto (crescita esponenziale di ordine 2)
L’incremento può andare avanti fino
– Primo evento di congestione
– Fino a che CWND < SSTHRESH, se vale il contrario si entra nel meccanismo di congestion avoidance
– CWND < RCWND, altrimenti W viene posta pari a RCWND
Quando un collegamento (link) si definisce congestionato?
Un link è congestionato quando la somma dei ritmi di trasmissione dei flussi che lo attraversano è maggiore della sua capacità
Cosa accade quando scade un timeout di ritrasmissione? (TCP)
Il TCP reagisce ponendo SSTHRESH uguale alla metà dei “byte in volo” e ponendo CWND a 1MSS
SSTHRESH = max(flightbyte/2, 2MSS)
Dunque CWND è minore di SSTHRESH e si entra nella fase di Slow Start
Il trasmettitore riparte ritrasmettendo tutti i segmenti a partire da quello per cui il timeout è fallito
Come funziona il meccanismo di Congestion Avoidance?
Si incrementa la CWND di 1/CWND ad ogni ACK ricevuto (creascita lineare della finestra)
Descrivi i meccanismo di fast retransmit e fast recovery
Se arrivano ACK duplicati un pacchetto sarà andato perso. Se arrivano ACK duplicati vuol dire che i pacchetti successivi a quello perso sono arrivati (niente congestione) e se non c’è congestione si può incrementare la CWND del numero di
pacchetti sicuramente arrivati.
- Alla ricezione del 3° ACK consecutivo duplicato (con lo stesso AN): Si pone: SSTHRESH = max(flightbyte/2, 2MSS)
- Viene ritrasmesso il pacchetto indicato dall’AN
- Si pone la CWND = SSTHRESH + 3*MSS
- Per ogni ulteriore ACK duplicato ricevuto la CWND viene incrementata di 1
- Vengono trasmessi nuovi segmenti se consentito dai valori di CWND e RWND
- Appena arriva un ACK che riscontra nuovi dati si esce dalla fase di fast recovery e si pone di nuovo:
CWND = SSTHRESH = max(flightbyte/2, 2MSS)