Sei sulla pagina 1di 9

LEZIONE 4

IL P R O T O C O L L O T C P

IN QUESTA LEZIONE IMPAREREMO...


le caratteristiche del protocollo TCP
la struttura del segmento TCP
la stimare il valore del timeout

Il protocollo T C P
La caratteristica fondamentale del protocollo TCP
quella d i essere u n < protocollo punto-punto
cio
orientato alla connessione tra due host, chiamati
client e server.

A Protocollo punto-punto I protocolli punto-punto consentono


un collegamento a basso costo per
mezzo di linee seriali o linee telefoniche commutate.

La connessione avviene mediante u n A handshaking con lo scambio d i messaggi d i controllo che


inizializza lo stato del mittente e del destinatario
prima di iniziare a scambiare i dati.
Prima d i iniziare la connessione vera e propria tra
due computer si crea una connessione d i tipo handshake che consiste nella trasmissione dei pacchetti
necessari per regolare i parametri d i connessione.

fgTfTTm

A Handshaking Mediante questa


tecnica due elementi stabiliscono
regole hardware o software comuni, ovvero la velocit, i protocolli
di compressione, di criptazione, di
controllo degli errori ecc.

Il suono prodotto dal modem nella fase di connessione a Internet viene anche chiamato
handshake.
'

Successivamente avviene la comunicazione vera e propria nella quale i l flusso dei dati affidabile,
i n sequenza, bidirezionale, full duplex , e viene realizzato mediante u n buffer d'invio e uno d i
ricezione.
4 Full duplex Full-duplex data transmission means that data can be transmitted in both direct i o n s on a signal carrier at the same time.

185

Lo strato di trasporto

L'applicazione
legge I dati

L'applicazione
scrive i dati

-1-

Socket

-i-

Socket

Buffer
d'invio TCP

Buffer
di ricezione TCP

I Segmento |

Le creazione del canale di comunicazione avviene mediante la connessione tramite socket (come
abbiamo visto i n precedenza utilizzando i l protocollo UDP): i l server pu effettuare contemporaneamente pi connessioni ma, naturalmente, affinch una connessione possa essere distinta dalle altre,
ciascuna d i esse non pu avere la stessa coppia d i socket.
La tabella seguente riporta la numerazione d i alcune well-known ports di classiche applicazioni TCP.
Porta

Protocollo

Applicazione

21

FTP

File transfer

23

Telnet

Remote login

25

SMTP

Email

69

TFTP

Trivial File Transfer Protocol

79

Finger

Lookup info about a user

80

HTTP

World Wide Web

119

NNTP

USENET news

110

POP-3

Remote email access

Le porte con numero inferiore a 1024 sono porte note o riservate (well-known ports) mentre per
tutte le altre viene attivato u n unico processo (programma A Inetd ) che intercetta le richieste
di connessione, crea i l processo relativo e ridirige la connessione da se stesso al processo appena
creato, liberandosi per intercettare future richieste.
A Inetd anche chiamato Internet Super-Server in quanto gestisce le connessioni necessarie per
i servizi richiesti: quando arriva una richiesta di connessione, inetd determina a quale programma la
connessione destinata, esegue quel particolare processo e affida a lui il socket.

Il segmento TCP
TCP suddivide i dati dell'utente i n segmenti d i non pi d i 64 KB e l i incapsula i n datagrammi IP,
come gi descritto per i l datagramma UDP.
|4-

IPdatagram
TCP datagram

IP header

TCP header

20 bytes

20 bytes

data

I segmenti sono organizzati i n due sezioni:


un'intestazione standard d i 20 byte;
u n payload d i dimensione variabile (anche nulla ma d i dimensione massima 64 Kb) contenente i
dati di applicazione.

186

Il protocollo TCP

I l mittente controlla il flusso dei dati trasmesso i n modo da non sovraccaricare i l destinatario: viene
anche definito u n parametro che indica la dimensione massima d i segmento (Maximum Segment
Size MSS). La corrispondente massima dimensione del blocco dati di applicazione che pu essere
contenuto nel segmento non deve essere superiore alla dimensione del payload IP dedotta dalla
occupazione dell'header IP e dell'header TCP (per esempio, 65535 - 20 - 20 = 65495 byte); deve
inoltre rispettare i l i m i t i imposti alle dimensioni dei pacchetti dalle reti che deve attraversare (Max i m u m Trasmission Unit MTU) e quindi possiamo esprimere la relazione tra MTU e MSS i n :
MSS = MTU - 20 - 20
In generale non possibile conoscere la
di ogni rete intermedia che verr attraversata dai
segmenti e viene utilizzato un algoritmo detto
(RFC 1191) per la definizione del suo valore: un tipico valore per
sono i 1500 byte imposti da Ethernet.
La struttura dei segmenti TCP la seguente:
32 bit
Destination port

