230 likes | 375 Views
Il TCP: un protocollo del livello di trasporto. Appunti di Sistemi per la classe V sez. H A cura del prof. ing. Mario Catalano. Sul TCP.
E N D
Il TCP: un protocollo del livello di trasporto. Appunti di Sistemi per la classe V sez. H A cura del prof. ing. Mario Catalano
Sul TCP • Il protocollo TCP (Trasmission Control Protocol) fu progettato per fornire un flusso affidabile ( end-to-end) a partire da un un’internet non affidabile.E' quindi un protocollo "orientato alla connessione“. • Esso fu progettato per adattarsi dinamicamente alle proprietà di Internet (diverse topologie, ritardi, capacità...) e per essere robusto nei confronti di molte tipologie di guasto.
Come funziona il TCP • Ogni macchina che supporta TCP possiede un’entità di trasporto TCP, che gestisce i flussi di dati TCP e si interfaccia con il livello IP; può essere un processo utente, oppure far parte del nucleo. • Un’entità TCP riceve flussi di dati dai processi locali, li spezza in unità lunghe al più 64KB (tipicamente 1500, 3000byte) e spedisce queste unità come datagram IP separati.
IP e TCP • Siccome il livello IP non fornisce alcuna garanzia sulla consegna dei datagram, toccherà al TCP ritrasmetterli quando necessario, ed è proprio per questo che TCP è un protocollo affidabile mentre IP no. • (IP non sa cosa sia una CONNESSIONE: i pacchetti vengono inviati uno alla volta). • In altre parole TCP deve fornire l' AFFIDABILITA' CHE IP NON POSSIEDE!!!
Il modello di servizio del TCP • Il protocollo TCP si ottiene mediante la creazione di punti di accesso chiamati socket, ognuno dei quali è caratterizzato da un indirizzo IP dell’host e di un numero a 16bit rappresentante l’indirizzo locale dell’host detto port. • Per indicare uno dei processi in esecuzione su un dato calcolatore si usa il port number. • Un port corrisponde al terminale di un canale di comunicazione virtuale che TCP/IP mette • a disposizione del processo.
Per ottenere un servizio TCP si deve creare una connessione fra socket della macchina mittente e socket della macchina ricevente. È importante dire che un socket può essere utilizzato da più connessioni contemporaneamente. • Le porte inferiori a 256 sono dette porte ben note e sono dedicate a servizi standard. • Tutte le connessioni TCP sono full-duplex e punto-a-punto. • Il TCP non supporta il multicasting e il broadcasting. • Una connessione TCP consiste in un flusso di dati e non di messaggi.
Esempi di well-known port • Echo – port n.7 • FTP (controllo) – port n. 20 • FTP (dati) – port n. 21 • Telnet – port n. 23 • SMTP – port n. 25 • HTTP – port n. 80 • POP3 – port n. 110 • NNTP – port n. 119 • DNS – port n. 53
Quando un’applicazione passa i dati a TCP questo può spedirli immediatamente oppure salvarli in un buffer: per forzare l’output dei dati si può utilizzare il flag PUSH per indicare a TCP di non ritardare la comunicazione. • Un’ultima caratteristica saliente riguarda i dati urgenti: l’applicazione mittente può utilizzare il flag URGENT per forzare TCP a smettere di accumulare dati e trasmettere subito tutto.
I pacchetti del TCP • 1. Ogni byte di una connessione TCP possiede il proprio numero di sequenza a 32 bit. • I numeri di sequenza vengono utilizzati sia per il meccanismo degli ack, sia per quello delle finestre, inseriti in campi separati dal preambolo da 32 bit. • 2. Mittente e ricevente si scambiano i dati sotto forma di segmenti. • Un segmento consiste in un preambolo fisso a 20 byte seguito da zero o più byte di dati, la dimensione dei segmenti viene decisa da TCP. • 3. Sliding Window con ACK di risposta e timer per la ritrasmissione: la conferma si ha quando si riceve una sequenza corretta. • Il compito di risolvere eventuali problemi dovuti a errori, duplicazioni o perdite sta a TCP.
Ci sono però due limiti sulla dimensione dei segmenti ovvero ogni segmento incluso il preambolo TCP deve entrare in un pacchetto IP di 65.536 byte e ogni rete possiede un MTU(unità massima di trasferimento) e ogni segmento deve entrare in un MTU, l’MTU è lungo generalmente poche migliaia di byte e quindi definisce il limite superiore della dimensione del segmento; nel caso in cui un pacchetto attraversa una serie di reti senza essere frammentato e quindi arriva a una in cui MTU è inferiore alla dimensione del segmento, il router al confine frammenta il segmento in due o più segmenti più piccoli.
Il preambolo • Ogni segmento inizia con un preambolo fisso di 20byte, esso può essere seguito da opzioni di preambolo, dopo le opzioni possono seguire fino a 65535 -20 -20 = 65495 byte di dati dove i primi 20 si riferiscono al preambolo IP e i secondi al preambolo TCP.
I campi del preambolo • Source port e Destination port = estremi locali della connessione; • Sequence number = numero di sequenza; • Acknowledgement number = numero di ack specifica il prossimo byte atteso; • TCP header lenght = lunghezza del preambolo; • Campi NON usati • URG = flag urgente: il mittente manda al destinatario un messaggio urgente. Alcuni dati vengono inseriti nel pacchetto TCP e il flag URG=1. Il ricevitore interrompe quello che sta facendo e legge i dati inviati.
I campi del preambolo (2) • ACK serve per ignorare o meno l’ACK number (ACK=1 campo valido riscontrato) • PSH indica dati di tipo PUSH, cioè all'applicazione remota si richiede di consegnare i dati in arrivo il piu' presto possibile evitando che siano salvati in code di attesa. Ha il significato di spinta alla consegna. • RST per reinizializzare la connessione; può essere usato come REJ di un segmento non valido o per rifiutare la connessione.
I campi del preambolo (3) • SYN = per creare le connessioni, la richiesta di connessione viene caratterizzata da SYN=1 e ACK=0; (risposte SYN=1, ACK=1) • FIN = per chiudere una connessione; • Window = finestra, indica quanti byte possono essere spediti, si può utilizzare questo campo per fare il controllo di flusso ponendolo uguale a 0;
I campi del preambolo (4) • Checksum = verifica del preambolo e dati. • Options = eventuali opzioni (ad es. negoziazione del max. segmento TCP dell'host, negoziazione della massima finestra, ripetizione selettiva di uno o più segmenti.) • Data = dati veri e propri.
Gestione delle connessioni in TCP • In TCP le connessioni vengono create utilizzando il protocollo Three-Way handshake. • Per stabilire una connessione il server aspetta passivamente una connessione utilizzando le primitive LISTEN e ACCEPT, specificando una sorgente specifica oppure nessuna in particolare. • Il client esegue una primitiva di CONNECT specificando l’IP e la porta a cui si vuole connettere, la dimensione accettabile massima dei segmenti TCP e opzionalmente i dati utente.
Gestione delle connessioni in TCP (2) • La CONNECT invia un segmento TCP con ACK spento e SYN acceso e attende una risposta. • Appena questo arriva a destinazione l’entità TCP verifica l’esistenza di un processo che ha eseguito una LISTEN sulla porta identificata da Destination Port. • A questo punto può accettare o rifiutare la connessione: se accetta invia un segmento ACK. • Per terminare una connessione entrambe le parti possono inviare un segmento TCP con FIN acceso indicando che non si hanno più dati da trasmettere.
Gestione del trasporto • Il Server aspetta passivamente una connessione in arrivo eseguendo una Listen-Accept specificando o meno una particolare sorgente. • Client esegue una primitiva CONNECT con IP le porte di collegamento, la dim. max del segmento TCP . • Sono trasmessi il num. di sequenza (num. di byte trsmessi) e la grandezza della finestra che determina quanti byte possono ancora essere trasmessi (anche se riceve win=0, il mittente può comunque inviare: dati urgenti, richieste di reinvio dell'ultimo ack spedito).
Gestione del trasporto • L’idea di fondo è che la destinazione informa il mittente di volta in volta, con la conferma dell’arrivo dei segmenti, quanti altri byte possono essere spediti la prossima volta. • Si imposta un valore di default, ad esempio 4k: se c’è una coda, la destinazione riduce a 2k il prossimo segmento (altrimenti resta a 4k), se la coda peggiora, si riduce a 1k (altrimenti si resta a 2k, oppure, se migliora, si passa a 4k). • Se invece si sta congestionando, si passa a 0.
Il protocollo UDP • Il livello transport fornisce anche un protocollo non connesso e non affidabile, utile per inviare dati senza stabilire connessioni (ad esempio per applicazioni client-server). • Lo header di un segmento UDP è molto semplice. • La funzione di calcolo del checksum può essere disattivata, tipicamente nel caso di traffico in tempo reale (come voce e video) per il quale è in genere più importante mantenere un'elevato tasso di arrivo dei segmenti piuttosto che evitare i rari errori che possono accadere.