TCP-parte1

Transcript

TCP-parte1
TCP (1)
Protocollo TCP
Gestione connessione
AA 2009/2010
agenda
●
Parte prima
■
●
Parte seconda
■
●
Protocollo TCP, macchina a stati finiti per gestione
connessione
Parte terza
■
●
Protocollo UDP
politiche di trasmissione e di controllo della congestione
Parte quarta
■
versioni del protocollo e implementazioni commerciali
AA 2009/2010
2
Livello di trasporto: scopi
●
●
●
Fornisce un servizio affidabile ed efficiente da applicazione a
applicazione (end-to-end tipicamente da processo a processo)
al livello applicazione
Usa il network layer
Solitamente è di tipo connect ma non necessariamente
■
vedremo UDP ...
AA 2009/2010
3
AA 2009/2010
4
TCP
●
●
Fornisce un servizio affidabile end-to-end al di sopra della rete IP non
affidabile
Attività:
■
■
■
■
■
■
accettare dati (byte stream) dal livello application;
spezzarli in segmenti, il nome usato per i TPDU (dimensione massima 64
Kbyte, tipicamente circa 1500 byte);
consegnarli al livello network;
ricevere segmenti dal livello network;
rimetterli in ordine, eliminando buchi e doppioni;
consegnare i dati, in ordine, al livello application.
AA 2009/2010
5
TCP
●
byte stream orientation
■
■
●
●
●
no message stream
stream non strutturato
connessione preventiva con negoziazioni
trasferimento bufferizzato
connessione full-duplex e point-to-point
■
■
■
trasferimento concorrente nei due sensi
piggybacking
ogni connessione ha esattamente due punti estremi
●
●
no multi/broadcast
RFC: 793, 1122, 1323, 2018, 2581
AA 2009/2010
6
indirizzamento
●
●
I servizi di TCP si ottengono creando connessione di livello
transport identificata da una coppia di punti d'accesso detti
(TCP) socket.
Ogni socket ha un socket number che consiste della coppia:
■
●
( IP address , Port number )
I port number hanno 16 bit. Quelli minori di 1024 sono i
cosidetti well-known port, riservati per i servizi standard.
Port number
7
20
21
23
80
AA 2009/2010
Servizio
Echo
Ftp (control)
Ftp (data)
Telnet
Http
7
connessioni
●
TCP è costruito sull’ astrazione di connessione; gli
oggetti da identificare sono circuiti virtuali non porte
singole
●
connessione
■
una coppia di end-point
●
●
[ ( IP_host-a , porta-a ) , ( IP_host-b , porta-b ) ]
più connessioni possono condividere uno stesso endpoint
■
un server che accetta connessioni da più client ...
AA 2009/2010
8
connessioni
●
Le connessioni TCP trasportano un flusso di byte,
non di messaggi
■
●
●
Ad esempio, se il processo mittente (di livello
application) invia 4 blocchi di 512 byte
quello destinatario può ricevere:
■
■
■
●
i confini fra messaggi non sono né definiti né preservati.
8 "pezzi" da 256 byte;
1 "pezzo" da 2.048 byte;
ecc.
Ci pensano le entità TCP a:
■
■
■
suddividere il flusso del livello application in segmenti
a trasmetterli
e a ricombinarli in un flusso che viene consegnato al
livello application di destinazione.
AA 2009/2010
9
TCP
●
●
Il ricevente non sa nulla del modo nel quale il
mittente spezza lo stream
Il mittente normalmente non sa quando i byte che ha
dato a TCP verranno inviati
■
●
una flag particolare (PUSH) forza l’invio immediato
Un meccanismo simile (URGENT DATA) permette di
forzare l’invio immediato e di interrompere il
ricevente
■
sta al ricevente trovare nello stream di byte l’eventuale
ragione dell’interruzione
AA 2009/2010
10
TCP, protocollo
●
●
●
Ogni byte del flusso TCP è numerato con un numero
d'ordine a 32 bit, usato sia per il controllo di flusso che
per la gestione degli ack;
un segmento TCP non può superare i 65.535 byte;
un segmento TCP è formato da:
■
header, a sua volta costituito da:
●
●
■
●
una parte fissa di 20 byte;
una parte opzionale;
dati da trasportare;
TCP usa un meccanismo di sliding window di tipo
go-back-n con timeout.
■
Se questo scade, si ritrasmette il segmento
AA 2009/2010
11
realizzazioni
Il protocollo lascia alcune scelte sostanzialmente
libere, ossia permette diverse realizzazioni tra loro
comunque interoperabili. Questo in particolare per
quanto concerne
– Strategia di trasmissione (immediata o ritardata)
– Strategia di inoltro
– Strategia di accettazione (Go-Back-N, o Selective
repeat)
– Strategia di ritrasmissione
– Strategia di riscontro (ACK singolo o cumulativo)
AA 2009/2010
12
variante TCP di sliding window
tre funzioni base:
●
●
●
inoltro affidabile dei dati
dati consegnati nell’ordine corretto
controllo del flusso tra mittente e destinatario
inoltre:
● controllo della congestione
AA 2009/2010
13
TCP, protocollo
●
●
le dimensioni della finestra scorrevole e i valori degli
ack sono espressi in numero di byte, non in numero
di segmenti
Le dimensioni del segmento dipendono dall’MTU del
network layer
■
■
■
MSS = MTU - Intestazione TCP - Intestazione IP
MSS = MTU – 40 (valore tipico)
ad esempio per Ethernet: MTU = 1500 ; MSS = 1460
AA 2009/2010
14
Finestre scorrevoli
●
●
Il meccanismo di sliding window opera a livello di byte
i byte sono numerati in sequenza
■
■
Il sequence number (32 bit) viene incrementato per ciascun byte
inviato
a 10 Mbps ci vuole più di un’ora per causare un “wrap-around”
●
●
●
una finestra per Mittente e una per Ricevente
comunicazione full duplex
■
●
ma a 1 Gbps … ???
4 finestre in tutto
la dimensione delle finestre possono variare nel tempo
■
ogni pacchetto Ack indica:
●
●
■
quanti byte sono stati ricevuti
contiene inoltre un valore finestra-suggerita (campo window size) che
specifica quanti byte il ricevente è pronto ad accettare
si realizza così un flow-control end-to-end
AA 2009/2010
15
Politiche di ack
●
Il ricevente R manda sempre il riscontro (ack) della
più lunga sottosequenza iniziale del flusso ricevuta
correttamente
●
schema di ack cumulativi
■
R informa sempre su quanto flusso consecutivo ha
accumulato
AA 2009/2010
16
TCP: scenari
Host A
X
=1
ACK
00
loss
Seq=9
2, 8
bytes
data
lost ACK scenario
AA 2009/2010
2, 8 b
ytes d
ata
Seq=
100,
20 by
tes d
at a
0
10
=
K
120
=
C
K
A AC
Seq=9
2, 8
bytes
data
20
1
=
K
AC
=100
ACK
time
Host B
Seq=9
Seq=100 timeout
Seq=92 timeout
Seq=9
2, 8 b
ytes d
ata
timeout
Host A
Host B
time
premature timeout,
cumulative ACKs
17
TCP, header
●
●
●
Parte fissa e parte variabile
Flag servono a codificare TPDU di controllo
AckNumber e WindowSize sono separati: la gestione buffer è
separata dalla gestione acknowledge
AA 2009/2010
18
TCP header
●
●
●
●
Sequence number: numero d’ordine del primo byte
contenuto nel campo dati
Ack number: il numero d’ordine del prossimo byte
aspettato
Checksum: simile a quello di IP, ma calcolato su tutto
il segmento
Header Length: lunghezza dell’intestazione (4 bit),
misurata in parole di 32 bit
■
Ma quanto è lungo un pacchetto?
AA 2009/2010
19
TCP header, Flags
●
URG
■
●
ACK
■
●
dati urgenti da trasmettere senza aspettare che il buffer si
riempia
RST
■
●
AckNumber valido (ACK=1)
PSH
■
●
il campo Urgent Pointer è usato (URG=1)
richiesta di Reset della connessione
SYN , FIN
■
usati nelle fasi di Setup/Release della connessione
AA 2009/2010
20
TCP header, opzioni
●
●
Negoziazione del max payload (MSS) ( >= 536)
Moltiplicazione delle dimensioni della finestra, definizione di un
fattore di scala
■
■
ad esempio shift di 16 bit su WindowSize
a 44 Mbps ci vogliono solo 12 ms per riempire una finestra da 64KB
●
●
Uso di selective repeat invece che go back
■
●
con delay di 50ms --> utilizzo del .25%
Opzioni SACK (selective acknowledgment)
Uso di NAK
AA 2009/2010
21
Il problema dei due (tre) eserciti
●
●
●
R1+R2 vince contro B
R1 perde contro B
R2 perde contro B
AA 2009/2010
●
●
R può inviare dei
messaggeri
B può catturarli
22
TCP, connection management
●
●
●
●
●
Protocollo a tre passi
Due tentativi di connessione iniziati simultaneamente
dai due host portano a una sola connessione finale
Il sequence number iniziale è preso da un clock con
periodo di 4 microsecondi
Il tempo di reboot di un host non può essere
inferiore al tempo massimo di vita dei pacchetti (120
sec)
Le connessioni sono terminate separatamente per
ciascuna direzione
■
timer permettono di superare il three-army problem
AA 2009/2010
23
Schema setup
(1) ACTIVE OPEN: Client invia un segmento
con
• SYN bit settato
• x: Initial Sequence Number (ISN) del Cliente
ack
(2) PASSIVE OPEN: Server responde con un
segmento
• SYN , ACK bit settati
• y: Initial Sequence Number del Server
• x+1 : ACK per ISN del Cliente
(3) Client riscontra inviando un segmento
con
• ACK bit settato
• y+1 : ACK per ISN del Server
Lo standard sottolinea che nelle fasi (1) e (2) non
possono essere inviati dati
AA 2009/2010
24
Rilascio di una connessione
●
Il rilascio della connessione avviene considerando la connessione
full-duplex come una coppia di connessioni simplex indipendenti:
■ quando una delle due parti non ha più nulla da trasmettere,
invia un FIN;
■ quando esso viene confermato, la connessione in uscita viene
rilasciata;
■ quando anche l'altra parte completa lo stesso procedimento e
rilascia la connessione nell'altra direzione, la connessione fullduplex termina.
●
Per evitare il problema dei 3 eserciti si usano i timer, impostati al
doppio della vita massima di un pacchetto
■ il mittente di FIN, allo scadere del timeout, rilascia la
connessione
AA 2009/2010
25
Closing a connection
Step 1: client sends TCP FIN control
segment to server
Step 2: server receives FIN, replies
with ACK. Closes connection,
sends FIN
client
1
close
ACK
●
■
runs for 2MSL seconds
will respond with ACK to
received FINs
Step 4: server, receives ACK.
Connection closed
AA 2009/2010
close
FIN
3
timed wait
Enters “timed wait”
F IN
2
Step 3: client receives FIN, replies
with ACK
■
server
ACK
4
closed
26
Macchina a stati finiti
●
Il protocollo di gestione delle connessioni si
rappresenta comunemente come una macchina a
stati finiti.
●
Questa è una rappresentazione molto usata nel
campo dei protocolli, perché permette di definire, con
una certa facilità e senza ambiguità, protocolli anche
molto complessi.
AA 2009/2010
27
TCP states
2MSL = due volte il tempo massimo di vita di un segmento (30 – 120 sec)
AA 2009/2010
28
stati
●
●
●
●
●
LISTEN - represents waiting for a connection request from any
remote TCP and port
SYN-SENT - represents waiting for a matching connection
request after having sent a connection request.
SYN-RECEIVED - represents waiting for a confirming
connection request acknowledgment after having both received
and sent a connection request.
ESTABLISHED - represents an open connection, data received
can be delivered to the user. The normal state for the data
transfer phase of the connection.
FIN-WAIT-1 - represents waiting for a connection termination
request from the remote TCP, or an acknowledgment of the
connection termination request previously sent.
AA 2009/2010
29
Stati (2)
●
●
●
●
●
●
FIN-WAIT-2 - represents waiting for a connection termination
request from the remote TCP.
CLOSE-WAIT - represents waiting for a connection termination
request from the local user.
CLOSING - represents waiting for a connection termination
request acknowledgment from the remote TCP.
LAST-ACK - represents waiting for an acknowledgment of the
connection termination request previously sent to the remote TCP
(which includes an acknowledgment of its connection termination
request).
TIME-WAIT - represents waiting for enough time to pass to be
sure the remote TCP received the acknowledgment of its
connection termination request.
CLOSED - represents no connection state at all.
AA 2009/2010
30
il ciclo di vita di una connessione
client
AA 2009/2010
server
31
TCP automa: opening a connection
AA 2009/2010
32
Chiusura connessione
●
●
●
Il processo applicativo su entrambi i lati della
connessione può decidere, in modo indipendente, di
chiudere la connessione.
Se solo un lato chiude la connessione, allora vuol dire
che non ha più dati da inviare ma è ancora disponibile a
riceverli.
Questo complica il diagramma, si deve tenere in conto
la possibilità che le due parti invochino l’operazione di
close allo stesso tempo, come anche la possibilità che
prima una parte invochi la chiusura e poi, in un
momento successivo, l’altra parte invochi la chiusura.
AA 2009/2010
33
TCP automa: closing a connection
active close
AA 2009/2010
34
Sequenze di azioni
tre combinazioni di transizioni che portano una
connessione dallo stato established allo stato closed:
1)
il lato client chiude per primo:
fin_wait_1-->fin_ wait_2-->time_wait-->closed
2)
il lato server chiude per primo e il client evolve:
close_wait-->last_ack-->closed
3)
entrambi i lati chiudono allo stesso tempo e il client evolve:
fin_wait_1-->closing-->time_wait-->closed
c’è una quarta (rara) sequenza di transizioni che
portano a closed:
fin_wait_1 --> time_wait --> closed
AA 2009/2010
35
Time Wait
●
una connessione che si trova nello stato time wait non può spostarsi
nello stato closed fino a quando non ha aspettato due volte la massima
quantità di tempo di vita di un datagramma IP (ovvero, 120 secondi)
■
■
●
mentre la parte locale della connessione ha inviato un segmento con il flag
ACK impostato ad 1 in risposta al segmento dell’altro lato con il flag FIN
impostato ad 1, non sa se questo segmento è stato consegnato con
successo
l’altro lato potrebbe ritrasmettere un altro segmento con il flag FIN
impostato ad 1 e questo secondo segmento potrebbe essere ritardato nella
rete.
Se la connessione potesse spostarsi direttamente nello stato closed,
allora un’altra coppia di processi applicativi potrebbe aprire la stessa
connessione (ovvero, usare la stessa coppia di porte) ed il segmento
con il flag FIN impostato ad 1 che era in ritardo darebbe
immediatamente inizio alla terminazione della seconda incarnazione
della connessione
AA 2009/2010
36
lsof: processi attivi su num-di-porta

