Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
TCP.
TCP utilizza un meccanismo di timeout e ritrasmissione per recuperare i segmenti persi.
Il timeout dovrebbe essere più grande del tempo di andata e ritorno sulla connessione
(RTT), ossia del tempo trascorso da quando si invia un segmento a quando se ne riceve
l’ACK.
Un valore troppo vicino al RTT può generare timeout prematuri a causa della natura
stocastica del tempo di percorrenza nella rete dei pacchetti. Un valore troppo elevato
rende il protocollo TCP troppo lento a reagire alla perdita di segmenti.
il tempo misurato tra l’invio
Sia SampleRTT di un segmento e la ricezione del suo ACK,
a esclusione dei segmenti ritrasmessi. Ciò comporta la misurazione di un SampleRTT a
ogni RTT. Sia EstimatedRTT una media dei valori di SampleRTT,
EstimatedRTT = (1-) x EstimatedRTT + x SampleRTT
–
Il valore raccomandato per è 0,125 (ossia 1/8 shift right logical di 3 bit). Sia DevRTT
la stima della variazione di EstimatedRTT, –
|SampleRTT
DevRTT = (1-) x DevRTT + x EstimatedRTT|
Il valore raccomandato per è 0,25 (ossia ¼). L'intervallo di timeout è calcolato come
TimeoutInterval = EstimatedRTT + 4 x DevRTT
È dunque impostato il timeout con un margine dalla stima del RTT che dovrebbe essere
grande quando c’è molta fluttuazione nei valori di SampleRTT e piccolo in caso
contrario.
Descrivere come viene realizzato il controllo di flusso in TCP.
Quando un destinatario di una connessione TCP riceve pacchetti in sequenza, li salva
dentro un buffer di ricezione, dal quale potranno essere letti dal processo applicativo,
Se l’applicazione
non necessariamente nel loro istante di arrivo. è relativamente lenta
nella lettura dei dati, può accadere che il mittente mandi in overflow il buffer di ricezione
inviando molti dati troppo rapidamente.
TCP offre un servizio di controllo di flusso per evitare che il mittente saturi il buffer di
ricezione del destinatario. Il mittente mantiene una variabile (rwnd), detta finestra di
ricezione, che fornisce info sullo spazio libero disponibile nel buffer del destinatario.
Nel contesto di un trasferimento di file, siano RcvBuffer la dimensione del buffer di
ricezione, LastByteRead l'ultimo byte del flusso letto dal processo applicativo dal buffer
e LastByteRcvd l'ultimo byte del flusso ricevuto. Dato che TCP non può saturare il buffer
– ≤
allocato, si deve avere LastByteRcvd LastByteRead RcvBuffer. Per il mittente, la
finestra viene impostata alla quantità di spazio disponibile nel buffer, rwnd = RcvBuffer
– –
(LastByteRcvd LastByteRead, e si tiene conto anche di LastByteSent che è l'ultimo
byte del flusso inviato, e LastByteAcked che è l'ultimo byte del flusso che ha ricevuto un
– ≤
ACK. Il controllo di flusso è assicurato mantenendo LastByteSent LastByteAcked
ovvero la quantità di dati “in aria” ancora senza ACK viene mantenuta in modo
rwnd,
tale da non mandare il buffer di ricezione in overflow. L'effetto del controllo di flusso è
un rallentamento da parte del mittente.
Se accade che il buffer si saturi (rwnd diventa pari a 0), allora il mittente continua a
mandare segmenti da 1 byte, a cui il destinatario risponde con un ACK. Questo accade
poiché se rwnd = 0, il mittente non invia più segmenti, ma non ha modo di essere
avvertito dal destinatario di poter riprendere la trasmissione quando si sta svuotando il
buffer, poiché TCP fa pervenire un segmento al mittente solo se ha dati o un ACK da
inviargli.
Illustrare come viene instaurata e rilasciata una connessione TCP.
Quando un host client vuole instaurare una connessione con un host server tramite TCP
esegue la seguente procedura:
1. TCP lato client invia uno speciale segmento al TCP lato server. Questo segmento
speciale non contiene dati a livello applicativo, ma il bit SYN nell’intestazione del
segmento è posto a 1. Inoltre, il client sceglie a caso un numero di sequenza
iniziale e lo pone nel campo numero di sequenza del segmento SYN iniziale.
Quest’ultimo viene incapsulato in un datagramma IP e inviato al server.
2. Il server estrae il segmento dal datagramma, alloca i buffer e le variabili TCP alla
connessione e invia un segmento di connessione approvata al client TCP. Anche
questo segmento non contiene dati a livello applicativo, ma nella sua il bit SYN è
posto a 1, il campo ACK assume un valore pari al numero di sequenza scelto dal
client più uno. Infine, il server sceglie il proprio numero di sequenza iniziale e lo
pone nel campo del numero di sequenza.
3. Alla ricezione del segmento del server, anche il client alloca buffer e variabili per
la connessione. L’host client invia quindi al server un altro segmento in risposta
al segmento di connessione approvata del server, ponendo nel campo ACK un
valore pari al numero di sequenza scelto dal server più uno.
Una volta completati questi tre passi, gli host client e server possono scambiarsi
segmenti contenenti dati. In ciascuno di questi futuri segmenti, il bit SYN sarà posto a 0.
Ciascuno dei due attori può richiedere la terminazione della connessione. Se il client
decide di chiudere la connessione, viene inviato un segmento TCP speciale al processo
server, nella cui intestazione il bit FIN ha valore 1. Quando il server riceve questo
segmento, risponde inviando un ACK al client. Il server spedisce quindi il proprio
segmento di shutdown, con il bit FIN uguale a 1. Infine, il client manda a sua volta un
a quest’ultimo segmento del server. A questo punto, tutte le risorse degli host
ACK
risultano deallocate.
Descrivere come viene realizzato il controllo di congestione nel protocollo
TCP.
La congestione avviene quando la rete non è in grado di gestire i flussi di dati che la
attraversano, in quanto ci sono troppe sorgenti che trasmettono troppe informazioni e
troppo velocemente. Si manifesta nella perdita dei pacchetti e in ritardi elevati.
Il protocollo TCP implementa il controllo di congestione con un approccio end-to-end,
sulla base dell’osservazione del comportamento della
ovvero deducendo la congestione
rete dai sistemi periferici. TCP impone a ciascun mittente un limite al tasso di invio sulla
propria connessione in funzione della congestione di rete percepita. Tale vincolo viene
mantenuto dalla finestra di congestione cwnd, che varia nel tempo ed è legata alla
–
percezione del livello di congestione nella rete. Deve valere LastByteSent
≤
LastByteAcked min{cwnd, rwnd}, dove rwnd è lo spazio libero nel buffer del
è l’ultimo byte è l’ultimo
destinatario, LastByteSent del flusso inviato e LastByteAcked
byte del flusso di cui si è avuto riscontro.
Un evento di perdita di segmenti viene dedotto dalla ricezione di 3 ACK duplicati, oppure
dalla scadenza del timeout. Nello specifico, ci sono 3 fasi principali nel controllo della
congestione in TCP:
Slow start: quando viene stabilita una connessione TCP, il valore di cwnd è inizialmente
posto a 1 MSS (maximum segment size), da cui una velocità di invio iniziale pari a
MSS/RTT; questo valore si incrementa di 1 MSS ogni volta che un segmento trasmesso
riceve un ACK. Questo processo ha come effetto il raddoppio della finestra di
congestione a ogni RTT.
La fine di questa fase avviene: se c’è un timeout, si ricomincia la slow start ponendo
cwnd=1, mentre una seconda variabile, ssthresh, si pone uguale a cwnd/2, ovvero metà
del valore che aveva la finestra di congestione quando la congestione è stata rilevata;
se si ricevono 3 ACK duplicati, e in quel caso si passa al fast recovery; se cwnd diventa
uguale a ssthresh, si passa alla congestion avoidance.
Congestion avoidance: quando si arriva in questo stato, cwnd è pari alla metà di
quanto era prima della congestione. Si riparte da questa situazione e si incrementa cwnd
L’approccio è l’incremento
di 1 MSS per ogni RTT, invece di raddoppiarla. da parte del
mittente TCP della propria cwnd di MSS × (MSS/cwnd) byte ogni qualvolta riceva un
nuovo ACK. se c’è
La fine di questa fase avviene: timeout, si ha lo stesso comportamento che si ha
in slow start; se si ricevono 3 ACK duplicati, dimezza il valore di cwnd (aggiungendo 3
MSS per tenere conto dei duplicati ricevuti) e imposta il valore di ssthresh pari a metà
del valore di cwnd al momento del ricevimento dei tre ACK duplicati. Infine, TCP entra
nello stato di fast recovery.
Fast recovery: si incrementa il valore di cwnd di 1 MSS per ogni ACK duplicato ricevuto
relativamente al segmento perso che ha causato l’entrata di TCP in questa modalità.
l’ACK
Quando arriva per il segmento perso, si passa a congestion avoidance dopo aver
se invece c’è timeout si passa a slow start
ridotto il valore di cwnd; come nei casi
precedenti.
Il controllo di congestione in TCP, ignorando la fase di slow start, consiste in un
incremento additivo lineare di cwnd alla ricezione di ACK e in un decremento
duplicati (supponendo l’assenza
moltiplicativo che dimezza cwnd in presenza di 3 ACK
di timeout).
Capitolo 4
Illustrare la regola di corrispondenza del prefisso più lungo (longest prefix
matching).
Tra le funzionalità delle porte di ingresso vi è quella di determinare la porta di uscita a
cui dirigere un pacchetto attraverso la struttura di commutazione, utilizzando le
informazioni della tabella di inoltro, che viene elaborata e aggiornata dal processore di
instradamento o ricevuta da un controller SDN remoto.
dell’indirizzo di destinazione del pacchetto con
Per fare ciò, il router confronta i primi bit
e se c’è corrispondenza il router inoltra il pacchetto verso il
una riga della tabella,
collegamento associato. Può succedere che un indirizzo di destinazione corrisponda a
più righe della tabella, e in questo caso il router adotta la regola di corrispondenza a
determinata la corrispondenza più lunga all’interno della
prefisso più lungo: cioè viene all’interfaccia di collegamento associata.
tabella. I pacchetti vengono così inoltrati
Descrivere come viene realizzata la gestione della mobilità nelle reti IP
(illustrare il protocollo DHCP).
DHCP (Dynamic Host Configuration Protocol) è un protocollo che consente a un host
che si collega a una sottorete di ottenere un indirizzo IP, appartenente alla sottorete, in
modo automatico, evitando la configurazione manuale. DHCP può essere configurato di
modo che un dato host riceva un indirizzo IP persistente, in modo che ogni volta che
l’host entra in rete gli venga assegnato sempre lo stesso indirizzo IP, oppure in modo da
assegnare a ciascun host che si connette un ind