Source port
Sequence number
Acknowledgment number
Data
Offset

Reserved C E U A P R S
R C R C S S Y
(4 bit) W E G K H T N

Window
Urgent pointer

Checksum

Padding

Options

Data

Descriviamo i singoli campi dell'intestazione TCP:


Source/Destination port: numero d i porta sorgente e destinazione;
Sequence number: numero d i sequenza del primo byte contenuto nel segmento; i l numero di
sequenza iniziale su cui sincronizzarsi se presente i l bit SYN=1;
Acknowledgment number: se i l b i t ACK a 1 , questo i l numero d i sequenza del blocco di dati
che ci si aspetta d i ricevere;
Data offset: numero d i parole di 32 bit dell'intestazione TCP; indica dove iniziano i dati;
Reserved: 4 bit riservati per uso futuro; devono essere posti a zero;
Control bit: sono 8 flag
- URG posto a 1 se si deve considerare i l campo Urgent Pointer;
- ACK posto a 1 se si deve considerare i l campo Acknowledgment Number;
- PSH posto a 1 indica la funzione d i push, per la consegna immediata delle informazioni;
- CWR (Congestion Window Reduced) posto a 1 quando l'host sorgente ha ridotto la velocit d i
trasmissione per ridurre la congestione (RCF 3168);
- ECE (ECN echo) posto a 1 se l'host supporta 1 ' ^ Explicit Congestion Notification ECN;
- RST posto a 1 per resettare la connessione e rifiutare u n segmento o u n tentativo d i connessione
non validi;
- SYN posto a 1 per stabilire la connessione e per sincronizzare i numeri d i sequenza;
- FIN posto a 1 per indicare la fine dei dati da trasmettere e chiudere la connessione i n una direzione.
187

Gli ultimi tre bit sono utilizzati per impostare e chiudere la connessio

Window: dimensione della finestra i n ricezione sliding window per i l controllo di flusso, cio i l
numero di byte che i l ricevitore disposto a ricevere a partire dal numero d i sequenza contenuto
nel campo Acknowledgment Number;
I Checksum: controllo d'errore su intestazione e dati che viene effettuato su blocchi da 16 bit.
A Explicit Congestion Notification La congestione dei pacchetti si verifica quando il router riceve
pacchetti a una velocit superiore a quella possibile sul link su cui dovrebbe spedirli. Solitamente
vengono parcheggiati nella memoria sino alla completa saturazione. Per evitare l'inconveniente solitamente i router compiono due azioni:
fl abbassano la velocit di trasmissione;
B ripetono i pacchetti scartati.
La tecnica ECN (Explicit Congestion Notification) evita la congestione del router notificando esplicitamente che si sta congestionando utilizzando un apposito campo (il campo
) presente nell' header
IP. Quando il router rileva uno stato di "blanda" congestione, i bit di tale campo vengono impostati
in una configurazione detta Congestion Experienced CE. Il campo ECN costituito dai bit 6 e 7 del
campo TOS.
:

L a connessione TCP
Abbiamo detto che la connessione/sconnessione TCP avviene attraverso una fase preliminare chiamata handshaking tra client e server che permette d i stabilire u n canale dedicato tra loro e alla fine
di rilasciarlo: vediamo la procedura di connessione e successivamente quella d i rilascio del canale
e chiusura della connessione.
Nella letteratura tecnica viene spesso indicato con ACK nei diagrammi temporali sia il flag
di stato che il campo Acknowledgment Number lasciando l'interpretazione al lettore in base
al valore contenuto e al suo contesto di utilizzo: noi, per evitare ambiguit, indicheremo con
ACK il flag e con ACKn l'Acknowledgment Number.
Inoltre, quando viene indicato sul diagramma un flag, generalmente si sottintende che il suo
valore settato a 1 : noi, per completezza, lo scriveremo in modo esplicito.

Apertura delle connessioni


La procedura utilizzata per instaurare i n modo affidabile una connessione TCP tra due host chiamata three-way handshake (stretta d i mano a 3 vie), indicando la necessit d i scambiare 3 messaggi
tra host mittente e host ricevente affinch la connessione sia creata correttamente.
Fu proposta nel 1975 da Tomlinson, i l progettista informatico che invent 1 ' ^ email , per risolvere
il problema dei duplicati relativi alla fase d i attivazione della connessione, che descriveremo nella
prossima lezione.
4 email Raymond Samuel Tomlinson is a US programmer who implemented an email system
in 1971 on the ARPANET. It was the first system able to send mail between users on different
hosts connected to the ARPAnet. To achieve this, he used the @ sign to separate the user from their
machine, which has been used in email addresses ever since.