LiSt Open Files (LSOF) is an utility that allows you to view current network
connections and the files associated with them.


Provides verbose output and is useful in tracking down all sorts of information.
For example, it allows you to see what program is operating on an open
port, which daemons have established connections, and what ports are
open on your server.


very useful for working out which processes "own" network connections that netstat
or tcpdump have identified.
Esempi:




lsof -i tcp:10203 (tcp connections on port 10203)
lsof –i :587 (connections listening or established on port 587)
lsof –i :smtp (connections associated with the well-known service SMTP)
lsof –i @lab.remote.net
(connections coming from or going to the host
lab.r em ot e.net )
AA 2009/2010
37
import SocketServer
class EchoRequestHandler(SocketServer.BaseRequestHandler ):
def setup(self):
print self.client_address, 'connected!'
self.request.send('hi ' + str(self.client_address) + '\n')
def handle(self):
data = 'dummy'
while data:
data = self.request.recv(1024)
self.request.send(data)
if data.strip() == 'bye':
return
def finish(self):
print self.client_address, 'disconnected!'
self.request.send('bye ' + str(self.client_address) + '\n')
#server host is a tuple ('host', port)
server = SocketServer.ThreadingTCPServer(('', 50008), EchoRequestHandler)
38
AA 2009/2010
AA 2009/2010
server.serve_forever()