Alma Mater Studiorum - Universita' di Bologna
Sede di Cesena
Reti di Calcolatori
Il Layer di Trasporto - COTS
Vedi:
• A.S. Tanenbaum, Computer Networks, 4th ed., Prentice Hall,
sez. 6, pagg. 481-574.
• M.T. Rose, The open book, Prentice Hall, cap. 3 e 5, pagg. 3549 e 85-120.
• D. Comer, Internetworking con TCP/IP - Principi, protocolli e
architetture, vol. 1, Addison-Wesley, 4a ed., cap. 13, pagg. 219261.
Copyright © 2006-2014 by Claudio Salati.
Lez. 3
1
Il Layer di Trasporto
Tanenbaum:
• The Transport Layer is not just another layer.
• It is the heart of the whole protocol hierarchy.
• Its task is to provide reliable (N.B.: in realta' esiste anche un
CLTS), cost effective data transport from the source machine to
the destination machine (N.B.: in realta' “from the source to the
destination module of a distributed application”), independently of
the physical network or networks currently in use.
• To provide this goal, the Transport Layer makes use of the
services provided by the Network Layer.
• Just as there are 2 types of Network Service, CONS and CLTS,
there are also 2 types of Transport Service.
• COTS is similar to CONS in many ways.
Furthermore CLTS is also very similar to CLNS.
• If the TS is so similar to the NS why are there 2 distinct layers?
Why is one layer not adequate?
2
OSI Reference Model
Transport
Transport
3
Layer di Rete e di Trasporto
• "End-to-end services (Network & Transport Layer) are concerned with data
transfer, thus with moving octets (8-bit values) form an ES to another (N.B.:
in realta' NS e TS hanno funzioni diverse). The syntax and semantics of
those octets are unimportant: bits are bits.
 N.B.: questo significa che stiamo assumendo che i byte siano fatti
nello stesso modo ovunque!
• It is difficult to separate the functionality of the 2 key layers involved in
providing end-to-end (data transfer) services. In realta:
•
NS is concerned with moving octets from an ES to another.
•
TS is concerned with moving octets from a module to another of a
distributed application.
• This is because of the unfortunate history of the OSI end-to-end services:
there have been 2 technopolitical camps with very different views of the
lower-layer infrastructure.“ (Rose)
• Lo scontro deriva dal fatto che in OSI sia il Transport che il Network Layer
possono fornire sia un servizio CO che un servizio CL.
• Ovviamente il protocollo per fornire il servizio di Trasporto CO e' molto
diverso se si usa CONS o CLNS:
 OSI prevede 5 (cinque) diversi protocolli di trasporto CO!
4
Layer di Rete
 "NS is responsible for moving data from one ES to another, hiding
the technology of the subnetworks that must be traversed.
 The primary goal of the NS is to provide transparency in 2 forms:
 transparency over the topology of the network; and,
 transparency over the transmission media used in each
subnetwork that comprises the network." (Rose)
 N.B.: ma prestazioni e affidabilita' del NS cambiano molto a
seconda che esso sia fornito da una LAN o da una internet
geografica!
 NL implica 2 funzioni fondamentali:
 routing: in base all'indirizzo destinazione decidere lungo quale
percorso instradare la comunicazione perche' essa possa
giungere a buon fine;
 switching: commutare i messaggi della comunicazione
secondo il percorso deciso dalla funzione di routing.
5
I DUE APPROCCI AI SERVIZI END-TO-END
• Il partito CONS:
• Il Network Layer fornisce il CONS,
• Il Transport Layer, per fornire il COTS, si fida del CONS, e si limita a
gestire TSAP e connessioni di Rete.
• "An ES is little more than a spectator with regard to use of the protocols
that make up the end-to-end data transfer services.
• "If the underlying NS is also CO, then the Transport protocol supporting
COTS can be trivial." (Rose)
• Il partito CLNS:
• Il Network Layer fornisce il CLNS,
• Il Transport Layer, per fornire il COTS, deve gestire in proprio il recupero
degli errori e la sequenzializzazione dei messaggi, poiche' il CLNS non
fornisce alcuna garanzia.
• "An ES is the most important player, as it has the final responsibility for
robust communication.
• "Use of CLNS requires sophisticated algorithms in the Transport
protocols that provide COTS." (Rose)
•
Nel mondo Internet c'e' solo il partito CLNS.
6
Layer di Rete e di Trasporto
• In teoria una NSDU e una TSDU possono essere di lunghezza
arbitraria, ma in pratica sono di lunghezza finita e la lunghezza
della NSDU e' spesso piu' piccola di quella della TSDU, per cui
il livello di Trasporto deve comunque gestire segmentazione e
riassemblaggio delle TSDU.
• "TP0 does nothing more than Transport addressing (ma questa
e’ una funzione fondamentale!) and segmentation." (Rose)
• Esistono comunque due distinzioni fondamentali tra NS e TS:
1. NS si occupa della comunicazione tra processori (nodi della
rete), mentre
TS si occupa della comunicazione tra processi (programmi,
applicazioni).
2. "The Transport code runs entirely on the users' machines
(ES), but the Network Layer mostly runs on the routers (IS),
which are operated by the carrier." (Tanenbaum)
7
Layer di Rete e di Trasporto
Tanenbaum, argomento 1:
• "What happens if the Network Layer offers inadequate service?
• The users have no real control over the Network Layer.
• The only possibility is to put on top of the Network Layer another layer
(allocato sugli ES! Quindi sotto il controllo degli utenti della rete!) that
improves the quality of the service.
• In essence, the existence of the Transport Layer makes it possible for
the TS to be more reliable than the underlying NS."
Tanenbaum, argomento 2:
• "Thanks to the Transport Layer, application programmers can write
code according to a standard of service primitives and have these
programs work on a wide variety of networks, without having to worry
about dealing with different subnetwork interfaces (qualita' eterogenea
del NS, vedi ad es. Reti OSI di classe A e B).
• For this reason, many people have traditionally made a distinction
between layers 1 through 4 on the one hand and layers above 4 on 8the
other."
Layer di Rete e di Trasporto
• "The bottom 4 layers can be seen as the Transport Service provider
(lower network infrastructure), whereas the upper layers are the
Transport Service user (upper network infrastructure).
• This distinction of provider vs. user puts the Transport Layer in a key
position, since it forms the major boundary between the provider and
user of the reliable transmission service." (Tanenbaum)
• Per rendere la distinzione veramente efficace occorrerebbe che l'API
del TS fosse standardizzata:
 In questo modo i programmi utente sarebbero portabili su diversi
ES.
• Implementativamente,
•
i livelli 2-4 sono realizzati (normalmente) come parte del sistema
(in spazio kernel),
•
i livelli superiori (5-7) sono realizzati (normalmente) nello spazio
utente (o come processi autonomi o, molto piu’ frequentemente,
9
come librerie linkate al codice utente).
OSI TRANSPORT LAYER E TRANSPORT SERVICE
 OSI prevede sia un COTS (Connection-Oriented Transport
Service) che un CLTS (ConnectionLess Transport Service).
 Il TS viene offerto su TSAP (Transport Service Access Point).
 Un TSAP e' identificato da un indirizzo a 2 componenti:

un transport selector (TSEL),
che e' un nome che ha significato locale e serve a distinguere
un TSAP locale dall'altro (e quindi un cliente del TS dall'altro) a
parita' di NSAP (e, quindi, di protocollo di trasporto),

uno o piu' network address (NSAP, quello/i della protocol
entity di Trasporto).
 COTS prevede le primitive (i servizi) per gestire le tre fasi di

instaurazione della connessione,

trasferimento dati,

