Programmazione su Reti Il livello trasporto di TCP/IP: TCP Giuseppe Persiano Dipartimento di...
-
Upload
gaspare-pugliese -
Category
Documents
-
view
219 -
download
4
Transcript of Programmazione su Reti Il livello trasporto di TCP/IP: TCP Giuseppe Persiano Dipartimento di...
Programmazione su Reti
Il livello trasporto di TCP/IP: TCP Giuseppe Persiano
Dipartimento di Informatica ed Applicazioni
Università degli Studi di Salerno
http://www.dia.unisa.it/~giuper
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
2
TCP: Transmission Control Protocol
Orientato allo stream:» non avendo una dimensione di segmento fissa, trasmette alla
destinazione la sequenza identica (stream) di byte che il mittente ha fornito a TCP nella macchina di provenienza.
Stream non strutturato:» In TCP non è necessario nessun tipo di formattazione
specifica della stream, quindi è demandata agli applicativi la corretta estrazione dei dati dai segmenti ricevuti.
» Simile ad un file del sistema Unix
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
3
TCP: Caratteristiche
Connessione di circuito virtuale:» La connessione è vista dagli applicativi come un
circuito fisico dedicato, quindi TCP è capace di fornire servizi del tipo Connection Oriented mentre il protocollo IP su cui appoggia, è in grado di fornire servizi Connection Less.
Connessione Full Duplex:» TCP consente il trasferimento simultaneo in entrambe le
direzioni per ogni connessione. Questo permette la trasmissione parallela di segmenti di dati in un senso e di segmenti di acknowledgement nell'altro.
TCP richiede più banda e più CPU di UDP
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
4
Bufferizzazione
TCP suddivide lo stream in segmenti indipendenti dal programma applicativo che li ha generati.
Dispone di un buffer dove immagazzinare la sequenza di byte.
Al verificarsi di certe condizioni alcuni dei dati sono trasmessi attraverso la rete.
La bufferizzazione consente una riduzione del traffico sulla rete "ottimizzando" in qualche modo il numero di segmenti da trasmettere.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
5
TCPheaderlength
Header TCP
0 4 10 16 19 24 32
Source Port Destination Port
Sequence Number
Acknowledgement Number
Checksum
Options
Window
Urgent Pointer
Reserved
Padding
URG
ACK
EOM
RST
SYN
FIN
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
6
Header di TCP
Flag:» Per identificare il tipo di informazione contenuta nel
segmento vengono impiegati i 6 bit di codice: URG (11): Il campo puntatore urgente è valido ACK (12): Il campo riscontro è valido PSH (13): Questo segmento richiede una “spinta” RST (14): Effettua il reset della connessione SYN (15): Sincronizza i numeri di sequenza FIN (16): Il trasmettitore ha raggiunto la fine
della sua stream di byte
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
7
Campi dell’header TCP
HLEN:» Contiene un numero intero che indica la lunghezza
dell'intestazione TCP del datagramma. Questa informazione è necessaria perché il campo opzioni è di lunghezza variabile.
Porta (provenienza/destinazione):» Contengono i numeri di porta di protocollo TCP che
identificano gli applicativi alle estremità della connessione.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
8
Campi dell’header TCP
Numero sequenziale:» questo campo identifica, nello stream di byte del trasmettitore, la
posizione dei dati nel segmento. Questo valore è riferito alla stream che fluisce nella medesima direzione del segmento, mentre il Numero di Riscontro si riferisce alla stream che fluisce nella direzione opposta.
Numero di riscontro:» Contiene il numero sequenziale del byte successivo a quello
correttamente ricevuto dalla destinazione. Tale campo è valido solo nei segmenti di riscontro, o nei segmenti utilizzanti la tecnica trasmissiva Piggy-backing, e fa riferimento allo stream di dati che fluisce nella direzione opposta a tale segmento.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
9
Campi dell’header di TCP
Nel datagramma di riscontro la destinazione comunica quale byte dello stream si aspetta di ricevere successivamente:» I riscontri specificano sempre il numero sequenziale del
primo byte non ancora ricevuto.» Esempio: in uno stream di 1000 byte segmentato in
blocchi di 100 byte, il primo riscontro conterrà il numero sequenziale 101.
» Questo metodo di riscontro cumulativo si ha il vantaggio che la perdita di un riscontro non blocca la trasmissione se confermato dal riscontro successivo.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
10
Campi dell’header di TCP
Nel datagramma di riscontro la destinazione comunica quale byte dello stream si aspetta di ricevere successivamente:» I riscontri specificano sempre il numero sequenziale del
primo byte non ancora ricevuto.» Esempio: in uno stream di 1000 byte segmentato in
blocchi di 100 byte, il primo riscontro conterrà il numero sequenziale 101.
» Questo metodo di riscontro cumulativo si ha il vantaggio che la perdita di un riscontro non blocca la trasmissione se confermato dal riscontro successivo.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
11
Campi dell’header TCP
Finestra:» Numero intero senza segno di 16 bit che specifica la
dimensione del buffer che il TCP ha a disposizione per immagazzinare dati in arrivo. È utilizzato per la gestione dinamica della dimensione della finestra scorrevole.
Puntatore urgente:» Il TCP permette la trasmissione fuori banda di dati
informativi ad alta priorità. Questi devono essere trasmessi il prima possibile, indipendentemente dalla loro posizione nella stream. Questo campo, se valido, conterrà un puntatore alla posizione nella stream, dei dati urgenti.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
12
Campi dell’header TCP
Checksum:» Campo di 16 bit contenente un valore intero utilizzato dal
TCP della macchina host di destinazione, per verificare l'integrità dei dati e la correttezza dell'intestazione. Questa informazione è di essenziale importanza perché il protocollo IP non prevede nessun controllo di errore sulla parte dati del frame. Per il calcolo del valore checksum il TCP ha bisogno di aggiungere una pseudointestazione al datagramma, per effettuare così un controllo anche sugli indirizzi IP di destinazione e provenienza.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
13
TCP: Protocollo di Connessione
La parte richiedente (client) invia un segmento SYN e specifica la porta del server e il proprio initial sequence number (ISN).» RFC793 specifica che ISN viene incrementato ogni 4
ms Il server risponde con un segmento contenente il
proprio SYN e dà l’ack (riscontro) del SYN del client ponendo l’ack al valore dell’ ISN del client + 1
Il cliente dà riscontro al SYN del server spedendo un ACK per l’ISN del server + 1.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
14
TCP: Opzione MSS
Il segmento di SYN contiene l’opzione Maximum Segment Size» ogni parte annuncia la taglia del più grande
segmento che si aspetta di ricevere» una grossa MSS aumenta il throughput ma corre il
rischio di frammentazione a livello IP.» per connessioni locali
MSS è sempre minore della MTU dell’interfaccia di uscita meno la lunghezza dell’header di TCP (1460 per Ethernet)
» per connessioni non locali MSS normalmente è posto uguale a 536
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
15
Opzione Reset
Segmento con bit Reset posto 1 è inviato in situazioni di errore» richiesta di connessione a porta con nessuna
applicazione legata (bind con i socket di Berkeley) il segmento di reset porta l’ack del ISN UDP usa ICMP port unreachable
» abortive release dati in buffer sono scartati La controparte riceve il segmento di reset e non
deve farne l’ack
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
16
Esempio di half-close
E’ possibile per una delle due parti di una connessione TCP chiudere il proprio canale di output e ricevere dati sull’altro canale.» La API dei socket di Berkeley prevede la system call
shutdownshutdown
Esempio: » rsh remote_host sort < datafilersh remote_host sort < datafile
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
17
Esempio di half-close
rsh bsdi sort < datafilersh bsdi sort < datafile» rsh rsh apre una connessione con il processo che esegue il
sort sull’host bsdi.» datafiledatafile è copiato sulla connesione.» l’output della connessione è dato in output.» sortsort non può iniziare fino a quando non sono arrivati tutti
i dati.» rsh rsh effettua una half-close per segnalare la fine dei dati.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
18
TCP: Calcolo del checksum di TCP
Lo pseudoheader viene creato e posto in testa al segmento TCP e sono aggiunti byte necessari per raggiungere un multiplo di 16 bit. Successivamente viene calcolata un checksum su tutto il messaggio così formato. Lo pseudoheader viene eliminato prima del passaggio a TCP.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
19
Figura tratta da:TCP/IP illustrated vol. 1 di
Richard W. Stevens
Diagramma di transizione degli stati di TCP
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
20
Stato TIME_WAIT
MSL (maximum segment life) è la durata massima della vita di un segmento
RFC793 raccomanda MSL = 2 minuti Quando TCP effettua una chiusura attiva, la
connessione resta nello stato TIME_WAUT per una durata doppia all’MSL.» Ciò per permettere di rispedire l’ack finale da inviare
all’altra parte. Se ciò accade l’altra parte va in timeout e re-invia il
FIN. » Nell’API Berkeley Socket, una porta locale non può essere
usata se la connessione è in TIME_WAIT opzione SO_REUSEADDRSO_REUSEADDR
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
21
Opzioni TCP
Campo opzioni in header TCP» Opzione MSS
1 byte kind (MSS ha kind=2) 1 byte len 4 2 byte MSS
» Opzione End 1 byte kind=0
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
22
TCP: Protocollo di terminazione
Ogni connessione TCP è full-duplex» i dati viaggiano nelle due direzioni
indipendentemente e ciascuna deve essere chiusa indipendentemente
Per chiudere una direzione di flusso viene spedito un segmento con bit di FIN» ciò indica solo che non arriveranno più dati lungo
questa direzione
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
23
Riscontro e ritrasmissione
Riscontro e ritrasmissione:» Consiste nella ritrasmissione di un segmento se non
è giunta conferma entro un tempo massimo (time-out).
Time-Out:» Al momento della trasmissione di ogni segmento, il
TCP attiva una timer.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
24
Time Out
Time-Out:» tempo massimo entro cui un segmento trasmesso deve
avere riscontro.
» Se questo non avviene, si procede alla ritrasmissione.
» TCP, per stimare efficientemente il TIME-OUT di ogni connessione, utilizza l'algoritmo di Karn.
» È un algoritmo adattivo, ovvero al variare delle prestazioni della connessione corregge opportunamente il valore stimato in precedenza.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
25
Retransmission TimeOut value
TCP misura il tempo di andata e ritorno M per ogni pacchetto
Calcola stima di andata e ritorno (Round Trip Time)» R=a R + (1-a)M valore di a raccomandato .9
Il valore di timeout è posto» RTO=bR valore di b raccomandato 2
Non riesce a gestire le fluttuazioni di velocità della connessione
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
26
Algoritmo di Jacobson
Per ogni segmento» calcoliamo una stima del RTT
» otteniamo una misurazione del RTT
RTO tiene conto di media e varianza» Err = M - A (A stima del RTT -- M valore
misurato)
» A = A + g Err (g=.125)
» D = D + h(|Err| - D) (h=.25)
» RTO = A + 4D
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
27
Algoritmo di Karn
Problema dell’ambiguità di ritrasmissione
» Le stime di RTT non sono aggiornate quando arriva l’ACK di dati ritrasmessi.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
28
Flusso di dati interattivi in TCP
Esempi tipici di applicazioni interattive: RLOGIN, TELNET
Ogni carattere viene inviato dal client al server un byte per volta. Inoltre ogni carattere viene normalmente re-inviato dal server al client per la visualizzazione.
Quindi un byte genera 4 segmenti:» byte di dati» ack del byte » echo del byte per visulalizzazione» ack dell’echo
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
29
Riscontro ritardato (delayed ack)
Normalmente TCP non invia ACK subito dopo aver ricevuto un segmento.
L’ack viene ritardato nella speranza che vi siano dei dati che viaggiano nella stessa direzione.
La maggioranza delle implementazioni utilizza un ritardo di 200 ms.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
30
Algoritmo di Nagle
In connessione interattive possiamo avere dei segmenti che contengono un solo byte di dati.
L’overhead che paghiamo è di 40 byte (20 per IP + 20 per TCP)
Algoritmo di Nagle» una connessione TCP non può avere più di un segmento
piccolo di cui non si è ricevuto l’ACK. Segmento piccolo di taglia minore di MSS
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
31
Algoritmo di Nagle: Pro e Contro
Self-clocking» su una connessione veloce vengono inviati molti tinygram
» una connessione lenta invia pochi segmenti ciascuno con più byte di dati.
Problemi con applicazioni molto interattive» Esempio: function keys
Disabilitato con opzione TCP_NODELAYTCP_NODELAY