Your SlideShare is downloading. ×
5 Protocolli Trasporto Parte2
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

5 Protocolli Trasporto Parte2

628
views

Published on

Published in: Technology

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
628
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
35
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Parte 5 Modulo 7: Protocollo TCP Livello 4 (transport) [ TCP ] • Protocollo che fornisce un livello di trasporto affidabile ed orientato alla connessione • Servizi aggiuntivi rispetto a UDP – orientato alla connessione: comprende le fasi di instaurazione, utilizzo e chiusura della connessione – orientato al flusso di dati: considera il flusso di dati dall’host mittente fino al destinatario ( considera sia rete sia host terminali) – trasferimento con buffer: i dati sono memorizzati in un buffer e poi inseriti in un pacchetto quando il buffer è pieno – connessione full duplex (bi-direzionale): una volta instaurata una connessione, è possibile il trasferimento contemporaneo in entrambe le direzioni della connessione Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.65 1
  • 2. Cosa il TCP non garantisce • Comunicazioni in tempo reale • Garanzia di disponibilità di banda tra mittente e destinatario • Multicast (un mittente, molti destinatari) affidabile Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.66 TCP Transmission Control Protocol RFC: 793, 1122, 1323, 2018, 2581, 2988 Offre un livello di trasporto affidabile ed orientato alla connessione su di un canale inaffidabile Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.67 2
  • 3. Problemi da affrontare a livello TCP • Eterogeneità degli host e dei processi in comunicazione  c’è bisogno di un meccanismo per attivare e concludere una comunicazione in modo esplicito per entrambi • Eterogeneità dei tempi di trasmissione  c’è bisogno di un meccanismo di timeout adattativo • Possibilità di ritardi molto lunghi nella rete  c’è bisogno di gestire il possibile arrivo di pacchetti molto vecchi • Possibilità di avere un host destinatario con capacità molto diversa dall’host mittente  c’è bisogno di gestire capacità dei nodi eterogenee • Possibilità di avere capacità di rete molto diverse  c’è bisogno di gestire possibili congestioni dovute alla rete Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.68 Attributi di TCP [RFC 793] 1. Orientato alle connessioni 2. Trasmissione byte-stream 3. Connessione full-duplex 4. Affidabile 5. Trasmissione con buffer Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.69 3
  • 4. 1. Orientato alle connessioni • Connection oriented significa che: – viene creata una connessione tra i due host prima del trasferimento di qualunque dato tra le applicazioni (e quindi in modo trasparente per l’applicazione) – viene chiusa dopo il completamento del trasferimento dati • 3 fasi – Instaurazione – Utilizzo – Chiusura • Il processo applicativo viene avvisato solo se: – non si riesce a stabilire la connessione – la connessione viene interrotta Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.70 2. Trasmissione byte stream • Byte stream significa che la connessione viene trattata come un flusso di byte continuo dal mittente al destinatario • L’unità di trasmissione nello stream è il byte 1. Il processo applicativo mittente scrive byte 2. Il livello TCP, per inviarli, accorpa i byte in un segmento TCP 3. Il livello IP incapsula ogni segmento TCP in un datagram IP 4. Il processo applicativo destinatario legge byte Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.71 4
  • 5. 3. Connessioni full duplex • TCP può effettuare trasferimenti contemporanei in entrambe le direzioni della connessione, nell’ambito della stessa sessione – Full duplex  Half duplex • Ai processi applicativi, questi trasferimenti “appaiono” come due data stream non correlati • Tuttavia, le ultime versioni del TCP consentono di sovrapporre (piggybacking) comunicazioni di dati e comunicazioni di controllo, con l’invio di informazioni di controllo (es., ACK) insieme ai dati utente Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.72 TCP e gli altri layer dello stack 1 2 3 4 5 6 7 1 2 3 4 5 6 7 TCP TCP 3 IP IP IP 4 Network Access Net Access Network Access h2n h2n h2n NOTA: I router non gestiscono il livello TCP Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.73 5
  • 6. 4. Affidabile • Affidabile significa che TCP gestisce un trasferimento ordinato di uno stream di dati: acknowledgment + time-out+(ritrasmissione) – Ogni trasmissione andata a buon fine viene notificata (acknowledged) dall’host ricevente – Se l’host mittente non riceve un acknowledgement entro un intervallo di tempo predefinito (time-out), il mittente ritrasmette i dati – Acknowledgment e ritrasmissioni dovute ad eventuali perdite sono gestite in modo trasparente rispetto al processo applicativo Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.74 5.a Trasmissione con buffer • Per far fronte a molti dei problemi evidenziati in precedenza, il layer TCP deve utilizzare necessariamente un buffer. Un buffer consente, infatti, di ovviare a: – asincronia dell’invio dati da parte del processo applicativo – tempi di trasmissione differenti – capacità di invio e di ricezione differenti – segmenti persi o fuori ordine • Il livello TCP è responsabile della gestione del buffering dei dati e di determinare quando è tempo di inviare un certo insieme di dati. Alcune scelte: – congestion control: l’host mittente deve diminuire il tasso di trasmissione dei pacchetti quando la rete è congestionata – flow control: l’host mittente non deve sovraccaricare l’host ricevente Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.75 6
  • 7. 5.b Uso del buffer 1) Dati inseriti temporaneamente in un buffer del mittente e poi inseriti in un segmento TCP quando il segmento è pieno Maximum Segment Size (MSS): viene concordato o di default dipende dall’implementazione TCP (es., 1460 byte, 536 byte, 512 byte) Un’applicazione può anche specificare al protocollo TCP di inviare i dati che ha nel buffer, senza aspettare che il buffer sia pieno 2) Il segmento, a livello logico, viene poi inserito nel buffer del destinatario (in realtà, viene incapsulato in un datagram IP, spedito via rete e dopo aver attraversato i vari livelli, arriva nel buffer TCP di destinazione) applicazione applicazione scrive dati legge dati Vista socket socket door door logica TCP TCP send buffer receive buffer segmento Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.76 Parte 5 Modulo 8: Segmento TCP 7
  • 8. Segmento TCP • L’insieme di dati che il livello TCP chiede di trasferire al livello IP è detto segmento TCP • Ogni segmento TCP contiene: – Payload: dati del byte stream – Header: informazioni di controllo per identificare i byte dati Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.78 Formato del segmento TCP 0 4 10 16 24 31 SOURCE PORT DESTINATION PORT SEQUENCE NUMBER ACKNOWLEDGEMENT NUMBER HLEN RESERVED CODE BIT WINDOW SIZE CHECKSUM URGENT POINTER TCP OPTIONS PADDING DATI ... Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.79 8
  • 9. Formato del segmento TCP 0 4 10 16 24 31 SOURCE PORT DESTINATION PORT SEQUENCE NUMBER ACKNOWLEDGEMENT NUMBER HLEN RESERVED CODE BIT WINDOW SIZE • source port (16 bit): numero di porta del mittente • destination portCHECKSUM (16 bit): numero di porta del destinatario URGENT POINTER • sequence number (32 bit): numero di sequenza relativo al flusso di TCP OPTIONS PADDING byte che si sta trasmettendo • acknowledgement number (32 bit): ACK relativo ad un numero di DATI sequenza del flusso di byte che si .sta ricevendo (poiché il flusso è bi- . . direzionale, vi è la possibilità di piggybacking  si vedrà in seguito) Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.80 Formato del segmento TCP 0 4 10 16 24 31 SOURCE PORT DESTINATION PORT SEQUENCE NUMBER ACKNOWLEDGEMENT NUMBER HLEN RESERVED CODE BIT WINDOW SIZE • hlen (4 bit): lunghezza dell’header TCP (in multipliPOINTER se non vi CHECKSUM URGENT di 32 bit) sono opzioni  hlen = 20 byte TCP OPTIONS • reserved (4 bit): per usi futuri PADDING • code bit (6 bit): scopo e contenuto del segmento DATI • URG (urgent): dati segnati come urgenti dal livello applicativo ... • ACK (acknowledgement): valore del campo acknowledgement è valido • PSH (push): il destinatario deve passare i dati all’applicazione immediatamente • SYN (synchronize), FIN, RST (reset): usati per instaurazione, chiusura ed Protocolli e Architetture didella connessione Trasporto interruzione Rete 2009/2010 – Livello 5.81 9
  • 10. Formato del segmento TCP – window size (16 bit): dimensione della finestra in ricezione (indica il numero di byte che si è disposti ad accettare in ricezione) – checksum (16 bit): controllo integrità dei dati trasportati nel segmento TCP (del tutto analogo al caso del protocollo UDP) 0 4 10 16 24 31 – urgent pointer (16 bit): puntatore al termine dei dati urgenti (utilizzato raramente, nel SOURCE PORT DESTINATION PORT caso di trasmissione di caratteri speciali) – TCP options: campo opzionale di lunghezza variabile (serve a SEQUENCE NUMBER negoziare la dimensione del segmento massimo scambiato  MSS) – zero padding: per header con lunghezza multipla di 32 bit (se opzioni) ACKNOWLEDGEMENT NUMBER HLEN RESERVED CODE BIT WINDOW SIZE CHECKSUM URGENT POINTER TCP OPTIONS PADDING DATI ... Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.82 Checksum TCP Utilizzato per rilevazione errori nei dati trasportati: calcolato usando un maggior numero di informazioni di quelle presenti nell’header TCP (vi sono anche informazioni IP)  definizione di uno pseudo-header TCP 32 bit indirizzo IP mittente indirizzo IP destinatario zero padding protocollo lunghezza TCP • zero padding: dimensione dello pseudo-header, multiplo di 32 bit • protocollo: campo protocollo del datagram IP • pseudo-header anteposto al segmento TCP • checksum calcolato su pseudo-header e intero segmento TCP • pseudo-header non è trasmesso dal mittente Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.83 10
  • 11. Dati urgenti (trasmissione fuori banda) • Servono a trasportare segnali speciali come ^C, ^Z, … in modo che possano essere recapitati immediatamente al processo applicativo • All’arrivo all’host destinatario, scavalcano lo stream e vengono recapitati immediatamente al processo applicativo • Il puntatore punta alla fine del blocco dei dati urgenti • I dati urgenti iniziano all’inizio del segmento Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.84 Negoziazione del MSS • Le TCP OPTIONS consentono di negoziare il Maximum Segment Size (MSS) per – garantire che il segmento entri nei rispettivi buffer – evitare il più possibile la frammentazione al livello h2n – sfruttare al meglio la banda • MSS troppo piccolo  overhead eccessivo dovuto agli header • MSS troppo grande  elevati rischi di frammentazione nell’attraversamento dei livelli dello stack sottostanti IP-h2n  Default MSS = 536 byte • L’ACK viene mandato a livello del segmento originale. Quindi se un frammento viene perso, tutto il segmento deve essere riinviato Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.85 11
  • 12. Numeri di sequenza e acknowledgment Numero di sequenza per un segmento TCP è dato da: - primo ISN random - poi offset del primo byte del flusso dati inviati dal mittente (L’Initial Sequence Number è scelto casualmente con l’obiettivo di minimizzare la probabilità che sia presente un segmento identificato con lo stesso numero appartenente ad una connessione precedente con identici numeri di porta) Esempio: Si supponga di trasferire un file di 500000 byte, con MSS=1000 byte. I numeri sequenza saranno: X, X+1000, X+2000, … #seq #seq segmento 1 segmento 2 data for 500th segment Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.86 Numeri sequenza e acknowledgment (2) Il numero di acknowledgment per un segmento TCP: • TCP è full duplex: l’host A può ricevere dati dall’host B mentre sta inviando dati a B sulla stessa connessione • Segmento da B a A: - numero di sequenza: numero sequenziale del byte del flusso dati - numero di acknowledgment: numero di sequenza del successivo byte che A si aspetta di ricevere da B (tutti i byte precedenti sono stati ricevuti (acknowledgement incrementale) Esempi - A ha ricevuto da B i segmenti da 0 a 999 byte e da 1000 a 1999 byte, per cui il numero di acknowledgment nel segmento da A a B  2000 - A ha ricevuto da B i segmenti da 0 a 999 byte e da 2000 a 2999 byte, per cui il numero di acknowledgment nel segmento da A a B  1000 Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.87 12
  • 13. Gestione ack • Nella direzione da host1 a host2 viaggiano i segmenti dati inviati da host1 a host2 e i segmenti di ack inviati da host1 a host2 (in risposta ai segmenti dati inviati da host2 a host1) • Nella direzione da host2 a host1 viaggiano i segmenti dati inviati da host2 a host1 e i segmenti di ack inviati da host2 a host1 (in risposta ai segmenti dati inviati da host1 a host2); • Il campo code bit serve a distinguere fra i due tipi di segmenti, dati e di ack, che viaggiano nella stessa direzione Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.88 Gestione ack migliorata: piggybacking • Obiettivo: aspettare e combinare • Nella direzione, per esempio, da host2 a host1 faccio viaggiare nello stesso segmento: – sia i dati che l’host2 deve inviare a host1 – sia gli ack che host2 deve inviare a host1 in risposta ai segmenti dati inviati da host1 a host2 • Piggybacking  “portare sulle spalle” Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.89 13
  • 14. Piggybacking 1 - 2 - 3 a 4 b 5 c 6 d 7 e 8 f ... . a - b - c 1 d 2 e 3 f 4 g 5 h 6 ... . Si sfrutta il flusso inverso opposto per portare gli ack dei pacchetti ricevuti Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.90 Parte 5 Modulo 9: Instaurare e chiudere una connessione TCP 14
  • 15. Instaurazione di una connessione • Nel TCP il mittente ed il destinatario, prima di iniziare il trasferimento dei segmenti contenenti i dati, instaurano la connessione • Modello client/server – client: inizia la connessione – server: deve essere già attivo, in attesa, viene contattato dal client • Inizializzazione delle variabili del TCP – numeri di sequenza dei segmenti – informazioni necessarie per la gestione del buffer di trasmissione e ricezione Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.92 Instaurazione di una connessione (2) • Quando un client richiede una connessione, invia un segmento TCP speciale, detto “SYN” segment (SYN sta per synchronize) al server • Il client deve conoscere a chi spedire la richiesta, per cui nell’header del segmento deve specificare: – La porta del server? SI – L’indirizzo IP? NO • Per accettare la connessione, il server deve essere già in attesa di ricevere connessioni Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.93 15
  • 16. Instaurazione di una connessione (3) Il segmento SYN del client include: • Initial Sequence Number (ISN) del client: – un numero di 32 bit – Il numero è scelto in modo pseudo-casuale tra 0 e 232-1 – Se il numero iniziale è 2032 e ci sono da spedire 5000 byte, tutti i byte saranno numerati da 2032 a 7031 – La numerazione dei byte in una direzione è indipendente dalla numerazione dei byte nell’altra direzione – Nell’intestazione di ogni segmento è riportato solo il numero di sequenza del primo byte dei dati contenuto nel segmento. Gli altri byte del segmento sono numerati di conseguenza Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.94 Instaurazione di una connessione (3) Il segmento SYN del client include anche: • Maximum Receive Window (MRW) del client: il massimo numero di byte che il client è in grado di ricevere nel suo buffer – necessario per la regolazione del flusso dello stream di byte • Maximum Segment Size (MSS): la massima dimensione del segmento (informazione non sempre inviata) • NON HA payload (dati del messaggio), ma solo il TCP header! Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.95 16
  • 17. Instaurazione di una connessione (4) Il segmento SYN del server include: • Initial Sequence Number (ISN) del server: un numero pseudo-casuale • ACK del server: client_ISN+1 • Maximum Receive Window (MRW) del server • Maximum Segment Size (MSS): la massima dimensione del segmento (informazione non sempre inviata) • NON HA payload (dati del messaggio), ma solo il TCP header Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.96 Instaurazione di una connessione (Three-way handshaking) • Il client invia al server un segmento di controllo con SYN=1, e specifica nello stesso segmento il proprio numero iniziale di sequenza (client_isn) • Il server riceve il segmento del client con SYN=1 • Se accetta, il server invia un segmento di controllo con SYN=1, ACK=client_isn+1, ed il proprio numero iniziale di sequenza (server_isn) • Il client segnala la definitiva apertura della connessione inviando un segmento di controllo con SYN=0, ACK=server_isn+1, e numero di sequenza client_isn +1 Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.97 17
  • 18. Three-way handshacking 1. Client: “Hello server, voglio parlare con te, e comincerò con il byte che indicherò con il numero X” 2. Server: “OK, sono disponibile a parlare. Il mio primo byte sarà indicato con il numero Y e so che il tuo prossimo byte sarà indicato con X+1” 3. Client: “D’accordo, so che il prossimo byte che mi invierai sarà indicato con il numero Y+1” Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.98 Chiusura (polite) della connessione (esempio lato client) - Il client invia un segmento di client server controllo con bit FIN=1 al server Applicazione chiude - Il server riceve FIN, invia ACK Send FIN - Il server chiude la connessione lato client-server ed invia FIN=1 al client Informa - Il client riceve il segmento con applicazione FIN=1 ed invia ACK Applicazione chiude - Il server riceve ACK Send FIN - Il client attende il timeout dell’ACK inviato; allo scadere anche la connessione lato server-client viene timed wait chiusa closed Perché tante “fasi” nella chiusura? closed Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.99 18
  • 19. Chiusura (polite) della connessione (2) • Dopo che la connessione TCP è stata chiusa (ovvero è stato inviato l’ultimo ACK dal client), ci potrebbe essere ancora qualcosa da fare. Per esempio: – Se l’ultimo ACK si perde?  L’ultimo segmento FIN verrà inviato nuovamente, e dovrà essere notificato con un ACK – Se segmenti persi o duplicati dovessero raggungere la destinazione dopo un lungo ritardo? • Quindi, il client TCP attende per un tempo TIME_WAIT (es., 30 secondi) prima di chiudere definitivamente la connessione per poter gestire queste situazioni anomale Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.100 Chiusura (reset) della connessione In condizioni normali, la connessione viene chiusa in modo “polite” tramite lo scambio di segmenti di controllo FIN e ACK, visto in precedenza • Talvolta, si verificano condizioni che portano ad interrompere la connessione in modo “brusco”, o dal lato server (tipicamente, per errori o sovraccarico) o dal lato client (tipicamente, in seguito a azione dell’utente) • TCP fornisce un meccanismo per la chiusura rapida: reset • L’host che decide il reset pone il campo del segmento RST=1 • L’altro nodo chiude immediatamente la connessione • Vengono rilasciate tutte le risorse utilizzate dalla connessione client server client server closing closing closed closed Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.101 19
  • 20. Protocollo TCP: funzionamento Il trasferimento dati tra host end-to-end avviene in 3 fasi: 1. Handshaking: fase di setup (con trasferimento di 3 segmenti) in cui ci si prepara al trasferimento dei dati – Si deve arrivare ad uno stato di setup riconosciuto da parte di entrambi gli host che devono comunicare 2. Trasmissione: fase di trasmissione (bidirezionale) di uno o più segmenti 3. Chiusura connessione Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.102 Ciclo di vita delle connessioni TCP Ciclo di vita del server TCP Ciclo di vita del client TCP NOTA I diagrammi si riferiscono solo all’apertura-chiusura delle connessioni. Ciò che succede durante la connessione è dentro lo stato e“established” Protocolli Architetture di Rete 2009/2010 – Livello Trasporto 6.103 20
  • 21. Diagramma delle transizioni di stato del protocollo TCP FASE DI INSTAURAZIONE DI UNA CONNESSIONE (server) (client) FASE DI CHIUSURA DI UNA CONNESSIONE Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.104 Parte 5 Modulo 10: Affidabilità del protocollo TCP 21
  • 22. Meccanismi per l’affidabilità 1. Acknowledgment (positivo) 2. Time-out 3. Ritrasmissione Meccanismi gestiti dal livello TCP in modo del tutto trasparente rispetto al processo applicativo Principî: – Ogni trasmissione andata a buon fine viene notificata (acknowledged) dall’host ricevente – Se l’host mittente non riceve un acknowledgement entro il time-out, il mittente ritrasmette i dati Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.106 Affidabilità del protocollo TCP Affidabilità: uso della tecnica di acknowledgement positivo con ritrasmissione  Il destinatario, quando riceve i dati, invia un acknowledgement (ACK) al mittente, che attende di ricevere un ACK prima di inviare il segmento successivo. Esempio Mittente Destinatario Invia pacchetto 1 Riceve pacchetto 1 Invia ACK 1 Riceve ACK 1 Invia pacchetto 2 Riceve pacchetto 2 Invia ACK 2 Riceve ACK 2 tempo Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.107 22
  • 23. Scenari di ritrasmissione Affidabilità: uso della tecnica di acknowledgement positivo con timeout e ritrasmissione  se il mittente non ha ricevuto ACK di un segmento dopo un certo periodo (timeout), ritrasmette il segmento Mittente Destinatario Pacchetto 1 Invia pacchetto 1 perso Pacchetto 1 dovrebbe essere arrivato ACK 1 dovrebbe ACK 1 dovrebbe essere inviato essere ricevuto Timeout Invia pacchetto 1 Riceve pacchetto 1 Invia ACK 1 tempo Riceve ACK 1 Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.108 Scenari di ritrasmissione (protocollo stop-and-wait) Ritrasmissione causata Ritrasmissione causata dalla perdita dell’ACK dalla perdita del segmento Host A Host B Host A Host B X perdita timeout timeout X perdita time In entrambi i casi, l’ack=100 non arriva. Nel primo caso, c’è una duplicazione. 6.109 Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 23
  • 24. Come stimare il “time-out”? Round Trip Time e Timeout Come stabilire il valore del timeout in trasmissioni TCP? – Timeout troppo breve: si effettuano ritrasmissioni non necessarie – Timeout troppo lungo: reazione lenta alla perdita di segmenti RTT UNICA CERTEZZA: Il timeout deve essere maggiore del Round Trip Time (RTT). Ma di quanto? Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.111 24
  • 25. RTT varia continuamente Motivazioni delle differenze del RTT: - fluttuazioni delle condizioni di traffico della rete - possibili cambiamenti di router nel percorso tra mittente e destinatario RTT Sequenza di datagrammi Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.112 Scelta del Timeout (old) Inizialmente si sceglieva: Timeout =  * RTTmedio dove la raccomandazione era:  = 2 Adesso, si utilizzano stime molto più sofisticate Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.113 25
  • 26. Scelta del Timeout SampleRTT: misura del tempo trascorso dalla trasmissione del segmento alla ricezione del suo ACK - Ignora ritrasmissioni, segmenti con ack cumulativi - SampleRTT varia dinamicamente  si usa una media pesata • EstimatedRTT: media pesata per stimare RTT al tempo t EstimatedRTT(t) = (1-x)*EstimatedRTT(t-1) + x*SampleRTT(t) • Exponential Weighted Moving Average (EWMA) • L’influenza dei campioni passati diminuisce in modo esponenziale • Il valore di x è compreso tra 0 e 1. Inizialmente, si sceglie tipicamente x=1/(n+1) dove n è il numero di campioni di RTT usati per il calcolo Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.114 Esempio della stima RTT 350 Impossibile v isualizzare l'immagine. La memoria del computer potrebbe essere insufficiente per aprire l'immagine oppure l'immagine potrebbe essere danneggiata. Riav v iare il computer e aprire di nuov o il file. Se v iene v isualizzata di nuov o la x rossa, potrebbe essere necessario eliminare l'immagine e inserirla di nuov o. 300 RTT (millisecondi) 250 200 150 100 1 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 Tempo (secondi) RTT stimata RTT campionata Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.115 26
  • 27. Scelta del Timeout (2) Scelta del timeout: Valore del RTT stimato più un margine di errore Timeout(t) = EstimatedRTT(t) + 4*Deviation(t) dove: Deviation(t) = (1-x)*Deviation(t-1) + x*abs[SampleRTT(t)-EstimatedRTT(t)] Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.116 Parte 5 Modulo 11: Gestione del buffer TCP 27
  • 28. Motivazioni per buffering: asincronia • Il TCP fa parte del Sistema Operativo, non del livello applicativo che gestisce l’invio e la ricezione dei dati • Deve tener conto di tutti gli eventi che si verificano in modo asincrono: – Il livello TCP del mittente non sa quando il processo applicativo deciderà di spedire dati – Il livello TCP del destinatario non sa quando il processo applicativo accetterà (o chiederà) di prendere i dati arrivati L’unica possibilità è inserire temporaneamente i dati ricevuti in un buffer, in modo da poterli ricevere/trasmettere dal/al livello applicativo quando vengono inviati/richiesti  CONTROLLO DI FLUSSO (si vedrà in seguito) Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.118 Motivazioni per buffering: prestazioni • Il meccanismo di trasporto stop-and-wait è estremamente affidabile e semplice da implementare • Tuttavia, utilizza le risorse di rete e degli host in modo non efficiente  Il buffering consente di passare da un protocollo stop-and-wait al pipelining MOTIVAZIONI  Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.119 28
  • 29. Prestazioni (alcune definizioni) • Round Trip Time (RTT): tempo impiegato dal pacchetto per andare dal mittente al destinatario e ritorno • Tempo di propagazione: RTT/2 • Utilizzazione: percentuale di utilizzo di una risorsa in un intervallo di tempo Rate = transmission rate  capacità della rete, espressa in: bit/sec (bps), Kbit/sec (Kbps), Mbit/sec (Mbps), Gbit/sec (Gbps) L(pkt) = lunghezza pacchetto (espressa in byte o bit, e loro multipli) Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.120 Prestazioni (alcune definizioni) • Tempo di trasmissione pacchetto  L(pkt) / Rate [dimensionalmente: (bit) / (bit/sec) = sec ] • Tempo di trasferimento pacchetto (vista mittente)  [propagazione + trasmissione] + [propagazioneack ] = [RTTpkt/2 + L(pkt) / Rate] + [RTTack/2 ] Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.121 29
  • 30. Prestazioni protocollo stop-and-wait MITTENTE DESTINATARIO Trasmesso primo bit pkt, t=0 Trasmesso ultimo bit del pkt, (t = L / Rate) Arriva il primo bit del pkt RTT* Arriva l’ultimo bit del pkt; il destinatario invia l’ACK Arriva ACK, invia prossimo pkt; (t = RTT + L / Rate) RTT*= Round Trip Time ideale (se il destinatario non è rallentato da altri processi) Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.122 Es. prestazioni protocollo stop-and-wait Esempio • Canale fisico di capacità 1 Gbps (= 10^9 bit/sec) • Ritardo di propagazione (RTT/2) = 15 msec • Pacchetto da 1KB (=8 Kb) Rate = transmission rate L(pkt) = lunghezza pacchetto Calcolare il tempo di trasmissione pacchetto: Ttrasm/pkt = L(pkt) 8Kb 8 ·10^3 bit = = = Rate 10^9 bit/sec 10^9 bit/sec 8 bit = 10^6 bit/sec = 0.000008 sec = 0.008 msec Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.123 30
  • 31. Es. prestazioni protocollo stop-and-wait (2) Uso limitato delle risorse di rete MITTENTE DESTINATARIO Trasmesso primo bit pkt, t=0 Trasmesso ultimo bit del pkt, t = 0.008 Arriva il primo bit del pkt RTT* Arriva l’ultimo bit del pkt (t = 15.008) Il destinatario invia l’ACK Arriva ACK, invia prossimo pkt; t = 30.008 Tempo trasm. T L/R 0.008 Utilizzazione= = = = = 0.00027 (mittente) Tempo totale RTT + T RTT + L/R 30 + 0.008 In pratica, si riesce a trasmettere ~1 KB ogni 30 msec  ~264 Kbit ogni secondo, su un link da 1 Gbps!! Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.124 Come combinare affidabilità e efficienza SOLUZIONE Pipelining  il mittente invia un numero multiplo di segmenti prima di ricevere un ACK Dal protocollo stop-and-wait ad un protocollo pipelined Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.125 31
  • 32. Incremento delle prestazioni (es. per 3) MITTENTE DESTINATARIO Trasmesso primo bit pkt, t = 0 Trasmesso ultimo bit del pkt, t=L/R Arriva il primo bit del pkt 1 RTT* Arriva ultimo bit pkt 1, invia ACK Arriva ultimo bit pkt 2, invia ACK Arriva ultimo bit pkt 3, invia ACK Arriva ACK, invia prossimi pkt; t = RTT + L / R Utilizzazione incrementata di un fattore 3 rispetto a 0.00027 Tempo trasm. T 3*L/R 0.024 Utilizzazione= = = = = 0.0008 (mittente) Tempo totale RTT + T RTT + L/R 30 + 0.008 Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.126 Sintesi: Requisiti per l’implementazione 1. Necessità di un buffer lato mittente – Per mantenere i pacchetti inviati e di cui non ha ancora ricevuto l’ack 2. Necessità di un buffer lato destinatario – Per mantenere le sequenze di pacchetti dove non tutti i pacchetti sono arrivati o sono arrivati correttamente 3. Necessità di una “finestra a scorrimento” che denota il numero massimo di pacchetti che il mittente può inviare senza aver ricevuto un ACK dal destinatario Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.127 32
  • 33. Parte 5 Modulo 12: Sliding window Sliding window - mittente • Il mittente assegna a ciascun segmento un numero di sequenza Num_segm • Si ipotizza che questo numero possa crescere a piacere, anche se nella realtà il range va da 0 a 231-1 PRINCIPI: - Ad ogni istante, ciascun mittente gestisce una finestra scorrevole sugli indici dei segmenti, e solo quelli all’interno della finestra possono essere trasmessi (o sono stati spediti o stanno per essere spediti) - La dimensione della finestra del mittente è controllata prevalentemente dal destinatario Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.129 33
  • 34. Sliding window – mittente (2) • Per gestire la sliding window (finestra scorrevole), il mittente utilizza tre variabili: – Dimensione della finestra di invio SWS (Sender Window Size): indica il limite superiore per il numero di segmenti che il mittente può inviare in pipeline senza aver ricevuto un ACK – Numero di sequenza dell’ultima conferma ricevuta LAR (Last Acknowledgement Received) – Numero di sequenza dell’ultimo segmento inviato LSS (Last Segment Sent) Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.130 Sliding window - mittente (3) • Le tre variabili del mittente devono soddisfare la seguente relazione: LSS – LAR  SWS SWS 10 20 30 40 50 60 70 80 90 100110120130140150160 … .. LAR LSS SWS: Sender Window Size LAR: Last Acknowledgement Received LSS: Last Segment Sent Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.131 34
  • 35. Esempio: Sliding window - mittente (4) • IPOTESI: segment size di 10 byte LAR LSS [SWS] 10 20 30 40 50 60 70 80 90 100110120130140150160 … .. Byte inviati e Byte Byte che Byte non confermati (ack) inviati si stanno inviati che non per inviare si possono inviare Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.132 Sliding window - mittente (5) • Quando arriva un ACK, il mittente sposta LAR verso destra, consentendo così l’invio di un altro segmento • Inoltre, il mittente associa un time-out a ciascun segmento che trasmette, con conseguente ritrasmissione del segmento se il time-out scade prima di aver ricevuto il relativo ACK 10 20 30 40 50 60 70 80 90 100110120130140150160 … .. Se l’ack del segmento 60 arriva entro il time-out  trasmissione di 120 10 20 30 40 50 60 70 80 90 100110120130140150160 … .. Se l’ack del segmento 60 non arriva entro il time-out  ritrasmissione di 60 10 20 30 40 50 60 70 80 90 100110120130140150160 … .. Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.133 35
  • 36. Sliding window - destinatario • PRINCIPIO: per alcuni algoritmi di gestione (“Ritrasmissione selettiva”, ma non per il “Go- Back-N”), il destinatario può mantenere una finestra scorrevole sugli indici dei segmenti ricevuti • La dimensione della finestra e le modalità di gestione dipendono dall’algoritmo utilizzato Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.134 Sliding window – destinatario (1) • I destinatari che gestiscono una sliding window utilizzano tre variabili: – Dimensione della finestra di ricezione RWS (Receive Windows Size): indica il limite superiore dei segmenti “fuori sequenza” che il destinatario può accettare – Numero di sequenza del segmento accettabile più elevato LAS (Largest Acceptable Segment) – Numero di sequenza dell’ultimo segmento ricevuto “in sequenza” LSR (Last Segment Received) Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.135 36
  • 37. Sliding window - destinatario (2) • Le tre variabili del destinatario devono soddisfare la seguente relazione: LAS – LSR  RWS RWS 10 20 30 40 50 60 70 80 90 100110120130140150160 … .. LSR LAS RWS: Receive Window Size LAS: Largest Acceptable Segment LSR: Last Segment Received Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.136 Sliding window - destinatario (3) • Quando arriva un segmento con numero di sequenza Num_segm, il destinatario agisce come segue: – Se Num_segmLSR oppure Num_segm>LAS, significa che il segmento si trova al di fuori della finestra utile del destinatario e viene scartato – Se LSR<Num_segmLAS , il segmento si trova all’interno della finestra del destinatario e viene inserito nel buffer Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.137 37
  • 38. Es.: finestra a scorrimento (size 3) 10 20 30 40 50 60 70 80 90 100110120130140150160 … .. MITTENTE Quando arriva l’ack del segmento 10 10 20 30 40 50 60 70 80 90 100110120130140150160 … .. Send Pk1 In questo modo è Send Pk2 Rec. Pk1 possibile sovrapporre Send Pk3 Send Ack1 le comunicazioni sul Rec. Pk2 Rec. Ack1 Send Ack2 canale di andata Rec. Pk3 Send Ack3 e su quello di ritorno Rec. Ack2 Rec. Ack3 Tutto abbastanza semplice fin quando le “cose vanno bene”: cioè le trasmissioni vanno a buon fine e avvengono in modo ordinato. Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto succede se qualcosa va male … Ma cosa 6.138 Algoritmi per l’affidabilità del pipelining “Andar male” = mancato arrivo di un pacchetto ACK entro il timeout Vi sono due approcci alternativi per affrontare il problema dell’affidabilità della comunicazione nel caso di un protocollo pipelining: • Go-Back-N • Ritrasmissione selettiva NOTA: Sono algoritmi generali, non riferibili in modo specifico al protocollo TCP Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.139 38
  • 39. Algoritmo 1: Go-Back-N MITTENTE IPOTESI: Finestra (window size) di max N segmenti consecutivi, inviabili senza ACK • Timeout per singolo segmento • In caso di timeout(i)  il mittente deve ritrasmettere il segmento i e tutti i segmenti che hanno un numero di sequenza superiore ad i. Perché? Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.140 Algoritmo 1: Go-Back-N DESTINATARIO • “ACK cumulativi” da parte del destinatario  ACK(n) conferma che sono arrivati correttamente i primi n segmenti • C’è il buffer di ricezione, ma non c’è necessità di una sliding window gestita dal destinatario • Segmenti che arrivano fuori sequenza: – Vengono scartati senza essere inseriti nel buffer – Quindi non c’è bisogno di un buffer di ricezione sul lato destinatario per gestire il pipeling, ma solo per gestire l’asincronia tra l’arrivo dei dati a livello di TCP (sistema operativo) e il loro consumo da parte del processo applicativo del destinatario Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.141 39
  • 40. Funzionamento algoritmo Go-Back-N Ipotesi: Finestra N=4 Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.142 Algoritmo 2: Ritrasmissione selettiva • Il destinatario invia ACK relativo a ciascun segmento ricevuto correttamente – Bufferizzazione dei pacchetti, per consegnarli secondo la sequenza ordinata al processo applicativo • Il mittente ritrasmette soltanto i segmenti per i quali non ha ricevuto ACK dal destinatario entro il time-out – Gestisce un timeout per ciascun pacchetto • Sia mittente sia destinatario gestiscono la propria sliding window Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.143 40
  • 41. Finestra mittente e destinatario Ipotesi: finestra di dimensione N =14 Window del mittente Window del destinatario Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.144 Algoritmo di Ritrasmissione selettiva mittente destinatario Dati dall’applicazione: Segmento i ricevuto in • se c’è un numero di [rcv_base, rcv_base+N-1] sequenza disponibile nella • invia ACK(i) finestra, invia segmento • non ordinato: metti in buffer Timeout(i): • ordinato: consegna al • ritrasmetti segmento i, processo applicativo; avanza inizializza nuovo timer per i la finestra al segmento ACK(i) nella finestra successivo non ancora [send_base, send_base+N]: ricevuto • segna segmento i ricevuto Segmento i ricevuto in [rcv_base-N, rcv_base-1] • se i è il segmento “base” non ancora ACK, incrementa la • ACK(i) finestra fino al successivo Altrimenti: pacchetto non ACK • ignora Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.145 41
  • 42. Funzionamento Ritrasmissione selettiva Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.146 Algoritmo del protocollo TCP • Sebbene sia stata proposta una modifica al protocollo TCP [RFC 2018] per andare verso un meccanismo di ritrasmissione selettiva pura, attualmente il TCP non segue nessuna delle due versioni (Go-Back-N e Ritrasmissione Selettiva) in modo puro, in quanto utilizza:  “ACK cumulativi” da parte del destinatario  ACK(n) conferma che sono arrivati correttamente i primi n byte dei segmenti dati inviati (come Go-Back-N)  Segmenti arrivati fuori ordine, vengono salvati nel buffer di ricezione (come Ritrasmissione Selettiva) Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.147 42
  • 43. Algoritmo del protocollo TCP (2) • Mittente e destinatario gestiscono due finestre di sequenze di segmenti da inviare e ricevuti • Il destinatario invia un ACK cumulativo relativo all’ultimo byte dell’ultimo segmento ricevuto senza errori ed “in sequenza” • Il mittente ritrasmette soltanto i segmenti per i quali non ha ricevuto ACK dal destinatario entro il time-out • Sia la window del destinatario sia quella del mittente possono avanzare di d posizioni (d1) Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.148 Algoritmo del protocollo TCP (es.) • LSR=5, cioè l’ultimo ACK inviato dal destinatario è relativo al segmento 5 • RWS=4 (receiver window size) e quindi LAS=9 • Se dovessero arrivare i segmenti 7 e 8, verrebbero memorizzati nel buffer perché si trovano all’interno della finestra del destinatario, ma poiché non è arrivato ancora il segmento 6, a seconda dell’implementazione del TCP: – non verrebbe inviato alcun ACK oppure – verrebbe inviato nuovamente ACK(5) • Quando arriva il segmento 6, il destinatario può inviare ACK(8), confermando la ricezione corretta di 6, 7 e 8 (cioè d=3), consentendo quindi di settare LFS=8 e LAS=12 Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.149 43
  • 44. Algoritmo del protocollo TCP (conseguenze) • Si evita la ritrasmissione di segmenti ricevuti correttamente che si verificava nel caso di Go-Back-N • Si sfruttano tutti gli ACK per comprendere che i segmenti sono stati ricevuti correttamente e, quindi, in caso di trasmissioni corrette, si velocizza l’avanzamento della finestra di spedizione (vedi esempi successivi) • In caso di time-out, la quantità di dati trasmettibile diminuisce perché il mittente non è in grado di far avanzare la finestra ed il buffer risulta occupato da altri segmenti. Più tempo occorre per accorgersi che un segmento è andato perduto, più si limita la capacità della banda di trasmissione ( necessità di comprendere problemi al più presto) Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.150 Scenari di ritrasmissione per ritardi (protocollo pipelining) Host A Host B Host A Host B Seq=92 timeout Seq=92 timeout Seq=100 timeout Seq=100 timeout Seq=92 timeout Caso molto particolare in cui ack=100 non arriva entro il timeout prestabilito, L’ack=100 arriva, ma oltre il timeout prestabilito. mentre ack=120 arriva addirittura entro il L’host A deve rinviare il segmento. Doppia timeout del segmento 92. duplicazione: segmento a host B, ack=120 a host A NON C’E’ RITRASMISSIONE! Perché? Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.151 44
  • 45. Altri due problemi da risolvere nel TCP • Il TCP è il livello che deve evitare di spedire più segmenti di quanti il destinatario sia in grado di riceverne  “Controllo di flusso” • Il TCP è il livello che deve evitare di spedire più segmenti di quanti la rete tra mittente e destinatario sia in grado di assorbirne  “Controllo di congestione” • Entrambi gli obiettivi vengono raggiunti determinando come adattare dinamicamente la dimensione della sliding window mittente Protocolli e Architetture di Rete 2009/2010 – Livello Trasporto 5.152 45

×