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
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.
2
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.
3
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.
4
Header TCP
0
4
10
Source Port
16
19
24
32
Destination Port
Sequence Number
Acknowledgement Number
TCP
header
length
Reserved
UA E R S F
RC O S Y I
GK M T N N
Checksum
Options
Window
Urgent Pointer
Padding
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
5
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.
6
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.
7
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.
8
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.
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 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.
11
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.
12
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.
13
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.
14
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.
15
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
shutdown

Esempio:
» rsh remote_host sort < datafile
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
16
Esempio di half-close

rsh bsdi sort < datafile
» rsh apre una connessione con il processo che esegue il
sort sull’host bsdi.
» datafile è copiato sulla connesione.
» l’output della connessione è dato in output.
» sort non può iniziare fino a quando non sono arrivati
tutti i dati.
» rsh effettua una half-close per segnalare la fine dei dati.
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
17
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.
18
Diagramma di transizione degli stati di TCP
Figura tratta da:
TCP/IP illustrated vol. 1 di
Richard
W. Stevens19
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica
ed Appl.
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_REUSEADDR
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
20
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.
21
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.
22
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.
23
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.
24
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.
25
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.
26
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.
27
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.
28
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.
29
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.
30
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_NODELAY
Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.
31
Scarica

TCP - Università degli Studi di Salerno