Corso di Reti di Calcolatori
Prof. Orazio Mirabella
HUB Eth. 10Base-T SWITCH EthernetHUB Eth. 10Base-T
HUB Eth. 10Base-T switch uplink
global server
HUB Eth. 10Base-T SWITCH Ethernet
HUB Eth. 10Base-T
HUB Eth. 10Base-T HUB Eth. 10Base-T
SWITCH Ethernet
HUB Eth. 10Base-T
HUB Eth. 10Base-T F D D I backbone
porta Fddi
TCP
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 un’altra 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 TCP - Transmission Control Protocol
n UDP - User Datagram Protocol
n IP - Internet Protocol
n ICMP - Internet Control Message Protocol
n ARP - Address Resolution Protocol
n RARP - Reverse Address Resolution Protocol
Applicazione Presentazione
Sessione Trasporto
Rete Dati Fisico
Applicazione
Trasporto Internet Interfaccia rete
Hardware
Protocolli e servizi applicativi
TCP IP
UDP ICMP ARP RARP Routing
Driver di rete Scheda di rete (NIC)
OSI TCP/IP 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 delPreambolo del segmento TCP
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. L’ins ieme di porta e indirizzo IP dell’host forma l’identificativo unico a 48 bit di un socket mentre i numeri di socket sorgente e destinazione identificano univocamente la connessione.
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.
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 l’ordine dei segmenti o di perderne qualcuno.
E’ importante notare che il numero di ack indica il prossimo byte atteso e non l’ultimo 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 all’entità 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.
Checksum verifica il preambolo, i dati e uno pseudopreambolo.
Durante la sua esecuzione l’algoritmo 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
Preambolo del segmento TCP
Lopseudopreambolocontiene l’indirizzo IP a 32 bitdelle 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 all’indirizzo sbagliato (anche se tale controllo dovrebbe essere effettuato solo dal livello di rete, ovvero l’IP).
Pseudopreambolo del segmento TCP
Politica di trasmissione di TCP
Mittente Ricevente
Buffer del Ricevente
Vuoto
4K
Pieno
6K
4K SEQ=0
ACK=4096 WIN=4096
4K SEQ=4096
ACK=8192 WIN=0
ACK=8192 WIN=2048 L’applicazione
scrive 4K
L’applicazione scrive 5K ma ne vengono spediti solo 4
Il Mittente invia 1K (ma può inviare fino a 2K)
L’applicazione legge 2K
0K 8k
Poiché il TCP gestisce il flusso di dati tramite l’utilizzo di buffer, la gestione delle finestre dipende dallo spazio libero nel buffer.
Lo spazio viene liberato solo dopo che il buffer è stato svuotato dall’applicazione (non basta inviare l’ack)
Quando la finestra è nulla il mittente può:
•Inviaredati urgentiper 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 sull’evolversi della
Controllo di congestione di TCP
Possiamo avere due tipi di congestione:
nquella dovuta a scarsa capacità del ricevente (buffer di arrivo insufficiente che tende a riempirsi troppo rapidamente e troppo spesso)
nquella 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 l’altra, relativa al canale trasmissivo, dettaFinestra di congestione.
nEntrambe limitano il numero di byte che il mittente è abilitato ad inviare, infatti la finestra effettiva è pari al minimo tra le due finestre.
nquando viene creata una connessione, la finestra di congestione è uguale alla dimensione del massimo segmento che può essere inviato sulla connessione.
nse questo è consegnato prima che scada il timer, il valore della finestra di congestione viene raddoppiatae vengono spediti due segmenti.
nse arrivano a destinazione entro il timeout la dimensione della finestra di congestione è ancora raddoppiatae vengono inviati 4 segmenti.
nSi 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
Algoritmo a partenza lenta: Slow Start
Controllo di congestione di Internet
L’algoritmo 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:
distribuzione dei tempi di ritardo degli ack.
Soluzione: Algoritmo di Jacobson.
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:
D = α’ . D + (1 -α’) . | RTT – M |
Timer di persistenza:evita un’attesa indefinita pa parte delSENDERin caso di perdita dell’ACK.
Keepalive timer: verifica, in caso di lunghe inattività, se l’altro estremo è
Densità di probabilità dei tempi di arrivo degli ack per il DLL (curva a) e per il TCP (curva b).
0 1 0 2 0 3 0 4 0 5 0
Probabilità
Tempo di andata e ritorno ( ms) 0
0,1 0,2 0,3
(a)
(b)
Gestione delle connessioni TCP
Il clientattiva una connessione mediante una primitiva CONNECTspecificando l’indirizzo IP e la porta a cui vuole connettersi, la dimensione accettabile massima dei segmenti TCP e opzionalmente alcuni dati utente (password, etc).
Il serverattende passivamente una connessione in arrivo eseguendo le primitive LISTENe ACCEPT, specificando o meno una sorgente particolare.
La primitiva CONNECT produce l’invio di un segmento TCP con i flagSYN=1e ACK=0e l’attesa di una risposta.
All’entità TCP di destinazione si verifica l’esistenza 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 flagRST=1per rifiutare la connessione. Se esiste, gli si consegna il pacchetto TCP appena arrivato.
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à
Gestione delle connessioni TCP
client server
SYN(SEQ=X, ACK=Y+1) SYN(SEQ=Y, ACK=X+1) SYN(SEQ=X)
SYN(SEQ=Y)
TEMPO
client server
SYN(SEQ=X+1, ACK=Y+1) SYN(SEQ=Y, ACK=X+1)
SYN(SEQ=X)
TEMPO
UDP (User Datagram Protocol)
n L’UDP consente di inviare pacchetti con il minimo overhead, senza garanzia di consegna.
n Il protocollo non invia messaggi di accettazione e non è in grado di rilevare perdita di dati, trasmissione fuori sequenza o duplicazioni pacchetti.
n Il protocollo UDP controlla l’errore solo attraverso il Checksum.
Porta sorgente Porta destinazione
Lunghezza Checksum
DATI
Ottetto 0 Ottetto 4 Ottetto 8
32 bit