Sei sulla pagina 1di 9

Corso di Reti di Calcolatori

TCP
FDDI backbone switch uplink global server porta Fddi SWITCH Ethernet SWITCH Ethernet SWITCH Ethernet

Prof. Orazio Mirabella

HUB Eth. 10Base-T

HUB Eth. 10Base-T

HUB Eth. 10Base-T

HUB Eth. 10Base-T

HUB Eth. 10Base-T

HUB Eth. 10Base-T

HUB Eth. 10Base-T

HUB Eth. 10Base-T

HUB Eth. 10Base-T

TCP/IP Cenni Storici

Internet nasce come esperimento militare nel 1969 con il nome di ARPANET. Il protocollo TCP/IP nasce nel 1980, insieme ad UNIX, e viene utilizzato su ARPANET. Nel 1987 la rete ARPANET fu affiancata da una nuova struttura che and a formare la NFSNET ( National Foundation of Science). In seguito al posto di ARPANET si sostituisce unaltra NFSNET, ed oggi le due reti formano il nucleo di Internet. Nel 1990 Internet contava 1.000 reti locali connesse, oggi siamo quasi al limite teorico di 1.000.000 di reti.

Architettura TCP/IP
n n n n n n

TCP - Transmission Control Protocol UDP - User Datagram Protocol IP - Internet Protocol ICMP - Internet Control Message Protocol ARP - Address Resolution Protocol RARP - Reverse Address Resolution Protocol

Applicazione Presentazione Sessione Trasporto Rete Dati Fisico OSI Trasporto Internet Interfaccia rete Hardware TCP/IP TCP UDP Applicazione Protocolli e servizi applicativi

IP ICMP ARP RARP Routing Driver di rete Scheda di rete (NIC) Componenti di TCP/IP

TCP (Trasmission Control Protocol)


Il
TCP, o protocollo di controllo della trasmissione, un protocollo

orientato alla connessione.

Esso

stato ideato in modo da permettere una comunicazione

affidabile tra due soggetti (end-to-end) su una internet di per se inaffidabile, e ne costituisce il livello di trasporto (Transport Layer).

Ogni

macchina che intenda supportare il TCP deve possedere un

apposito software che svolga le mansioni di entit di trasporto TCP, questo pu essere un semplice processo utente o pu fare parte del kernel del Sistema Operativo della macchina stessa.

Preambolo del segmento TCP


E composto da una parte fissa di 20 Bytes pi eventuali opzioni. Il campo dati al max di 65535 bytes compresi gli header TCP ed IP.

porta sorgente (Source port) e porta destinazione (Destination port), ognuno di 16 bit, che identificano gli estremi locali della connessione. Ogni host deve decidere come allocare le porte successive alla 256. Lins ieme di porta e indirizzo IP dellhost forma lidentificativo unico a 48 bit di un socket mentre i numeri di socket sorgente e destinazione identificano univocamente la connessione.

Preambolo del segmento TCP

I campi numero di sequenza (Sequence number) e numero di ack (Acknowledgement number), entrambi di 32 bit, servono a ricostruire correttamente il flusso di dati originale evitando di stravolgere lordine dei segmenti o di perderne qualcuno.

E importante notare che il numero di ack indica il prossimo byte atteso e non lultimo byte correttamente spedito.

Preambolo del segmento TCP

TCP header length indica il numero di parole da 32 bit contenute nel preambolo TCP. URG ha valore 1 se il campo Urgent pointer effettivamente valido. Indica uno scostamento in byte dal numero di sequenza attuale, indispensabile per individuare i dati urgenti. ACK posto a 1 quando il campo numero di ack valido. PSH se ha valore 1 indica allentit TCP di non memorizzare dati nel buffer di invio, ma di inviarli immediatamente. RST posto ad 1 per indicare un qualche problema a causa del guasto, divenuta instabile SYN usato per la creazione di una connessione. FIN serve a segnalare che il mittente non ha altri dati da inviare. Finestra (Window) che indica quanti byte possono essere spediti a partire dal byte confermato.

Preambolo del segmento TCP

Checksum verifica il preambolo, i dati e uno pseudopreambolo. Durante la sua esecuzione lalgoritmo di checksum pone il campo controllo a 0, e aggiunge uno 0 al campo dati se la sua lunghezza un numero dispari. Poi somma tutte le parole di 16 bit in complemento a 1 e prende il complemento a 1 della somma. Di conseguenza il destinatario deve ottenere 0 come risultato delloperazione sullintero segmento (incluso controllo).

Pseudopreambolo del segmento TCP

Lo pseudopreambolo contiene lindirizzo IP a 32 bit delle macchine sorgente e destinazione, il numero di protocollo (per il TCP 6) e il numero di byte del segmento TCP (incluso il preambolo). In questo modo possibile individuare i pacchetti consegnati allindirizzo sbagliato (anche se tale controllo dovrebbe essere effettuato solo dal livello di rete, ovvero lIP).

Politica di trasmissione di TCP


Poich il TCP gestisce il flusso di dati tramite lutilizzo di buffer, la gestione delle finestre dipende dallo spazio libero nel buffer. Lo spazio viene liberato solo dopo che il buffer stato svuotato dallapplicazione (non basta inviare lack) Quando la finestra nulla il mittente pu:
Inviare dati urgenti per completare qualche applicazione (libera spazio nei buffer) Spedisce segmenti di 1 byte, in modo che il ricevente possa annunciare il prossimo byte atteso e la dimensione della finestra, permettendo cos al mittente di tenersi aggiornato sullevolversi della situazione.
Lapplicazione scrive 5K ma ne vengono spediti solo 4