188

Il protocollo TCP

Lezione 4

La seguente procedura illustra come avviare la connessione, nella quale necessario che sui due
host sia presente i l software specifico per i l servizio desiderato e che venga mandato i n esecuzione.
Q

I I server manda i n esecuzione l'applicazione e rimane i n attesa passiva, sulla porta specifica per
essa riservata, di una richiesta d i connessione (Passive Open);

quando u n client vuole comunicare con u n server manda i n esecuzione l'applicativo specifico
che conosce l'indirizzo IP del server e i l numero d i porta riservato per i l servizio desiderato
(indirizzo del socket): viene quindi inviata una richiesta TCP (Active Open);
Client
application

Server
application

2. ACTIVE OPEN

TCP

^)

1. PASSIVE OPEN

TCP

i l client TCP genera i n modo casuale u n numero d i sequenza iniziale (per esempio Seq=33100)
e manda u n messaggio d i SYNchronize (flag SYN=1) contenente questo numero d i sequenza ( i l
flagACK=0);
Client
application

Server
application

SYN=1,Seq=33100
TCP

TCP

In questa prima trasmissione non vengono inviati dati ma viene inviata solo la numerazione
del segmento affinch si possa perfezionare l'operazione di setup.
Q

Alla ricezione del segmento con SYN=1, i l server genera casualmente u n suo numero d i sequenza iniziale (per esempio Seq=4400) e risponde con u n segmento avente i flag SYN=1, flag
ACK=1 (comunemente chiamato segmento SYN/ACK), che contiene i n risposta l'acknowledgment number uguale a ACKn=33101, incrementando cio di 1 i l valore ricevuto dal TCP client
come conferma di ricezione.
Client
application

TCP

Server
application

%A

SYN=1,ACK=1
Seq=4400 ACKn=33101
TCP

189

Lo strato di trasporto

Alla ricezione del SYN/ACK inviato dal server, i l client risponde con u n ACK di conferma ricezione incrementando d i 1 i l corrispondente valore (ACKn=4401) e inizia a inviare i p r i m i dati
nel payload indicando i l numero d i sequenza del primo byte, cio Seq=33101.
Client
application

Server
application

ACKn=4400 Seq=33101
TCP

TCP

Sintetizziamo con la seguente figura le operazioni della procedura di three-way handshaking.


Step 3

Step 4 _Seg
Step 5

ffr Ora i l TCP client e i l TCP server comunicano alla applicazione che la connessione aperta
e le due applicazioni possono scambiarsi i dati nel canale logico che si creato.
Client
application
2. ACTIVE OPEN

ESEMPIO

6. CONNECTION OPEN

Server
application
1. PASSIVE OPEN

iT

TCP

TCP

6. CONNECTION OPEN

Vediamo ora un esempio di comunicazione i n TCP per meglio comprendere l'utilizzo dei registri
Sequence Number (Seq) e Acknowledgment Number (ACKn).
Ogni host l i utilizza i n modo indipendente, registrando i n essi
Seq: "numero" del primo byte nel flusso d i byte che sta trasmettendo;
ACKn: contiene i l numero d i sequenza del prossimo byte che si aspetta d i ricevere.
Nel nostro esempio abbiamo una semplice applicazione dove i l ricevente risponde come echo lo
stesso carattere inviato dal mittente; i numeri d i sequenza iniziali sono generati random e valgono:
host A = > Seq=42
I host B => Seq=69

190

Il protocollo TCP

Alla trasmissione del primo carattere i l valore d i AGKn per l'host A uguale a 0.
HostB

L'utente digita "C"

L'host riscontra
la ricezione della "C"
reinviata

L'host riscontra
la ricezione di "C"
e reinvia "C"

Alla ricezione del dato, i l byte numero 42 indicato dal valore d i Seq dell'host A, l'host B risponde
con la conferma di ricezione inviando lo stesso carattere ma con il proprio valore d i Seq=69 e incrementando nell'ACKn i l numero di byte ricevuti di 1 , i n modo da indicare al mittente che il prossimo
byte che si aspetta d i ricevere i l numero 43.
A sua volta l'host A, non appena riceve i l messaggio da B, gli risponde confermando i l numero di
sequenza ricevuto (Seq=43) che i l numero del byte che si aspetta d i ricevere (inoltre aggiorna
ACKn=70, dato che ha ricevuto i l byte numero 69).

