Il TCP un protocollo del livello di trasporto.

Transcript

Il TCP un protocollo del livello di trasporto.
Il TCP: un protocollo
del livello di trasporto.
Appunti di Sistemi
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
Un esempio…
 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
3 2 b it
S o u rce p o rt
 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.
D e s t in a t io n p o r t
Sequence num ber
A ck. num ber
U A P R S F
R C S S Y I
G K H T N N
TCP
h e a d e r le n .
C hecksum
W in d o w s iz e
U r g e n t p o in t e r
O p t io n s ( z e r o o p iù p a r o le d i 3 2 b it )
D a t i ( o p z io n a li)
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.
3 2 b it
S o u rce p o rt
D e s t in a t io n p o r t
U D P le n g t h
U D P checksum
Fine