Mittente Lapplicazione scrive 4K

Ricevente
Buffer del Ricevente 0K 8k

Vuoto
4K SEQ=0

4K
ACK=4096 WIN=4096

4K

SEQ=4096

Pieno
Lapplicazione legge 2K

ACK=8192 WIN=0

6K
Il Mittente invia 1K (ma pu inviare fino a 2K) ACK=8192 WIN=2048

1K

SEQ=8192

1K

6K

Controllo di congestione di TCP


Possiamo avere due tipi di congestione:
n

quella dovuta a scarsa capacit del ricevente (buffer di arrivo

insufficiente che tende a riempirsi troppo rapidamente e troppo spesso)


n

quella dovuta a scarsa capacit della rete (mezzo incapace di

veicolare il flusso di dati richiesto e che tende a "perdere" pacchetti). La soluzione scelta da Internet affronta i due tipi di congestione separatamente, utilizzando due finestre, una, relativa al ricevente, detta Finestra del ricevente e laltra, relativa al canale trasmissivo, detta Finestra di congestione.
n

Entrambe limitano il numero di byte che il mittente abilitato ad inviare,

infatti la finestra effettiva pari al minimo tra le due finestre.

Algoritmo a partenza lenta: Slow Start


quando viene creata una connessione, la finestra di congestione uguale alla dimensione del massimo segmento che pu essere inviato sulla connessione.
n

se questo consegnato prima che scada il timer, il valore della finestra di congestione viene raddoppiata e vengono spediti due segmenti.
n

se arrivano a destinazione entro il timeout la dimensione della finestra di congestione ancora raddoppiata e vengono inviati 4 segmenti.
n

Si continua a raddoppiare la finestra di congestione e ad inviare un numero sempre maggiore di segmenti, sino a quando non si raggiunge un valore per cui almeno un segmento non raggiunge la destinazione e scatta il timeout
n

allora si prender come valore massimo della finestra di congestione la met del valore raggiunto (cio il valore che aveva al passo precedente).
n

Controllo di congestione di Internet


Lalgoritmo Slow Start stato modificato per internet. E introdotta una soglia (inizialmente fissata a 64Kbytes) raggiunta la quale la finestra cresce linearmente. In caso di time-out la soglia dimezzata e la finestra posta ad 1 .

Nella figura la soglia inizia da 32KB (si gi verificato un time-out) e la dimensione del segmento di 1KB.

Gestione dei timer in TCP


Timer di ritrasmissione: sono attivati ad ogni trasmissione di un segmento TCP. Problema: 0,3 distribuzione dei tempi di ritardo degli ack. (a) Soluzione: Algoritmo di Jacobson. 0,2
Probabilit

1.Calcolo del Round Trip Time RTT = . RTT + (1 - ) . M ( 7/8, M il valore misurato del RTT) 2. Timeout = RTT + 4 . D dove D la deviazione media data da:

0,1 (b) 0
0 10 20 30 40 50

Tempo di andata e ritorno ( ms) Densit di probabilit dei tempi di arrivo degli ack per il DLL (curva a) e per il TCP (curva b).

D = . D + (1 - ) . | RTT M | Timer di persistenza: evita unattesa indefinita pa parte del SENDER in caso di perdita dellACK. Keepalive timer: verifica, in caso di lunghe inattivit, se laltro estremo ancora connesso.

Gestione delle connessioni TCP


Il client attiva una connessione mediante una primitiva CONNECT specificando lindirizzo IP e la porta a cui vuole connettersi, la dimensione accettabile massima dei segmenti TCP e opzionalmente alcuni dati utente (password, etc). Il server attende passivamente una connessione in arrivo eseguendo le primitive LISTEN e ACCEPT, specificando o meno una sorgente particolare. La primitiva CONNECT produce linvio di un segmento TCP con i flag SYN=1 e ACK=0 e lattesa di una risposta. Allentit TCP di destinazione si verifica lesistenza di un processo che ha eseguito LISTEN sulla porta specificata nel campo porta di destinazione.

Se tale processo non esiste, viene spedito un segmento con il flag RST=1 per rifiutare la connessione. Se esiste, gli si consegna il pacchetto TCP appena arrivato.

Gestione delle connessioni TCP


client
TEMPO SYN(SEQ=X)

server

client
SYN(SEQ=X) TEMPO

server

SYN(SEQ=Y, ACK=X+1)

SYN(SEQ=Y) SYN(SEQ=Y, ACK=X+1)

SYN(SEQ=X+1, ACK=Y+1)

SYN(SEQ=X, ACK=Y+1)

Nel caso in cui due host tentino contemporaneamente di creare una connessione tra due stessi socket (a) e (b), essendo la connessione individuata univocamente dalla coppia (a, b), verr comunque registrata una sola connessione fra (a) e (b).

UDP (User Datagram Protocol)


n

LUDP consente di inviare pacchetti con il minimo overhead, senza garanzia di consegna. Il protocollo non invia messaggi di accettazione e non in grado di rilevare perdita di dati, trasmissione fuori sequenza o duplicazioni pacchetti. Il protocollo UDP controlla lerrore solo attraverso il Checksum. 32 bit
Ottetto 0 Ottetto 4 Ottetto 8

Porta sorgente Lunghezza

Porta destinazione Checksum

DATI