ESEMPIO

Vediamo u n ultimo esempio, dove ipotizziamo che i l primo host invi segmenti lunghi 100 byte ciascuno. Questo host riscontra i segmenti inviati dall'altro, e inoltre invia dati lunghi 6 byte ogni volta.

Seq=101,ACK=406 \
Seq=201,ACK=406

Seq=406, ACK=201

Seq=301,ACK=406

Seq=412, ACK=301

Seq=401,ACK=412

Seq=418,ACK=401

Seq=501,ACK=418

Seq=424, ACK=501

Seq=601,ACK=424

Seq=430, ACK=601

Seq=701,ACK=430

Seq=436, ACK=701

Tempo

Tempo

191

Chiusura della connessione


La connessione TCP tra due host non considerata una singola connessione bidirezionale ma piuttosto una coppia d i connessioni monodirezionali: quando si vuole chiudere u n canale quindi necessario che venga chiusa la trasmissione i n entrambi i sensi.
Pu infatti verificarsi la situazione di connessioni aperte a met, i n cui solo uno dei due terminali ha
chiuso la connessione e non pu pi trasmettere, ma pu (e deve) ricevere i dati dall'altro terminale.
quindi possibile avere due modalit di chiusura della connessione: con u n handshake a tre vie, i n
cui le due parti chiudono contemporaneamente le rispettive connessioni, o con uno a quattro vie,
in cui le due connessioni vengono chiuse i n tempi diversi:
l'handshake a 3 vie omologo a quello usato per l'apertura della connessione, con la differenza
che i l flag utilizzato i l FIN invece del SYN. Un terminale invia u n pacchetto con la richiesta FIN,
l'altro risponde con u n FIN + ACK, infine i l primo manda l'ultimo AGK e l'intera connessione
viene terminata;
l'handshake a 4 vie invece viene utilizzato quando la disconnessione non contemporanea tra i
due terminali i n comunicazione. I n questo caso uno dei due terminali invia la richiesta d i FIN e
attende PACK. L'altro terminale far poi altrettanto, generando quindi u n totale d i 4 pacchetti.
Vediamo nel dettaglio l'handshake a 4 vie:
I l client inizia la procedura d i chiusura della connessione inviando u n messaggio contenente gli
u l t i m i dati che deve trasmettere e settando a 1 i l flag d i FIN" (flag FIN=1).
II server come prima operazione invia u n messaggio d i AGK per confermare la ricezione dei dati.
Client
application

Server
application

1.FIN=1,Seq=888
TCP

TCP

2.ACK=1,ACKn=889

In questo momento la comunicazione nella direzione server->client aperta e quindi possono essere trasferiti altri pacchetti verso il client: di ciascuno il client invier il corrispondente
messaggio di ACKal server.

Client
application

\
Server
application

Seq=321
TCP

TCP

^ ) Quando anche i l server decide di chiudere la connessione invia u n messaggio con i l flag FIN
settato al valore 1 . . .

192

Il protocollo TCP

... che viene confermato con u n AGK finale dal client che aveva gi chiuso la connessione i n
precedenza.
Client
application

Server
application

3. FIN=1,Seq=444
TCP

4.ACK=1,ACKn=445

TCP

In sintesi possiamo rappresentare quanto descritto nel seguente diagramma temporale:

^iHACKn 445
=

Tempo

Stima e impostazione del timeout


Come possibile intuire dalla analisi degli scambi d i messaggi tra client e server u n ruolo fondamentale nel protocollo TCP lo ha i l dimensionamento del timeout dato che:
I se troppo breve i l mittente immetter molteplici ritrasmissioni dello stesso segmento i n quanto
potrebbe non arrivarne la conferma i n tempo utile;
I se troppo lungo viene rallentato i l recupero dei segmenti persi.
Il valore ottimale del timeout non un parametro standard ma dipende fortemente dal ritardo della rete e deve essere determinato stimando il
(
).
Vediamo u n semplice procedimento che ci permette di impostare i l valore del timeout d i TCP.
Poniamo SampleRTT come i l tempo misurato intercorso tra la trasmissione di u n segmento e la
ricezione del suo ACK d i riscontro: essendo per questo u n valore variabile i n funzione dello stato
della rete, calcoliamo EstimatedRTT come una sua media mobile esponenziale ponderata, ovvero
EstimatedRTT = (1 - a) EstimatedRTT + a SampleRTT
dove u n valore tipico per a 0,125: i n questa relazione l'influenza dei vecchi campioni decresce
esponenzialmente i n modo che siano pi "pesanti" i valori pi recenti, e quindi pi reali, d i RTT.

193