rilascio della connessione.
10
PROTOCOLLI OSI DI TRASPORTO
•
COTS fornisce un servizio affidabile end-to-end
indipendentemente dal NS che ha a disposizione.
•
Data la variabilita' di caratteristiche del NS, per fornire la stessa
interfaccia COTS sono stati definiti 5 diversi CO Transport
Protocols (TP): TP0, ..., TP4.
• TP0, TP1, TP2 e TP3 possono operare solo sul CONS.
• TP4 puo' operare sia su CONS che su CLNS, ma in realta' e'
pensato per operare su CLNS.
•
Durante la fase di instaurazione della connessione le entita' di
Trasporto negoziano quale TP utilizzare.
•
Questo consente ad implementazioni sofisticate di offrire servizi
di qualita' superiore pur mantenendo la compatibilita' con
implementazioni piu' povere.
11
Classi di reti secondo OSI
•
Perche' sono definiti 4 TP diversi per operare su CONS?
•
Perche' le implementazioni reali di CONS differiscono per qualita'.
•
OSI definisce 3 classi di reti.
•
Reti di classe A: rilevano come un errore qualsiasi perdita di dati.
Non duplicano, desequenzializzano, o corrompono dati.
La probabilita' di errore effettiva e' bassa.
Una rete di classe A fornisce il CONS con qualita' accettabile.
•
Reti di classe B: differiscono dalle reti di classe A perche' la
probabilita' di perdita effettiva e' piu' alta di quanto (localmente)
considerato tollerabile (e.g. a causa della fragilita' delle connessioni).
Anche una rete di classe B fornisce il CONS, ma non con un livello di
qualita' accettabile.
•
Reti di classe C: forniscono il CLNS e quindi non offrono alcuna
garanzia di non perdere, duplicare o desequenzializzare dati.
•
I TP OSI CO si differenziano per la capacita' di operare su reti di
classi diverse, e per le modalita' con cui utilizzano il NS.
12
Classi di reti secondo IP?
•
Il protocol layer IP prevede solo un servizio CL.
•
L’architettura di rete internet prevede che il Network Layer debba
fornire solo un servizio CL, considera cioe’ solo reti di classe C.
•
Anche alle singole sottoreti l’architettura internet richiede solo di
fornire un servizio CL, di classe C.
•
Se una sottorete e’ capace di fornire anche un servizio CO, questo
•
non viene utilizzato da IP, se e’ disponibile anche un servizio CL.
•
e’ sottoutilizzato da IP, se il servizio CO e’ l’unico fornito dalla
sottorete.
•
IP in realta’ fa anche fatica ad utilizzare sottoreti CO perche’ deve
assorbire la complessita’ aggiuntiva della gestione di connessioni
senza poterne sfruttare i vantaggi.
13
PROTOCOLLI OSI DI TRASPORTO: TP0
 TP0:
 Puo' operare solo su reti di classe A.
 Fornisce solo le funzioni di segmentazione e riassemblaggio.
(oltre che, ovviamente, quella di addressing, cioe' la capacita'
di distinguere un TSAP dall'altro e una connessione
dall'altra)
 Ogni connessione di Trasporto e' associata ad una
connessione di Rete.
(non c'e' alcun multiplexamento di diverse connessioni di
Trasporto tra i due ES su un'unica connessione di Rete)
14
PROTOCOLLI OSI DI TRASPORTO: TP1

TP1:
 Puo' operare su reti di classe A e B.
 In caso di disconnessione spontanea di Rete, non deve
necessariamente abortire la connessione di Trasporto, ma
e' in grado di recuperare l'errore
(quale tipo di errore? Perdita! Si assume che NS sia
adeguato dal punto di vista di non-desequenzializzazione e
non-duplicazione).

"When TPDU are sent, each TPDU is numbered and then
retained until an ack is received from the remote Transport
entity. The ack takes the form of a special TPDU.

When a Network disconnect occurs, the Transport provider may
decide to establish a new Network connection and then resume
the Transport connection by resending those PDUs that haven't
been acknowledged.“ (Rose)
15
PROTOCOLLI OSI DI TRASPORTO: TP2 e TP3

TP2:
 E' l'equivalente di TP0 ma
 Effettua il multiplexing delle connessioni di Trasporto tra
due nodi su una unica connessione di Rete.
 Perche' e' conveniente il multiplexing?
Perche' pago una sola connessione di Rete anche se sto
utilizzando diverse connessioni di Trasporto su di essa.

TP3:
 E' la combinazione di TP2 e TP1.
 Combina la funzione di de/multiplexing con quella di
recupero di errori per disconnessione del Network Service.
16
PROTOCOLLI OSI DI TRASPORTO: TP4
 TP4:
 E' in grado di operare su reti di classe C.
 E' l'analogo OSI di TCP.
 In pratica e' poco adatto ad operare su reti CONS.
 Offre servizi di error detection (opzionalmente) e recovery.
 "TP4 achieves reliability through retransmission.
 The trick is knowing when to retransmit.
 If data is lost in the network and the sending Transport entity
retransmits too slowly, then throughput suffers.
 If data is lost due to congestion in the network and the Transport
entity retransmits too quickly then it merely adds to the
congestion and throughput gets even worse!
 Hence, sophisticated protocols of this variety employ adaptive
algorithms to predict the latency characteristics of the network, which
may fluctuate considerably because of other traffic." (Rose)
17
PROTOCOLLI Internet DI TRASPORTO: TCP
 E' l'equivalente Internet del protocollo OSI TP4.
 E' progettato per offrire un COTS affidabile basandosi sui servizi di
un Layer di Rete CL e non affidabile (IP).
 Il servizio implementato da TCP si differenzia dal COTS OSI per
alcuni punti fondamentali
(per il resto e' analogo al COTS OSI definito nella lezione 1).
 Adesso:
 Esistono anche altri protocolli di trasporto CO nell’architettura di
rete Internet (e.g. per gestire reti piu’ veloci che per essere
utilizzate in modo efficiente richiedono finestre di trasmissione
piu’ grandi).
 Esistono varianti del TCP (e.g. per gestire ACK selettivi).
ma il corso prende in considerazione solo il TCP tradizionale.
18
TCP vs. TP4 OSI
.1
Differenze tra TCP e TP4 OSI:
 I dati trasferiti tra i due end-point TCP sono costituiti da uno stream
continuo di byte anziche’ da una sequenza di messaggi, come e' nel
caso di COTS OSI.
 TCP (sia lato TX che lato RX) e' libero di segmentare/aggregare le
richieste di trasmissione dei byte dello stream come piu' gli conviene.
 E se due moduli di una applicazione distribuita hanno bisogno di
comunicare a messaggi?
Come fa un ricevitore a capire dove finisce un messaggio e dove
inizia l’altro?
 In caso di tentativo simultaneo di setup della connessione da parte dei
due ES le due richieste sono matchate da TCP ed e' creata un'unica
connessione.
 Puro buon senso, quello che manca ai comitati di standardizzazione.
 In pratica, in un mondo client-server asimmetrico, il problema e’
irrilevante, tanto che lo scenario non e’ nemmeno realizzabile
facilmente sull’interfaccia socket.
19
TCP vs. TP4 OSI
.2
Differenze tra TCP e TP4 OSI:
 La procedura di disconnessione e' "ordinata" e bilaterale, anziche'
essere brusca e unilaterale, come e' nel caso di COTS OSI.
 E' responsabilita' dei clienti del COTS OSI assicurarsi che tutti i dati
di cui e' stata chiesta la trasmissione siano stati effettivamente
ricevuti prima di chiedere la chiusura della connessione.
 Puro buon senso, quello che manca ai comitati di
standardizzazione.
 Di norma, la connessione non viene monitorata (testata) quando i clienti
non la utilizzano effettivamente (quando non richiedono la trasmissione
di dati).
 La protocol entity si accorge che la connessione e’ caduta solo
a seguito di un tentativo di trasmissione.
 Questo comportamento deriva dal fatto che TCP e’ stato progettato
quando i bit trasmessi in rete erano preziosi!
 Differenza interna: una connessione TCP e’ identificata solo dagli
indirizzi delle porte ai suoi estremi, mentre in TP4 una connessione ha
un suo identificatore specifico. Conseguenze?
20
Recupero degli errori: PDU persi o corrotti
 La tecnica fondamentale per il recupero degli errori di trasmissione e'
indicata come
conferma di ricezione positiva con ritrasmissione
(positive acknowledgement with retransmission)
 Il lato ricevente deve comunicare al lato mittente l'avvenuta
ricezione di dati tramite un PDU di ACKnowledgement.
 Il lato mittente, quando spedisce un PDU informativo, avvia un
timer.
 Se il timer scade prima che il mittente riceva l'ACK al proprio PDU
informativo, il mittente ritrasmette il PDU
(il mittente assume che il PDU sia andato perso o danneggiato).
 Se il lato ricevente riceve un PDU danneggiato, lo ignora
(lo scarta, di solito in un Layer piu’ basso del Trasporto).
 Se il lato ricevente riceve un PDU che aveva gia' ricevuto, lo
scarta ma lo riscontra al mittente.
 N.B.: la procedura di recupero degli errori in caso di PDU persi o
corrotti puo' portare alla ricezione ripetuta di uno stesso PDU.
21
Recupero degli errori: PDU duplicati
 In realta' non c'e' solo il problema dei PDU (anche quelli di ACK)
persi o corrotti.
 I PDU possono essere ritardati dalla rete (la rete "ha memoria").
 I PDU (compresi quelli di ACK) possono anche essere duplicati
(e.g. causa ritrasmissione da parte del mittente, o perche' il routing di
una sottorete e' basato sul flooding).
 PDU informativi duplicati possono (devono poter) essere riconosciuti.
 I PDU informativi devono essere identificati univocamente
(e.g. numerando ciascuno di essi con un numero progressivo).
 Il lato ricevente deve ricordare quali PDU informativi ha gia'
ricevuto.
 Se il lato ricevente riceve un PDU informativo che aveva gia'
ricevuto, lo riscontra al mittente ma lo scarta.
 Ogni PDU di ACK riporta esplicitamente il numero del/i PDU
informativo/i che riscontra.
22
Finestra a scorrimento: efficienza di banda
 Un protocollo con conferma di ricezione positiva semplicistico spreca
una quantita' enorme di banda disponibile perche' utilizza la rete in
modo half-duplex.
 Il lato trasmissione non trasmette il prossimo PDU informativo fino
a che non ha ricevuto l'ACK del PDU precedente.
 Il trasmettitore puo' pero' essere autorizzato a trasmettere un certo
numero di PDU informativi anche senza avere ricevuto un ACK (prima
di doversi fermare in attesa dell'ACK).
 Il lato trasmissione ha una certa finestra di credito di
trasmissione.
 Quando il trasmettitore riceve un ACK fa scorrere in avanti la sua
finestra di credito (non e’ proprio esatto: vedi seguito).
 "Poiche' un protocollo a finestra di scorrimento ben ottimizzato
mantiene la rete completamente satura di pacchetti (se il trasmettitore
e' piu' veloce della rete!), ottiene una velocita' di trasferimento
sostanzialmente maggiore rispetto ad un semplice protocollo con
conferma di ricezione positiva." (Comer)
23
Finestra a scorrimento: efficienza di banda
 Nel caso del TCP la nozione di finestra di scorrimento e' piuttosto
sofisticata (anche se TCP non utilizza ACK selettivi, vedi seguito).
 Il lato mittente:
 Ricorda quali sono i PDU informativi confermati.
 Mantiene un timer separato per ogni PDU non confermato.
 Quando fa scorrere la finestra in avanti oltrepassa tutti i PDU
informativi confermati (ack cumulativo).
 Il lato ricevente:
 Mantiene una lista dei PDU informativi ricevuti.
 Accetta e memorizza un PDU informativo corretto anche se uno o
piu' PDU precedenti non sono stati ancora ricevuti, ma non lo
riscontra.
 Puo' riscontrare piu' di un PDU informativo in un unico colpo se
riceve un PDU che precede logicamente (ed e’ adiacente ad) un
24
PDU gia' prima ricevuto.
ACK e ritrasmissioni
 Il ricevente assembla i byte dati dei segmenti ricevuti per ricostruire lo
stream trasmesso dal suo pari.
 Poiche' i datagram che contengono i segmenti possono andare persi
o essere ricevuti fuori ordine la ricostruzione dello stream avviene
grazie al numero di sequenza.
 In un qualunque momento il ricevente
 ha ricevuto un prefisso contiguo massimo dello stream;
 puo' avere ricevuto altri blocchi di byte, successivi al prefisso
contiguo massimo, ma non adiacenti ad esso.
 Il ricevente conferma sempre (solo) la ricezione del prefisso contiguo
massimo a quell'istante (ack cumulativo).
 Blocchi ricevuti correttamente ma che non non estendono il prefisso
contiguo massimo sono memorizzati ma non sono riscontrati.
 La conferma avviene indicando come ACK l'indice nello stream del
byte successivo all'ultimo byte del prefisso contiguo massimo (cioe'25
l'indice del primo byte mancante).
ACK cumulativo vs. ACK selettivo

TCP utilizza un metodo di riscontro cumulativo.

TCP non ammette ACK selettivi, cioe' ACK relativi a byte successivi
ma non contigui al prefisso contiguo massimo.

Supponiamo che il mittente invii 10 segmenti e che il primo (solo il
primo) vada perso.
 Quanti byte puo' riscontrare positivamente il ricevente? 0.
 Quanti segmenti deve ritrasmettere di conseguenza il mittente?
 Notare che dopo avere ricevuto il primo segmento ritrasmesso, il
ricevente riscontrera' il prefisso fino all'ultimo byte del decimo
segmento.
 Se il mittente ritrasmettesse piu' di un segmento occuperebbe
inutilmente la rete.

In base a questo argomento la prassi implementativa accettata indica
che in caso di ritrasmissione il mittente deve ritrasmettere solo il
segmento non riscontrato, quello per cui e’ scaduto il timer.
26
Finestra a scorrimento: controllo di flusso .1

L'utilizzo di un protocollo a finestra di scorrimento consente al TCP di
risolvere anche un altro problema:
 Cosa succede se il lato ricevente e' meno veloce della rete e del
lato mittente?
 Se la finestra del mittente e' abbastanza ampia il lato ricevente
viene sovraccaricato di PDU che non riesce a processare!
TCP
sender side
TCP
receiver side
send
send
send
send
send
ack
receive
ack
ack
ack
ack
receive
27
Finestra a scorrimento: controllo di flusso .2

TCP consente al lato ricevente di controllare la dimensione della
finestra del lato mittente, fino a chiuderla nel caso non abbia (buffer
di) memoria sufficiente per ricevere e registrare nuovi PDU
informativi.

La dimensione della finestra di scorrimento non e' quindi fissa, ma
puo' variare per adattarsi alla velocita' di processamento dei due ES.

Ovviamente il lato ricevente non e' autorizzato a contraddire aperture
di finestra effettuate in precedenza.

Dire che ti concedo una finestra di n messaggi vuole dire che ho la
capacita’ di bufferare gli n messaggi che ti autorizzo a inviarmi.

Non posso concederti una finestra di n messaggi se non ho buffer
di memoria sufficienti a contenerli.
 N.B.: ACK dei PDU e gestione della finestra devono poter essere
disaccoppiati: il ricevitore deve potere anche riscontrare la ricezione
di un PDU senza aprire la finestra del mittente (e viceversa).
28
Finestra a scorrimento: controllo di flusso .3

La dimensione della finestra di trasmissione lato Tx e’ determinata
dalla capacita’ di bufferamento in ricezione lato Rx.

La protocol entity TCP lato Rx riscontra un PDU informativo nel
momento in cui ne ha potuto salvare il contenuto nel buffer di
ricezione.

Non quando il suo cliente locale lo legge effettivamente.

Se non lo riscontrasse il pari lato Tx, scaduto il timeout di error
recovery, lo ritrasmetterebbe, sprecando banda, e cio’ deve
essere evitato.

Quando il cliente locale della protocol entity lato Rx legge
effettivamente dei byte informativi questi possono essere eliminati
dal buffer di ricezione, liberando spazio per nuovi byte inviati dal
pari lato Tx.

E’ quindi l’operazione di lettura di byte ricevuti dalla rete effettuata
dal cliente locale che porta la protocol entity lato Rx ad aprire la
finestra di trasmissione del suo pari.
29
Finestra a scorrimento: 2 funzioni distinte e indipendenti

Sul meccanismo della finestra di scorrimento e sulla relativa numerazione dei
PDU si appoggiano 2 funzioni diverse e indipendenti:
 La funzione di recupero degli errori tramite riscontro esplicito ed eventuale
ritrasmissione in caso di mancato riscontro.
 La funzione di controllo di flusso tra i due end-point della connessione.

Deve essere possibile:
1.
riscontrare la ricezione di un PDU informativo senza aprire ulteriormente la
finestra per il mittente (per evitare inutili ritrasmissioni).
2.
aprire la finestra per il mittente senza riscontrare la ricezione di alcun PDU
(se non c’e’ niente da riscontrare, ma si sono liberati buffer di memoria per
la ricezione).
3.
riscontrare la ricezione di un PDU informativo e contestualmente aprire
ulteriormente la finestra per il mittente.

Il PDU che il lato ricevente invia al mittente deve contenere due campi diversi
(per riscontro e controllo finestra) che citano la numerazione dei PDU informativi
nella direzione di comunicazione opposta.

Esercizio: rappresentare 3 scenari di interazione tra utenti e provider del
Servizio di Trasporto su due nodi A e B in cui si verifichino le 3 situazioni
indicate.
30
Trasmissione e ricezione sulla rete
TCP
entity
write()
read()
IP
TCP
entity
end-point
end-point
TX buffer
RX buffer
RX buffer
.1
TX buffer
• Chiedere la trasmissione di n byte su una connessione non implica che questi
n byte siano trasmessi immediatamente.
• Ad esempio perche’ la finestra di trasmissione e’ chiusa.
• Quello che succede e’ che gli n byte sono copiati in un buffer di trasmissione
associato all’end-point locale della connessione.
• E se il buffer e’ gia’ pieno o non c’e’ posto per tutti gli n byte?
• Analogamente succede per la ricezione: i byte ricevuti dalla rete sono inseriti
in un buffer di ricezione in attesa che il cliente del TCP chieda di acquisirli con
una operazione di lettura.
• Domanda: perche’ per ogni endpoint e’ necessario l’utilizzo di buffer
sia in trasmissione che in ricezione?
31
Trasmissione e ricezione sulla rete
TCP
entity
write()
read()
IP
TCP
entity
end-point
end-point
TX buffer
RX buffer
RX buffer
.2
TX buffer
• E’ evidente che la finestra di trasmissione di un end-point non puo’
eccedere la quantita’ di memoria libera sul buffer di ricezione
dell’altro end-point.
• Altrimenti l’end-point mittente sarebbe autorizzato a trasmettere
dei byte che il ricevente non saprebbe dove mettere.
• Quando e’ che il ricevente apre la finestra di trasmissione del
mittente?
• Quando si liberano dei byte nel suo buffer di ricezione.
• Cioe’ quando il cliente del TCP acquisce dei byte dal buffer di
32
ricezione tramite una operazione di lettura
Scenario elementare di trasmissione / ricezione
TCP entity
write()
IP
end-point
TX buffer
tempo
TCP entity
end-point
info
RX buffer
ack
end-point
end-point
TX buffer
RX buffer
read()
window
 Quando il ricevente ha inserito i byte ricevuti in RX buffer puo’
generare ACK.
 Quando il mittente riceve ACK puo’ liberare i byte trasmessi ma
ancora contenuti in TX buffer (per eventuali ritrasmissioni).
 Quando il cliente acquisisce i byte contenuti in RX buffer, questi byte
possono essere liberati e di conseguenza la finestra di trasmissione
33
del mittente puo’ venire aperta
Controllo di flusso e congestione
•
Il meccanismo del controllo di flusso consente al TCP di risolvere il
problema della comunicazione tra due ES con diverse velocita' di
processamento.
•
Ma cosa succede se i due ES che comunicano sono piu' veloci della rete
che li connette (di uno dei router lungo il path seguito dai loro datagram
IP)?
•
"Quando le macchine intermedie diventano sovraccariche, la condizione
e' definita congestione.
•
I meccanismi per risolvere la situazione sono chiamati meccanismi di
controllo di congestione.
•
TCP non ha un meccanismo esplicito per il controllo della congestione (la
congestione e' un problema del Network Layer!). Ma,
• Un'implementazione TCP programmata accuratamente puo' rilevare e
risolvere la congestione.
• Un'implementazione peggiore puo' peggiorarla!" (Comer)
 Il buon funzionamento della rete dipende dal buon comportamento degli
ES connessi !
•
Naturalmente un IS puo’ essere anche congestionato dal traffico di
diversi flussi di comunicazione indipendenti tra loro.
34
Controllo di flusso
I meccanismi per il controllo di flusso e la regolazione della finestra di
trasmissione servono a 3 diversi scopi:
1. Utilizzo efficiente della banda di rete.
•
Il trasmettitore puo’ inviare nuovi dati senza dovere attendere
l’ACK di quelli inviati in precedenza.
2. Regolazione della velocita’ di scambio dell’informazione tra gli endpoint della comunicazione.
•
L’entita’ di Trasporto in ricezione apre la finestra solo quando il
cliente estrae dei dati dal buffer di ricezione.
•
Se il cliente in ricezione e’ lento e non estrae dati, la finestra
non viene riaperta.
3. Contenimento dei fenomeni di congestione della rete.
•
Vedi pagine seguenti.
35
PDU TCP (segmento)
Identificazione
della
connessione
Identificazione dei dati
trasmessi con il PDU
Riscontro di dati
ricevuti
Dimensione della
finestra di
trasmissione
per il pari
36
PDU TCP
.1
 I PDU del protocollo TCP sono chiamati segmenti:
 ogni segmento e’ relativo ad una connessione e puo’ esistere ad
un certo istante un’unica connessione tra gli stessi due end-point.
 La struttura dell’informazione trasportata da un segmento e’ descritta
tramite una mappa di byte.
 La dimensione massima del segmento (e quindi della sua parte dati)
viene contrattata al momento del set-up della connessione.
 Poiche' TCP trasporta uno stream continuo di byte, esso puo'
 assemblare,
 disassemblare,
 riassemblare diversamente (e.g. in caso di ritrasmissione),
le richieste di trasmissione del cliente.
 Ogni segmento dati trasporta anche l'indice (numero di sequenza) del
primo dei suoi byte all'interno dello stream.
 Ovvio che sia cosi’, TCP e’ stream oriented.
In TPx ci sarebbe il numero del messaggio!
 Ogni segmento trasporta informazioni di protocollo relative ad
entrambe le direzioni della comunicazione.
37
PDU TCP
.2
 Ogni PDU puo’ trasportare sia una informazione di ACK che una
informazione di controllo della finestra
(N.B.: dimensione massima della finestra: solo 216 byte, tanti nel 1980
ma molto pochi nel 2010. Su una rete a 1Gbps ci vuole meno di 1 ms
per consumarla tutta, in assenza di aperture dal ricevente).
 L'informazione di ACK e quella di controllo della finestra sono
separate: il ricevitore puo' riscontrare la ricezione di un PDU senza
aprire la finestra del mittente.
 Poiche' TCP trasporta uno stream continuo di byte l'indicazione di
ACK e quella di finestra presenti in un segmento sono espresse
rispettivamente come
 indice di byte nello stream (del prossimo byte atteso, quello
successivo al prefisso contiguo massimo gia’ ricevuto),
 numero di byte ricevibili a partire da quello indicato nell'ACK.
 Considerando l'ACK, deve essere cosi' perche' non solo TCP invia dati
in segmenti di lunghezza variabile, ma in caso di ritrasmissione e'
anche libero di riassemblarli, inviando piu' dati che nel segmento 38
originale.
Timeout di ritrasmissione
.1
 Per ogni segmento dati che trasmette TCP avvia un timer.
 Se il timer termina senza che i dati del segmento siano riscontrati
positivamente TCP assume che il segmento sia andato perso e lo
ritrasmette.
 Quanto deve essere lungo il timer? Cioe’, dopo quanto tempo scatta il
timeout?
 Il timer di ritrasmissione deve essere il piu' possibile vicino al
round-trip delay ma non deve sottostimarlo.
 TCP non opera su un Data Link con round-trip delay fisso e calcolabile
a priori.
 TCP opera su IP e il roud-trip delay puo' variare moltissimo da un
datagram all'altro:
 Perche' le reti che connettono due ES possono essere
estremamente eterogenee (LAN vs. internetwork).
 Perche' due datagram seguono percorsi diversi.
 Perche' il carico di rete incontrato (e quindi il tempo di
attraversamento degli switch e dei router, anche lungo un
medesimo percorso) e' diverso.
39
Timeout di ritrasmissione
.2

TCP gestisce la variabilita' del roud-trip delay utilizzando un timer
di ritrasmissione adattativo.

"TCP tiene sotto controllo le prestazioni di ogni collegamento e ne
deduce valori ragionevoli per i timeout: se le prestazioni di una
connessione cambiano, TCP riesamina tali valori, ovvero si adatta
alla variazione." (Comer)

Per ogni segmento trasmesso TCP campiona (in base al relativo
ACK) il round-trip delay relativo.

L'implementazione canonica del TCP calcola lo RTT (Round Trip
Time stimato) come una media pesata, che viene via via
aggiornata dai nuovi campioni:
RTT(k) =  * RTT(k-1) + (1- ) * RTTsample(k), con 0<<1

La risposta piu' o meno rapida alle variazione dipende dal valore di
 piu' o meno vicino a 0.

Il valore consigliato e' =7/8.

Esercizio: Cosa succede se =1? E se =0?
40
Timeout di ritrasmissione
.3

In base al valore corrente di RTT viene poi calcolato il Timeout
di ritrasmissione.

Ad esempio:
Timeout =  * RTT, con >1

Quanto vale  ?
 Se  e' prossimo a 1 si rilevano in fretta eventuali perdite di
segmenti,
ma e' anche facile che si debbano effettuare ritrasmissioni
inutili.
 La specifica originale indicava come valore consigliato =2.
41
Stima di RTT: problemi
.1

L'algoritmo base per il calcolo del timeout di ritrasmissione non
tollera un jitter (variazione del ritardo di rete) molto ampio.

La variazione statistica (varianza)  del round-trip delay e' tanto
maggiore quanto maggiore e' il traffico L (0L 1, espresso
come frazione della capacita' della rete) ( e’ inversamente
proporzionale a 1-L).

La regola canonica per il calcolo del timeout non sopporta un
traffico L>0.3.

TCP adesso richiede che anche la variazione (la derivata) del
RTT sia presa in considerazione per il calcolo del timeout,
ottenendo cosi' un valore di timeout piu' adattativo.

In realta', in pratica, anche se il valore medio del delay varia
significativamente nel tempo, la variazione tra due datagram
consecutivi e' molto piu’ contenuta.
42
Algoritmo di calcolo di RTT e Timeout

Algoritmo di calcolo raccomandato:
 diff(k) = RTTsample(k) - RTT(k-1)
 RTT(k) = RTT(k-1) +  * diff(k)
(N.B. la formula per il calcolo di RTT non e' cambiata.
Basta sostituire  con (1-)).
 dev(k) = dev(k-1) +  * (|diff(k)| - dev(k-1))
= (1 - ) * dev(k-1) +  * |diff(k)|
 Timeout(k) = RTT(k) +  * dev(k)
dove
 0<<1con valore consigliato = 1/23
 0<<1con valore consigliato = 1/22
 valore consigliato di  = 4
43
Stima di RTT: problemi
.2
 In realta' la procedura per il calcolo di RTT deve essere ancora piu'
complessa di quanto indicato.
 TCP utilizza uno schema di riscontro cumulativo, non selettivo-persegmenti. A quale/i segmento/i e' relativo un riscontro?
 In caso di ritrasmissione, il riscontro e' relativo al segmento originale
o alla ritrasmissione?
(in realta' entrambe le assunzioni si rivelano fuorvianti)
 Supponiamo che l'associazione sia con il segmento originale:
se ogni segmento viene perso almeno una volta RTT diverge,
perche' ogni incremento porta ad un aumento del timeout, che a
sua volta porta ad un ulteriore aumento di RTT.
 Supponiamo che l'associazione sia con il segmento ritrasmesso:
questo provoca un decremento di RTT che a sua volta provoca un
decremento di timeout, che quindi spirera' prima dell'ACK
causando una ritrasmissione e l'associazione dell'ACK con la
nuova ritrasmissione, e cosi' via.
Ogni segmento viene cosi' trasmesso 2 volte (anche in
44
assenza di perdite)!
Stima di RTT: algoritmo di Karn
.1
Strategia per la gestione delle ritrasmissioni:
1.
Nel calcolo di RTT si devono ignorare campioni relativi a
segmenti ritrasmessi.
2.
Quindi in caso di necessita' di ritrasmissione il valore di RTT
non viene aggiornato.
3.
In caso di ritrasmissione, pero', il valore del timer di
ritrasmissione (Timeout) viene disaccoppiato da quello di RTT.
4.
Il valore di Timeout viene aumentato di un fattore moltiplicativo
 ogni volta che si deve ritrasmettere un segmento (timer
backoff).
(normalmente, e' =2)
5.
Quando alla fine il mittente riesce a ricevere un ACK relativo
ad un segmento originale, il calcolo di un nuovo valore per
RTT viene riabilitato e il Timeout viene riagganciato a RTT.
45
Stima di RTT: algoritmo di Karn

.2
Per evitare che il Timeout cresca indefinitamente viene
normalmente fissato amministrativamente un valore massimo.
 Dovrebbe essere maggiore del massimo round-trip delay
possibile su Internet!

E' ovvio che l'algoritmo di Karn non funzionerebbe se non
disaccoppiasse Timeout da RTT:
 Altrimenti, in caso di rallentamento della rete con
conseguente ritrasmissione di un segmento, dato che RTT
non viene piu' aggiornato anche Timeout rimarrebbe di
conseguenza invariato!
 Il che comporterebbe ulteriori ritrasmissioni per timeout.
 Fino alla caduta della connessione.

N.B.: con l’aumentare delle ritrasmissioni la loro frequenza
decresce esponenzialmente!
46
TCP e congestione
.1
• La congestione dei router e' un fenomeno che si verifica nel Layer di Rete,
non in quello di Trasporto.
• Il Layer di Rete ha i suoi strumenti per fronteggiare la congestione:
• PDU di source squench ICMP.
• Politiche di scarto dei datagram in eccesso (nei router):
• Tail Drop,
• Random Early Discard.
• Anche senza interagire con il Livello di Rete TCP ha modo di accorgersi
dell'esistenza di una situazione di congestione:
 E' costretto a ritrasmettere dei segmenti.
 TCP assume che ogni ritrasmissione sia dovuta a congestione.
• TCP stesso, autonomamente, a fronte di una situazione di congestione, puo'
contribuire a risolverla.
• O a peggiorarla! Basta che effettui le ritrasmissioni previste senza
applicare l’algoritmo di Karn!
• Gia’ l’algoritmo di Karn garantisce che in caso di congestione le
ritrasmissioni siano rapidamente rallentate.
• Il problema e’ quindi limitare la trasmissione di nuovi byte anche se la 47
finestra di trasmissione la autorizzasse.
I bei tempi andati
• Nelle reti TLC tradizionali non sarebbe mai stato concepibile che il
malcomportamento di un ES potesse danneggiare il funzionalmento
della rete.
• Infatti la rete a pacchetto TLC per eccellenza, la rete X.25:
• era connection oriented (a livello di Network Service);
• preallocava le risorse per ciascuna connessione, ma evitava che
una singola connessione potesse accaparrarsi piu' risorse di
quelle previste;
• poteva effettuare un controllo d'accesso limitando l'ingresso di
nuovi utenti nel caso le risorse di rete risultassero sature.
• L'argomento di Tanenbaum:
• "What happens if the Network Layer offers inadequate service?
• The users have no real control over the Network Layer.
• The only possibility is to put on top of the Network Layer another
layer (allocato sugli ES!) that improves the quality of the service".
era quasi impensabile (vedi TP0-TP3 vs. TP4 nell'OSI).
48
TCP e congestione
•
.2
Per contrastare fenomeni di congestione lo standard TCP
raccomanda che ogni ES implementi due politiche:
1. multiplicative decrease
2. slow start
•
Lo scopo di queste due politiche e' di:
1. ridurre rapidamente la finestra effettiva di trasmissione (cioe’ la
trasmissione di ulteriori byte sulla rete) in caso di percezione di
congestione
 indipendentemente dalla disponibilita' del pari ricevente a
ricevere altri dati
 N.B. la ritrasmissione di byte gia’ trasmessi e’ limitata
dall’algoritmo di Karn
2. riaprire la finestra effettiva di trasmissione abbastanza
lentamente da evitare, al momento della fine della congestione,
che tutti gli ES che avevano in precedenza limitato le proprie
trasmissioni le riprendano cosi' rapidamente da ricreare la 49
situazione di congestione
TCP e congestione
.3
• A fianco della finestra di trasmissione TCP mantiene anche una
seconda finestra, detta finestra di congestione.
• La finestra di congestione serve, in caso di percezione di congestione, a
limitare la finestra effettiva, quella davvero utilizzata per regolare la
trasmissione dei dati (di nuovi dati), a valori piu' bassi di quanto indicato
dalla finestra di trasmissione:

finestra effettiva = min (finestra di trasmissione,
finestra di congestione)
• In condizioni normali (non di congestione) il valore della finestra di
congestione e' maggiore o uguale a quello della finestra di trasmissione:

finestra effettiva = finestra di trasmissione
• In caso di (per ogni) ritrasmissione (si assume che sia dovuta a
congestione) la finestra di congestione viene dimezzata.
•
La riduzione avviene per ogni ritrasmissione.
•
In caso di congestione la finestra di congestione e quindi anche
quella effettiva si riducono in modo esponenziale.
•
Il valore minimo ammesso della finestra di congestione e' 1 50
segmento.
TCP e fine della congestione: slow start
•
La riapertura della finestra di congestione, e quindi della finestra
effettiva, non avviene in modo moltiplicativo ma in modo additivo.
•
Aprire la finestra in modo moltiplicativo porterebbe a instabilita' del
sistema (oscillazioni tra congestione e rete scarica).
•
Quando si comincia ad utilizzare una nuova connessione e dopo
una fase di congestione, la finestra di congestione viene
posizionata a 1 segmento, e viene incrementata di 1 segmento per
ogni ACK ricevuto.
•
Il nome slow start e' fuorviante: il traffico cresce rapidamente (in
effetti la crescita non e' additiva ma esponenziale!).
• Dopo il primo ACK sono trasmessi 2 segmenti.
• Alla ricezione degli ACK relativi i segmenti trasmessi diventano
4, e cosi' via.
•
La finestra di congestione cresce cosi' rapidamente che per
rallentarne l'apertura, quando arriva a meta' del valore antecedente
la fase di congestione, essa viene incrementata di 1 solo quando
51
tutti i segmenti della finestra sono stati riscontrati.
TCP e fine della congestione: esempio
(Tanenbaum)
52
Implementazione di un TSAP su Internet
 Secondo OSI un TSAP e' un punto d'accesso al servizio del layer di
Trasporto.
 Il concetto di TSAP e' implementato (circa) in Internet attraverso la
nozione di porta di protocollo.
 Una porta di protocollo e' individuata attraverso una tripla:
 Un indirizzo IP del sistema su cui la porta si trova
 NSAP OSI
 Il protocollo cui la porta e' relativa (TCP vs. UDP)
 Il numero della porta (un intero compreso tra 1 e 65.535)
( TSEL OSI)
 Una porta identifica univocamente una applicazione che accede,
tramite il servizio di Trasporto, alla rete.
 Nel TCP l'astrazione fondamentale e‘ la connessione, identificata
dalla coppia di porte che si trovano ai suoi estremi, non la porta.
 TCP associa le comunicazioni (i TSAP) alle connessioni, non
alle porte.
 Ogni porta puo' partecipare a diverse connessioni.
53
Porte e Connessioni
Comer:
•
Dal punto di vista di un programmatore l'astrazione connessione e'
significativa.
•
Egli puo' creare un programma in grado di fornire un servizio
concorrente a piu' connessioni simultaneamente, senza avere
bisogno di numeri univoci di porta per ciascun collegamento.
 Le connessioni verso i diversi client avranno tutte uguale
identificatore di porta lato server, ma identificatore diverso per
ciascun client, e saranno quindi tutte distinguibili tra loro.
•
La maggior parte dei sistemi fornisce accesso simultaneo al sistema
di posta elettronica, consentendo a piu' computer di inviar loro in
parallelo le mail.
•
Poiche' il programma che accetta la posta in ingresso usa TCP per
comunicare, anche se consente a piu' connessioni di avere luogo
simultaneamente, deve utilizzare localmente solo una porta TCP.
•
N.B.: un servizio viene offerto su una porta. Uno specifico cliente
viene servito tramite una connessione che ha quella porta come 54
uno dei suoi 2 end-point.
Connessioni

Una connessione rappresenta una relazione tra 2 porte TCP, i suoi
end-point.

Dal punto di vista del protocollo TCP l’unico modo per identificare
una connessione e’ tramite gli indirizzi dei suoi due end-point.
 Invece nei protocolli di trasporto OSI ad ogni connessione e’
associato anche un ulteriore identificatore che la rende
distinguibile rispetto ad altre connessioni tra gli stessi end-point.
 Nota che la modalita’ TCP di identificare le connessioni e’ fonte
di notevoli problemi (vedi seguito).

Per evitare ambiguita’, ad ogni istante non possono esistere sulla
rete piu’ connessioni tra gli stessi end-point.

Le protocol entity TCP che gestiscono le porte agli estremi della
connessione mantengono lo stato della connessione stessa.

Il protocollo TCP in realta’ non gestisce porte ma solo connessioni.

Una porta TCP non connessa e non in corso di dis/connessione (in
particolare, una porta in stato Listening) viene marcata come
55
connessa alla porta inesistente 0.0.0.0:0
+---------+ ---------\
active OPEN
| CLOSED |
\
----------+---------+<---------\
\
create TCB
|
^
\
\ snd SYN
passive OPEN |
|
CLOSE
\
\
------------ |
| ---------\
\
create TCB |
| delete TCB
\
\
V
|
\
\
+---------+
CLOSE
|
\
| LISTEN |
---------- |
|
+---------+
delete TCB |
|
rcv SYN
|
|
SEND
|
|
----------|
|
------|
V
+---------+
snd SYN,ACK /
\
snd SYN
+---------+
|
|<---------------------------------->|
|
|
SYN
|
rcv SYN
|
SYN
|
|
RCVD |<-----------------------------------------------|
SENT |
|
|
snd ACK
|
|
|
|------------------------------------|
|
+---------+
rcv ACK of SYN \
/ rcv SYN,ACK
+---------+
|
-------------|
|
----------|
x
|
|
snd ACK
|
V
V
| CLOSE
+---------+
| ------| ESTAB |
| snd FIN
+---------+
|
CLOSE
|
|
rcv FIN
V
------|
|
------+---------+
snd FIN /
\
snd ACK
+---------+
| FIN
|<---------------------------------->| CLOSE |
| WAIT-1 |-----------------|
WAIT |
+---------+
rcv FIN \
+---------+
| rcv ACK of FIN
------|
CLOSE |
| -------------snd ACK
|
------- |
V
x
V
snd FIN V
+---------+
+---------+
+---------+
|FINWAIT-2|
| CLOSING |
| LAST-ACK|
+---------+
+---------+
+---------+
|
rcv ACK of FIN |
rcv ACK of FIN |
| rcv FIN
-------------- |
Timeout=2MSL -------------- |
| ------x
V
-----------x
V
\ snd ACK
+---------+delete TCB
+---------+
------------------------>|TIME WAIT|------------------>| CLOSED |
+---------+
+---------+
TCP Connection State Diagram
56
O:\>netstat -a -n
Connessioni attive
Proto
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
TCP
Indirizzo locale
0.0.0.0:21
0.0.0.0:25
0.0.0.0:80
0.0.0.0:5900
127.0.0.1:21
127.0.0.1:1084
127.0.0.1:2935
127.0.0.1:6129
172.16.2.64:21
172.16.2.64:139
172.16.2.64:1064
172.16.2.64:1711
172.16.2.64:2215
172.16.2.64:2501
172.16.2.64:2536
172.16.2.64:2942
172.16.2.64:2944
172.16.2.64:2945
172.16.2.64:2948
Indirizzo esterno
0.0.0.0:0
0.0.0.0:0
0.0.0.0:0
0.0.0.0:0
127.0.0.1:2935
127.0.0.1:6129
127.0.0.1:21
127.0.0.1:1084
172.16.2.64:2948
0.0.0.0:0
172.16.0.79:139
172.16.0.59:80
172.16.0.42:139
172.16.0.4:139
172.16.0.5:445
172.16.0.6:389
172.16.0.6:389
172.16.0.6:445
172.16.2.64:21
Stato
LISTENING
LISTENING
LISTENING
LISTENING
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
LISTENING
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
ESTABLISHED
TIME_WAIT
TIME_WAIT
TIME_WAIT
ESTABLISHED
57
TSAP e connessioni
• Nel mondo TCP un TSAP rappresenta una connessione.
• Una porta non connessa (in stato “Listening”) e’ formalmente
connessa alla porta remota 0.0.0.0:0.
 Che e’ evidentemente un indirizzo di porta fittizio, perche’
• il numero di porta 0 non e’ ammesso
• 0.0.0.0 non e’ ammesso come indirizzo remoto e ha un
significato particolare quando utilizzabile come indirizzo
locale.
• Una porta in stato “Listening” su qualunque indirizzo IP della
macchina si considera che sia associata all’indirizzo IP 0.0.0.0.
 Nel momento in cui una porta “Listening” diventa connessa le
viene comunque attribuito un preciso indirizzo IP, quello relativo
alla sottorete su cui e’ stata attivata la connessione.
• Quando una connessione in stato “Listening” si avvia a diventare
connessa, TCP crea un’altra connessione in stato “Listening” per la
58
stessa porta.
TCP e creazione di una connessione
• Perche' e' difficile creare in modo affidabile una connessione TCP?
• Perche' il servizio fornito dal layer IP e' inaffidabile.
• In particolare e' possibile che datagram IP vengano non solo persi,
ma anche ritardati e/o duplicati.
• Uno dei problemi che possono nascere in presenza di segmenti
ritardati (eventualmente duplicati) e' il seguente:
• Segmenti ritardati dalla rete e relativi ad una vecchia connessione
sono ricevuti quando una nuova connessione tra gli stessi endpoint e' gia' stata stabilita.
• TCP, a differenza di OSI TPx, non utilizza un identificatore
specifico di connessione, oltre ai due end-point, cosi’ da essere in
grado di distinguere i segmenti relativi alla connessione corrente
da quelli obsoleti.
• Caso estremo (Tanenbaum): tutti i segmenti inviati da un end-point di
una connessione sono duplicati, e tutti i duplicati sono consegnati al
destinatario ritardati ma in ordine, dopo che la connessione e' gia'
59
stata chiusa.
Eliminazione di datagram obsoleti
•
E' possibile limitare a priori il tempo di vita di un datagram IP?
•
Si' perche', se si evitano cicli, il numero di hop necessari per
attraversare l'intera Internet e' finito.
•
Basta inserire uno hop-count in ogni datagram e decrementarlo ogni
volta che un router lo ritrasmette. Quando lo hop count raggiunge lo 0
il datagram deve essere cestinato.
•
Equivalentemente si potrebbe marcare ogni datagram con un timestamp.
• Ma questo e' piu' complesso in quanto richiederebbe che gli
orologi di tutti i nodi della rete fossero sincronizzati.
• In effetti esiste un protocollo di internet per la sincronizzazione
degli orologi (NTP), e funziona anche molto bene, ma l’utilizzo
dell’hop-count e’ ovviamente molto piu’ efficiente.
•
In realta' bisogna garantire anche che l'ACK di un segmento sia morto
entro un tempo finito:
• indichiamo con Tmax il tempo di vita massimo di un segmento e
60
del suo ACK.
TP4 OSI e creazione di una connessione
•
•
•
•
Basandosi
• sulla eliminazione dei datagram obsoleti e
• sul fatto che ogni volta che l’initiator chiede al responder l’apertura
di una connessione marca la richiesta con un ID di connessione
diverso
e’ sufficiente che il responder mantenga memoria dell’ID di una
connessione chiusa per un tempo Tmax.
Ogni volta che riceve un richiesta di connessione il responder puo’
verificare facilmente se la richiesta e’ attuale o e’ obsoleta.
Ma in caso di restart del responder?
• Il responder perde la lista delle connessioni chiuse per le quali
possono ancora essere presenti nella rete dei segmenti obsoleti!
• Questo problema puo' essere risolto proibendo ad un end-system
di attivare la rete dopo il boot per un periodo di tempo pari a Tmax.
Ma in caso di restart dell’initiator?
• Come fa l’initiator a ricordarsi degli ID gia’ usati?
61
• Tramite il meccanismo dell’orologio contatore!
Il meccanismo dell’orologio contatore
•
•
•
•
•
•
Ogni macchina viene dotata di un contatore periodico
autoincrementante (un orologio contatore).
L’orologio contatore deve operare anche in caso di spegnimento
della macchina.
Il contatore deve avere un numero di bit sufficientemente grande.
Nel caso di TP4 l’orologio contatore puo’ venire utilizzato per
selezionare in modo sicuro un ID univoco per la prossima richiesta
di connessione che viene generata sulla macchina.
Ma in TCP le connessioni non sono marcate con un ID
addizionale!
Nel caso del TCP l’orologio contatore locale viene utilizzato da
ciascun end-point per selezionare il valore iniziale del sequence
number che esso usera’ in trasmissione.
• Il sequence number dei segmenti trasmessi in una
connessione viene inizializzato con i bit piu' leggeri del
contatore.
• Il numero di bit dell’orologio contatore deve quindi essere
maggiore o uguare a 232, dimensione del sequence number
TCP.
62
TCP e creazione di una connessione
• E’ evidente che perche’ TCP funzioni bene lo spazio dei valori del
sequence number deve essere talmente grande che quando una
connessione riutilizza un valore il segmento che lo aveva gia' utilizzato
e' gia' stato eliminato dalla rete.
• Bisogna cioe’ evitare che ci siano nella rete due segmenti
• relativi alla stessa connessione (cioe' agli stessi end-point),
• con uguale sequence number,
• ma indipendenti tra loro (non uno la ritrasmissione dell'altro).
• Se riuscissimo a fare questo anche il problema di realizzare una
connessione sicura, evitando interazioni con segmenti relativi a
connessioni passate tra gli stessi end-point, sarebbe risolto.
• Per ottenere questo TCP correla (limita) la velocita’ di trasmissione
sulla connessione all’avanzamento dell’orologio contatore, cosi’ che
l’orologio contatore sia sempre in grado di fornire un valore sicuro di
sequence number iniziale in caso di chiusura ed immediata riapertura
della connessione tra due end-point .
• E’ sufficiente che la il numero di byte trasmessi non ecceda il
numero di tick di cui e’ avanzato l’orologio contatore.
• L’orologio contatore deve avanzare ad una velocita’ tale da non
63
limitare la banda della connessione.
Creazione di una connessione: 3-way handshake

Ogni macchina sceglie in modo sicuro il sequence number iniziale
(utilizzando il proprio orologio contatore).

Le due macchine si scambiano i propri contatori (e confermano la
ricezione del contatore dell'altra) con uno scambio di 3 segmenti.
Send(SYN(seq=x))
Receive(SYN(seq=x))
Send(SYN(seq=y)+ACK(x+1))
Receive(SYN(seq=y)+ACK(x+1))
Send(ACK(y+1))
Receive(ACK(y+1))
Esercizio: quali altri parametri devono essere concordati durante il protocollo di set-up?
Esercizio: mappare la specifica del servizio T-CONNECT su questo scambio di PDU64
Creazione di una connessione: 3-way handshake
Comer:
• Di solito il SW TCP su una macchina aspetta passivamente la
sincronia (richiesta di apertura passiva della connessione) e il SW TCP su
un'altra la inizia (richiesta di apertura attiva della connessione).
• La sincronia e' pero' progettata per funzionare anche se entrambe le
macchine tentano di iniziare una connessione simultaneamente.
• (in ogni caso) Una volta che la connessione e' stata stabilita, i dati
possono fluire in entrambe le direzioni: non esiste una macchina
principale e una secondaria.
• Il protocollo deve usare un meccanismo di timeout e ritrasmettere le
richieste andate perse.
• TCP ignora altre richieste di connessione (tra uno stesso paio di
end-point) dopo che tra loro e' gia' stata stabilita una connessione.
• La sincronia svolge due importanti funzioni (+ altre: quali?):
• garantisce che entrambi i lati siano pronti a trasferire dati
• consente ad entrambi di concordare sui numeri di sequenza
65
iniziali.
Connection Establishment (Tanenbaum)
Three protocol scenarios for establishing a connection using a three-way
handshake. CR denotes CONNECTION REQUEST.
(a) Normal operation,
(b) Old CONNECTION REQUEST appearing out of nowhere.
(c) Duplicate CONNECTION REQUEST and duplicate ACK.
66
TCP e chiusura di una connessione
.1
 La procedura di disconnessione morbida (ordinata) deve
consentire di chiudere una connessione dopo che
 le parti hanno trasmesso tutto cio' che dovevano trasmettere;
 ciascuna parte ha ricevuto tutto cio' che l'altra parte ha
trasmesso.
 Le connessioni TCP sono viste a tutti gli effetti come due flussi
indipendenti di dati, uno in ciascuna direzione.
 Quando un cliente TCP chiude la connessione, indica
effettivamente che non ha piu' dati da trasmettere su di essa:
 chiede quindi la chiusura di una direzione della connessione.
 Prima di iniziare il protocollo di disconnessione l'entita' di
protocollo TCP lato mittente aspetta di
 avere trasmesso tutti i dati pendenti;
 avere ricevuto tutti i relativi ACK dalla controparte.
67
TCP e chiusura di una connessione
.2
 Dopo che ha effettuato la richiesta di chiudere la connessione, il
cliente non puo' piu' chiedere la trasmissione di altri dati.
 Il lato ricevente del TCP, quando riceve un segmento FIN
 lo riscontra;
 informa il proprio cliente che dalla connessione non
arriveranno piu' altri dati (e.g. con una indicazione di EOF).
 Notare che se una connessione e' stata chiusa in una direzione,
rimane pero' ancora aperta nell'altra.
 Dire che una direzione e' chiusa significa dire che e' chiusa a
segmenti informativi:
 segmenti che non trasportano informazioni (e.g. semplici
ACK) possono continuare a viaggiare in quella direzione.
 Una connessione e' effettivamente chiusa quando entrambe le
sue direzioni sono state chiuse.
68
TCP e chiusura di una connessione
.3
FromClient(close.req)
Send(FIN(seq=x))
Receive(FIN(seq=x))
ToClient(close.ind)
Send(ACK(x+1))
Receive(ACK(x+1))
FromClient(close.req)
Send(FIN(seq=y)+ACK(x+1))
Receive(FIN(seq=y)+ACK(x+1))
ToClient(close.ind)
Send(ACK(y+1))
Receive(ACK(y+1))
N.B.: non esiste un servizio OSI di disconnessione ordinata
69
TCP e chiusura di una connessione
.4
 Naturalmente e' possibile che segmenti (di FIN e di ACK) vadano
persi durante l'esecuzione del protocollo di disconnessione.
 Per recuperare la perdita di segmenti ci si basa su timer.
 Se il mittente del primo segmento di FIN non riceve un ACK entro lo
scadere del timer, riprende il protocollo da capo.
 Dopo n tentativi falliti il mittente del primo segmento FIN chiude
unilateralmente la connessione.
 La controparte non e' naturalmente informata di cio'.
 Se ne accorgera' nel caso sia ancora attiva e provi a comunicare
perche' non otterra' risposta.
 Anche il mittente del secondo segmento di FIN, se non riceve un
ACK entro lo scadere del timer, chiude unilateralmente la
connessione.
 I timer di disconnessione sono normalmente collegati al tempo di vita
massimo di un segmento.
70
TCP e chiusura non ordinata di una connessione
 Una connessione puo' anche essere chiusa unilateralmente in
modo brusco.
 In questo caso:
 non c'e' alcuna garanzia che precedenti richieste di
trasmissione siano (state) onorate,
 ne' che tutti i dati trasmessi dall'altra parte siano stati ricevuti.
 In ogni caso una richiesta di abort della connessione da parte del
cliente provoca l'invio di un segmento di protocollo (RST) all'altra
parte per informarla della cosa.
 Un abort ha effetto in modo bidirezionale:
 interrompe le comunicazioni in entrambe le direzioni.
71
Scenario elementare di trasmissione / ricezione
TCP entity
write()
IP
end-point
TX buffer
tempo
TCP entity
end-point
info
RX buffer
ack
end-point
end-point
TX buffer
RX buffer
read()
window
 Quando il ricevente ha inserito i byte ricevuti in RX buffer puo’ (deve?)
generare ACK.
 Quando il mittente riceve ACK puo’ liberare (elimina) i byte trasmessi ma
ancora contenuti in TX buffer (per eventuali ritrasmissioni).
 Quando il cliente acquisisce i byte contenuti in RX buffer, questi byte possono
essere liberati e di conseguenza la finestra di trasmissione del mittente puo’
(deve?) essere aperta.
 In realta’ l’apertura della finestra puo’ essere convenientemente dilazionata
72
(per limitare l’overhead), tanto piu’ se la finestra stessa non era stata
completamente chiusa.
Problemi di prestazioni: delayed ACK .1
 Lo scenario di comunicazione elementare e’ molto inefficiente:
 Per ogni PDU informativo (contenente byte di payload) trasmesso
viaggiano 2 PDU contenenti solo byte di overhead.
 Le prestazioni del TCP possono essere migliorate se il ricevente non
trasmette subito l'ACK ad un segmento informativo ricevuto.
 Puo' comunque unificare ACK e apertura di finestra
(che dovrebbe/potrebbe generare dopo la lettura dell'informazione
del segmento da parte del cliente).
 Puo' trasmettere l'ACK facendone il piggyback su un segmento
informativo trasmesso in direzione opposta .
 E.g. sul segmento contenente la risposta applicativa al
segmento ricevuto.
 Ma perche’ dovrebbe esseci una risposta applicativa?
 Perche’ molti protocolli applicativi seguono il pattern
request-reply, e.g. HTTP e RPC.
 Esempio: eco dei caratteri ricevuti in una applicazione di73
terminale remoto.
Problemi di prestazioni: delayed ACK .2
 L’ACK comunque deve essere generato entro un tempo massimo,
per evitare l’inutile ritrasmissione del PDU informativo.
 Ritardare la generazione di ACK puo' avere controindicazioni:
 Se il ritardo e' eccessivo puo' stimolare la inutile ritrasmissione di
segmenti (ma questo, ovviamente non dovrebbe succedere).
 Puo' confondere il calcolo del round-trip delay (questo e’
inevitabile!).
 Lo standard TCP:
 Raccomanda di utilizzare la politica di delayed ACK.
 Specifica che l'inerzia di generazione di un ACK deve essere al
massimo di 500 msec.
 N.B.: questo diventa un lower bound per RTT!
 La generazione di ACK deve essere immediata almeno ogni 2
segmenti.
 Esercizio: definire uno scenario in cui ACK e apertura di finestra
risultino fisiologicamente contestuali.
74
Problemi di prestazioni:
la sindrome della finestra scema
 Supponiamo che un lato della connessione sia piu' veloce dell'altro e
che la rete non ponga limiti significativi di banda.
 Consideriamo la trasmissione dal lato veloce a quello lento:
 Dopo un po' il buffer del lato ricevente sara’ completamente
occupato e la finestra sara' chiusa.
 A questo punto il cliente lato ricevente legge un byte (dal buffer di
ricezione della connessione).
 Di conseguenza il TCP lato ricevente genera un segmento di
apertura di finestra di un byte.
 Il lato trasmittente invia immediatamente un segmento informativo
contenente un byte, saturando di nuovo il buffer del lato ricevente.
 Il ciclo si ripete con il lato mittente che trasmette dati un byte alla
volta, un byte per segmento.
 Si utilizza un PDU informativo per trasmettere 1 solo byte di payload
75
(senza contare eventuali, conseguenti, PDU di overhead).
La sindrome della finestra scema, lato ricevente
 Esistono contromisure lato ricevente. La strategia e':
• Non aprire la finestra per un numero di byte troppo piccolo.
• Aspettare ad aprire la finestra finche' la si possa aprire in modo
abbastanza significativo.
 TCP definisce questa quantita' come:
• Almeno meta' della dimensione totale del buffer disponibile lato
ricezione,
oppure (il minimo dei due):
• Almeno la dimensione del massimo segmento consentito (MTU)
(N.B.: cio’ garantisce il miglior rapporto payload/overhead
possibile).
 La ricetta secondo Comer:
Receive-Side Silly window Avoidance: before sending an updated
window advertisment after advertising a 0-window (dopo avere
bloccato il lato mittente), wait for space to become available to be at
least 50% of the total buffer size or equal to a maximum-sized
76
segment.
La sindrome della finestra scema, lato mittente
.1
 Esistono contromisure lato mittente. La strategia e':
 Cercare di evitare l'invio di segmenti informativi che contengano
pochi dati.
 Cercare di evitarlo anche a fronte di singole richieste, da parte del
cliente, di trasmissione di pochi byte.
 In questo caso, aspettare a soddisfare le singole richieste, cercando,
con un singolo segmento trasmesso, di soddisfare
contemporaneamente piu' di una richiesta di trasmissione del cliente.
 La ricetta secondo Comer (algoritmo di Nagle):
Send-Side Silly window Avoidance: when a sending application
generates additional data to be sent over a connection for which
previous data has been transmitted but not acknowledged, place the
new data in the output buffer as usual, but do not send additional
segments until there is sufficient data to fill a maximum-sized segment.
If still waiting to send when an acknowledgement arrives, send all data
that has accumulated in the buffer.
77
La sindrome della finestra scema, lato mittente
.2
 Il principio e' che il tempo di isteresi per soddisfare una richiesta di
trasmissione del cliente e' adattativo.
 Dipende dalla velocita' della rete.
 Dipende dalla velocita' della controparte.
 Dipende dal tipo di traffico generato dal cliente.
 Consideriamo i casi estremi:
 Per un file transfer il cliente mittente genera grandi quantita' di
dati che saturano il segmento di massima dimensione.
La trasmissione dei dati non viene quindi ritardata.
 Nel caso di un virtual terminal il cliente mittente genera un
carattere alla volta. Il primo viene inviato immediatamente.
Quelli successivi sono accumulati in attesa dell'ACK del primo, e
non appena questo arriva sono immediatamente trasmessi in
blocco.
Dal punto di vista del cliente non c'e' una significativa percezione
78
di ritardo.
Algoritmo di Nagle
 L’algoritmo di Nagle e’ utile per eliminare la sindrome della finestra
scema ma rappresenta anche una politica generale capace di
ottimizzare il rapporto payload/overhead.
 Vedi l’esempio Telnet (terminale virtuale).
 Infatti tutte le implementazioni di TCP implementano l’algoritmo di
Nagle e, di default, lo applicano a tutte le connessioni.
 Esercizio: essendo attivo l’algoritmo di Nagle che differenza c’e’ tra
N richieste, immediatamente in sequenza, di trasmissione di 1 byte
e una singola richiesta di trasmissione di N byte?
 Dal punto di vista del carico di rete.
 Dal punto di vista del carico computazionale sui due endsystem.
 Descrivere alcuni possibili scenari (per diverse velocita’ di endsystem e rete).
79
Push dei dati e Algoritmo di Nagle
 Ci sono applicazioni per le quali l'utilizzo dell'algoritmo di Nagle non e'
appropriato:
 in una applicazione come X-term o VNC, ad esempio, il suo
utilizzo causerebbe lo spostamento a scatti del mouse.
 In teoria TCP consente, tramite una operazione di push, di forzare la
trasmissione dei dati.
 L'operazione di push pero' non by-passa l'algoritmo di Nagle.
 L'algoritmo di Nagle puo' essere disabilitato per una connessione
attraverso una opportuna configurazione dell'entita' di protocollo TCP.
 Vedi l'opzione TCP_NODELAY della system call setsockopt()
(lezione 4).
 L'algoritmo di Nagle viene normalmente disabilitato nelle
applicazioni in tempo reale.
 Esercizio: supponiamo che sia MTU=1000 e che il processo mittente esegua
in successione 4 operazioni di trasmissione, rispettivamente di 500, 500, 250,
500 byte. Come vengono effettivamente trasmessi questi byte in rete, e come
vengono ricevuti dal processo destinatario se assumiamo che questo sia 80
permanentemente in ricezione?
Interazione livello applicativo - TCP
 TCP cerca di ottimizzare le prestazioni della rete qualunque siano le
caratteristiche del dialogo applicativo, caratteristiche che ovviamente
non possono essere limitate a priori.
 L’algoritmo di Nagle ha questo scopo, anche al di la’ del caso specifico
della sindrome della finestra scema.
 Le caratteristiche dell’applicazione possono avere impatti significativi
sulle prestazioni fornite da TCP.
 Ad esempio, se in un dialogo request-reply la risposta e’ sempre (o
non e’ mai) generata in tempi sufficientemente brevi da consentire il
piggybacking dell’ACK.
 Se l’applicazione disabilita le modalita’ operative normali di TCP se ne
assume la responsabilita’ e ne subisce eventualemente le
conseguenze.
 In caso di disabilitazione dell'algoritmo di Nagle non e’ piu’ vero che
N operazioni di write da 1 byte l’una sono piu’ o meno equivalenti a
1 operazione di write da N byte.
Dovra’ essere cura dell’applicazione minimizzare le operazioni 81
di write.
Dati fuori banda (expedited data)
 Il TCP fornisce un servizio di trasmissione affidabile di una sequenza
continua e ordinata di byte.
 Puo' pero' essere significativo poter trasmettere dei dati che siano
ricevuti dalla controparte al di fuori della sequenza: ad esempio se
voglio inviare un comando di abort all'applicazione remota.
 Per consentire una cosa del genere il cliente puo' marcare una
richiesta di trasmissione come urgente (out-of-band), e questa e'
trasportata in un segmento che contiene anch'esso la marca di urgente
(e che viene trasmesso immediatamente).
 TCP specifica che quando il lato ricevente riceve un segmento marcato
urgente, esso deve entrare in stato di urgenza e informare
immediatamente della cosa il cliente.
 A cosa servono i dati fuori banda se il processo destinatario non
viene informato subito della loro ricezione?
 Come? Dipende dal sistema operativo, e.g. attraverso un signal.
 Quando il cliente lato ricevente ha letto tutti i dati urgenti viene
informato della fine dello stato di urgenza.
82
Scarica

Il Layer di Trasporto