Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
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
La principale differenza tra TCP e UDP è l’affidabilità. TCP implementa determinate soluzioni basate su
protocolli a finestra per cercare di offrire su un canale non affidabile, servizi affidabili alle applicazioni che
stanno al livello superiore. È più complesso di UDP, poiché deve gestire ogni connessione in modo accurato
per garantire la consegna ordinata dei dati.
Ricapitolo protocolli pipeline:
• Go-back-N: nella pipeline (finestra di trasmissione) si hanno fino a N pacchetti non ancora riscontrati.
Il ricevitore manda solo ACK cumulativi, cioè dopo ogni pacchetto si invia un ACK che vale anche per i
pacchetti ricevuti in precedenza. Quando si hanno N pacchetti in attesa di ACK si ha un unico timer
(relativo al pacchetto più vecchio) che quando scade si invia nuovamente l’intera finestra di pacchetti.
• Selective repeat: il mittente può avere fino ad N pacchetti in attesa di ACK nella pipeline e il ricevitore
invia ACK individuali per ogni pacchetto ricevuto. Solo i pacchetti mancanti vengono ritrasmessi.
TCP è un protocollo punto-punto, cioè si ha un’unica sorgente ed un’unica destinazione (comunicazione
unicast a livello 3). Le comunicazioni multicast non sono permesse con TCP poiché bisogna mantenere le
variabili di stato relative alle singole comunicazioni tra due punti. Una comunicazione multicast IP dovrà avere
UDP come livello trasporto.
TCP riceve dati dal livello superiore come uno stream continuo di byte, senza senza confini di messaggio
definiti, li segmenta e si occupa di consegnarli in ordine al destinatario. Essendo un protocollo pipelined, TCP
può inviare più pacchetti in sequenza senza aspettare un ACK per ciascuno prima di trasmettere il successivo.
La dimensione della finestra di trasmissione, che determina il numero massimo di pacchetti inviabili
contemporaneamente, è regolata dai meccanismi di controllo di flusso e controllo di congestione.
TCP supporta uno scambio di dati full-duplex, creando due canali logici: uno per l'invio delle richieste e l'altro
per le risposte. Questi canali logici non influenzano direttamente la rete, poiché i router non li vedono; si
tratta infatti di una convenzione stabilita tra le due estremità della connessione.
119
Se la MTU (Maximum Transmission Unit) è di 1500 byte, la MSS (Maximum Segment Size) sarà anch'essa di
1500 byte o inferiore. Questo parametro definisce la dimensione massima dei segmenti inviati, che non potrà
essere superata.
TCP è orientato alla connessione, poiché richiede una fase di handshaking iniziale tra mittente e destinatario
per stabilire i parametri della comunicazione, come la MSS e altre opzioni.
L’header TCP è formato da 20 byte distribuiti su 5 righe, più eventuali campi opzionali. Tra i campi principali
troviamo:
numero di sequenza e numero di ACK,
utilizzati per contare i segmenti e per
riscontrare i segmenti ricevuti
(equivalenti ai campi dei protocolli a
finestra).
flag come RST, FIN, SYN che gestiscono
apertura e chiusura della connessione.
receive window, fondamentale per il
controllo di flusso
checksum, utilizzato per verificare
l’integrità dei dati su header e payload
(simile a UDP).
opzioni, presenti raramente, come il campo MSS (Maximum Segment Size), che viene specificato solo
durante la fase di apertura della connessione. Questo valore rappresenta l’unità minima della finestra,
che può crescere o decrescere di multipli di MSS
→ la PCI di TCP ha dimensione variabile.
sequence number: rispetto ai protocolli a finestra dove negli esercizi si inseriscono dei numeri che
indicano i pacchetti, in TCP non vengono contati i segmenti ma i byte nello stream totale: indica la
posizione del primo byte del messaggio nella sequenza di byte tramessi sulla connessione TCP. Il
numero di sequenza rappresenta il primo byte contenuto dentro il segmento. Per esempio, con uno
stream di 4000 byte e MSS pari a 500 byte, se il numero di sequenza iniziale è scelto randomicamente
come 0, avremo:
o Primo segmento: Seq. 0 (da byte 0 a 499).
o Secondo segmento: Seq. 500 (da byte 500 a 999).
o Terzo segmento: Seq. 1000 (da byte 1000 a 1499).
In realtà, il numero di sequenza non parte mai da 0, ma viene selezionato casualmente per ragioni di
sicurezza.
acknowledge number: è cumulativo ma non dice qual è l’ultimo byte ricevuto, ma dice qual è il
prossimo byte che il ricevitore si aspetta di ricevere. T
TCP utilizza una versione modificata del Go-Back-N, in cui i pacchetti fuori sequenza non vengono
scartati ma conservati, consentendo una finestra di ricezione più ampia (generalmente maggiore di 1).
Esempio: 120
1. Un utente sull’Host A schiaccia “C” e deve trasferire il
byte all’host B. Il numero di sequenza è randomicamente
partito da 42 (manda il byte 42) e l’ACK è 79 per via della
sequenza precedente. Il payload conterrà 1 byte, cioè il
carattere C.
2. B riceve il segmento e deve farne l’Acknowledge, perciò,
l’ACK sarà 43 (42+1 byte) cioè B si aspetta di ricevere il
byte 43. Come sequenza c’è il 79, come si aspettava
prima l’host A. Il payload è ancora una volta un byte.
3. A invia l’ACK (che è l’80 perché ha ricevuto il 79°) e come
sequenza mette 43 perché B ha chiesto il 43.
Quest’ultimo ACK non ha payload. Visto che il payload è vuoto, il messaggio successivo di A verso
B sarà solo con sequenza 43.
Inviare un ACK insieme a del payload vuol dire fare piggybacking.
TCP e la trasmissione affidabile
TCP realizza un servizio affidabile sopra una rete non affidabile tramite:
• Pipeline di segmenti, che permette di inviare più segmenti contemporaneamente
• Acknowledge cumulativi, che riducono la necessità di riscontri individuali per ogni segmento
• Singolo timer di ritrasmissione, associato al pacchetto più vecchio non ancora riscontrato
Le trasmissioni possono essere innescate da due eventi:
Timeout: se un segmento non viene riscontrato entro il tempo limite, viene ritrasmesso solo il segmento
scaduto (approccio simile al Selective Repeat). Questo riduce il sovraccarico rispetto alla ritrasmissione
dell’intera finestra.
ACK duplicati: se il mittente riceve più ACK duplicati per un segmento specifico, può ritrasmetterlo
senza attendere il timeout.
Con tali premesse, un trasmettitore TCP:
• Riceve dal livello applicazione lo stream di byte e costruisce i segmenti utilizzando dei numeri di
sequenza per identificarli univocamente
• Se non c’è già un timer attivo, ne fa partire uno relativo al segmento più vecchio
• Quando scatta un timeout viene ritrasmesso solo il segmento che ha causato il timeout (che non è
stato riscontrato). Non inviare nuovamente tutta la finestra è problematico se non si sono gestiti i
pacchetti fuori sequenza. Nella realtà non si hanno troppe perdite, poiché quando la rete inizia ad
essere congestionata interverrà il controllo di congestione, perciò, non ha senso rinviare ogni volta
tutta la finestra.
Una volta ritrasmesso il pacchetto che ha fatto scattare il timeout, il timer deve ripartire e sarà di
nuovo relativo al pacchetto più vecchio (identico al timer precedente poiché quello è il pacchetto non
ancora riscontrato).
• Alla ricezione degli ACK il timer associato viene annullato e bisogna far partire un nuovo timer se ci
sono ancora ACK da riscontrare (cioè per il pacchetto successivo).
Tutto funziona perché le perdite sono molto poche.
121
Ricevitore TCP
Il ricevitore TCP è in grado di gestire gli ACK ritardati. Quando arriva un segmento in sequenza con il numero
di sequenza corretto e il sistema funziona normalmente, il ricevitore può decidere di non inviare
direttamente l’ACK. Invece, può attendere la ricezione di un altro segmento
e inviare un ACK cumulativo che conferma entrambi i pacchetti ricevuti,
quello appena arrivato e quello precedente. Questo è un ACK cumulativo
ritardato. Se, invece, il ricevitore ha già un pacchetto in attesa di riscontro
(per via di un ACK ritardato) e l'ultimo pacchetto arriva in sequenza, l'ACK
viene inviato immediatamente. In generale, viene inviato un ACK ogni due
pacchetti ricevuti, con una sorta di "salto" nell'invio degli ACK.
Nel caso in cui un pacchetto arrivi fuori ordine (con un numero di sequenza
maggiore rispetto a quello atteso), il ricevitore invia un ACK duplicato,
indicando il numero di sequenza del byte successivo che si aspetta. Infine, se
il trasmettitore invia un segmento che parzialmente o completamente
riempie il “buco” di pacchetti fuori ordine, il ricevitore invia l’ACK relativo al
pacchetto ricevuto in sequenza e invierà il numero di sequenza relativo al
byte successivo che ci si aspetta di ricevere.
Questi ACK duplicati possono essere utilizzati come indicazione del fatto che c’è stata una perdita (a
differenza dei timeout). Il fatto di ricevere tanti ACK duplicati può essere indice del fatto che c’è stata una
perdita. Se un ACK viene duplicato più volte e si ricevono 3 ACK duplicati si intuisce che c’è stato un problema
e viene inviato nuovamente il pacchetto relativo. Questo si chiama TCP Fast Retransmit.
RTT: il valore ottimale di un RTT in un protocollo a
finestra è circa 2 volte il tempo di propagazione. In
generale, il timeout del timer TCP è più lungo del RTT,
ma questo valorepuò variare. Per poterlo stimare si
può utilizzare il metodo SampleRTT, che misura il
tempo di trasmissione tra l’invio del segmento e la
ricezione dell’ACK.
Poiché il RTT può variare a causa della congestione
della rete, è difficile stimarlo in modo preciso. Per
ottenere una stima più accurata, si utilizza
l'Estimated RTT, che combina il valore stimato al
tempo t-1 con il valore misurato al tempo t, pesando
i valori con il parametro α (dove α tipicamente è 0.125). Se α=0, si considera solo il passato; se α=1, solo il
presente. 122
Inoltre, si può usare la deviazione standard per stimare meglio il RTT, affinché il timeout si adatti
dinamicamente alla variabilità della rete.
Quando il timeout di trasmissione in TCP è settato ad un valore sensibilmente inferiore al round-trip time
possono verificarsi ritrasmissioni di segmenti non necessarie.
Controllo di flusso in TCP
Il controllo di flusso è un meccanismo che impedisce al trasmettitore di non sovraccaricare il ricevitore. Il
controllo di flusso rigu