1 of 50

Livello Trasporto

TCP, UDP, ICMP

Transport Layer

3-1

2 of 50

Dove siamo

application

transport

network

data link

physical

application

transport

network

data link

physical

application

transport

network

data link

physical

3 of 50

Il livello di trasporto

  • Strato di interfaccia con il livello rete
  • Livello rete: un canale di comunicazione molto particolare
  • Inaffidabile
    • I pacchetti possono «morire», principalmente per tre possibili motivi:
      • Congestione della rete, congestione della destinazione, corruzione dei pacchetti
  • Ciò che parte non arriva sempre nello stesso ordine

Transport Layer

3-3

4 of 50

Principali funzioni offerte dal liv. Rete verso il liv. trasporto

Transport Layer

3-4

Send(ip1,ip2,data[])

Data[] Receive()

Connect(), Disconnect()

5 of 50

UDP

UDP Risolve solo i problemi di corruzione dei pacchetti, e vi da la possibilità di differenziare il traffico per numero di porta (multiplexing/demultiplexing).

DNS usa UDP.

Transport Layer

3-5

6 of 50

Come funziona il demultiplexing

Transport Layer: 3-6

  • Un host H riceve datagrammi IP
    • Ogni datagramma trasporta un pacchetto di livello 4
    • In questo pacchetto sono menzionati porta sorgente e destinazione
  • H usa gli indirizzi IP e i numeri di porta per distribuire I pacchetti L4 nel socket giusto
  • In UDP il demultiplexing della sorgente va fatto programmando il codice applicativo

source port #

dest port #

32 bits

application

data

(payload)

other header fields

TCP/UDP segment format

7 of 50

UDP checksum

Transport Layer

3-7

8 of 50

Checksum

  • Consente di rilevare eventuali corruzioni «spontanee» dei dati trasmessi
  • Assolutamente inutile in caso di manomissioni volontarie

Transport Layer

3-8

9 of 50

  • Le checksum consentono di rilevare corruzioni accidentali, ma non manomissioni volontarie. Per quello esistono i MIC/MAC (Message Integrity Codes/Message Authentication Codes, da non confondere con i MAC address)

Transport Layer

3-9

10 of 50

  • Esempio concreto di hop in posizione MiTM (router domestico)

11 of 50

Come è connesso TCP/UDP/ICMP allo strato applicazione

  • Sullo strato applicazione ci sono funzioni di libreria per aprire, chiudere, scrivere e leggere da socket
  • Sul livello trasporto c’è una libreria del sistema operativo (detta STACK TCP/IP) che si occupa di sbucciare e smistare i messaggi in base ai numeri di porta e al protocollo utilizzato.

Transport Layer

3-11

12 of 50

Comunicazione TCP: Passo 1

  • Due interlocutori, messi in comunicazione con un canale inaffidabile (i pacchetti possono sparire o arrivare corrotti, o addirittura in ritardo)

Transport Layer

3-12

13 of 50

  • Diagramma a cinque colonne

Transport Layer

3-13

14 of 50

Implementazione. Stop & Wait

  • Obiettivo: implementare un canale affidabile e sequenziale su un canale non affidabile
  • Prima soluzione: protocollo stop & wait
    • Conferma di ogni pacchetto
    • La mancata conferma viene rilevata tramite time-out
    • Numeri di sequenza
    • Inefficiente

Transport Layer

3-14

15 of 50

Stop & Wait in azione

Transport Layer

3-15

16 of 50

Altri scenari

Transport Layer

3-16

N.B. Problema del pacchetto vagabondo

17 of 50

Problema del pacchetto vagabondo

  • Si verifica se un certo pacchetto numerato DATA(x) oppure un ACK(x) viene consegnato in grave ritardo e proprio nel momento in cui il round stop & wait è di nuovo x.

18 of 50

Performance di stop & wait

  • Brutte notizie:
  • esempio: Banda 1 Gbps, 30 ms RTT, pacchetti da 1KB (L):

Transport Layer

3-18

T

trasmiss

=

8kb/pkt

10**9 b/sec

= 8 microsec

    • U : % utilizzo – frazione di tempo in cui viene utilizzata la connessione

L (in bit)

B

=

    • 1KB ogni 30 msec -> 33kB/sec effettivi contro 1 Gbps potenziali!
    • Il protocollo limita l’uso delle risorse a disposizione

19 of 50

Da dove deriva la formula (demo)

Transport Layer

3-19

Trasmissione del primo bit, t = 0

sender

receiver

RTT

Trasmissione dell’ultimo bit, t = L / B

Il primo bit arriva

L’ultimo pacchetto arriva,

Invio ACK (assumiamo sia

di dim trascurabile)

ACK arriva, parte il prossimo pacchetto al tempo t = RTT + L / B

20 of 50

Comunicazione TCP: passo 2

  • Protocolli a finestra scorrevole
  • Go Back N, Selective Repeat
  • Finestra dinamica
  • Esempio tratto dal libro di testo:

Transport Layer

3-20

21 of 50

Protocolli pipeline (a finestra scorrevole)

Pipelining: ci possono essere più pacchetti “in volo”, ancora da essere confermati

    • Più complesso
    • Gestione dei buffer sofisticata
  • Due forme di protocolli sliding window: go-Back-N, selective repeat

Transport Layer

3-21

22 of 50

Pipelining: %utilizzo migliore

Transport Layer

3-22

Trasmissione primo bit, t = 0

sender

receiver

RTT

Trasmissione ultimo bit, t = L / R

Arriva il primo bit, primo pacchetto

Ultimo bit arriva, mando ACK(1)

Arriva ACK(1) mando il pacchetto successivo

t = RTT + L / R

Ultimo bit 2do pacchetto arriva, ACK(2)

Ultimo bit 3° pacchetto arriva, mando ACK(3)

Utilizzo

triplicato

23 of 50

Go-Back-N (demo)

Sender:

  • Numeri di sequenza a k bit
  • “finistra” di N pacchetti, pacchetti non confermati possibili

Transport Layer

3-23

  • ACK(n): “il prossimo pacchetto che aspetto è il numero n
    • Possono arrivare ACK duplicati
  • C’è un timer per ogni pacchetto “in volo”
  • timeout(n): ritrasmette il pacchetto n e anche tutti I successivi (anche se magari erano arrivati correttamente)

24 of 50

GBN in�azione

Transport Layer

3-24

25 of 50

Ripetizione selettiva (demo)

  • I pacchetti corretti sono confermati INDIVIDUALMENTE
    • I pacchetti sono conservati in attesa che possano essere rilasciati in ordine
  • Il mittente rimanda solo I pacchetti non confermati
    • C’è un timer per ogni pacchetto “in volo”
  • Finestra del mittente
    • Range di numeri attivi

  • Net-SEAL animations

Transport Layer

3-25

26 of 50

Finestre di ricezione e invio

Transport Layer

3-26

27 of 50

Ripetizione selettiva

Ci sono dati nel buffer:

  • Mandali se ci sono slot

Timeout(n):

  • Rimanda il pacchetto n

ACK(n) in [sendbase,sendbase+N]:

  • marca n come OK
  • Nel caso sposta la finestra in avanti di 1

Transport Layer

3-27

sender

pkt n in [rcvbase, rcvbase+N-1]

  • manda ACK(n)
  • Fuori ordine? Conserva
  • In ordine: consegna e sposta la finestra in avanti

pkt n in [rcvbase-N,rcvbase-1]

  • ACK(n) (duplicato che non sembra confermato)

altrimenti:

  • ignora

receiver

28 of 50

Selective repeat in azione

Transport Layer

3-28

29 of 50

Problemi

Esempio:

  • Numeri di seq: 0, 1, 2, 3
  • Taglia finestra=3

  • I due scenari non sono distinguibili!
  • Il duplicato viene passato allo strato trasporto

P: Bisogna riconoscere e scartare I duplicati

Transport Layer

3-29

30 of 50

TCP segment structure

Transport Layer

3-30

source port #

dest port #

32 bits

application

data

(variable length)

sequence number

acknowledgement number

Receive window

Urg data pnter

checksum

F

S

R

P

A

U

head

len

not

used

Options (variable length)

URG: Dati urgenti

(non molto usato)

ACK: Questo�segmento trasporta�un ACK

PSH: dati ad�alta priorità

RST, SYN, FIN:

Gestione�Connessione

Numero

di byte

che si è

disposti

ad accettare

al massimo

valori

espressi in byte

(non in numero

di segmento)

Checksum

(come in UDP)

31 of 50

Numeri di Sequenza e di ACK

N. seq:

    • Offset del primo byte nei dati

ACK:

    • Numero del prossimo byte da ricevere
    • ACK cumulativo

L’implementatore può decidere se conservare I segmenti fuori ordine o scartarli

Differenze pratiche: numerazione in byte, pacchetto di dim. variabile, piggybacking

Transport Layer

3-31

Host A

Host B

Seq=42, ACK=79, data = ‘Ciao’

Seq=79, ACK=46, data = ‘Ehi’

Seq=46, ACK=82

L’utente

Scrive

“ciao”

Ricevuta

Di ritorno per

‘Ehi’

B risponde

con

‘Ehi’, e fa

ACK fino a 46

tempo

32 of 50

Situazioni di ritrasmissione

Transport Layer

3-32

Host A

Seq=100, 20 bytes data

ACK=100

time

Time out prematuro

Host B

Seq=92, 8 bytes data

ACK=120

Seq=92, 8 bytes data

Seq=92 timeout

ACK=120

Host A

Seq=92, 8 bytes data

ACK=100

loss

timeout

ACK disperso

Host B

X

Seq=92, 8 bytes data

ACK=100

time

Seq=92 timeout

SendBase

= 100

SendBase

= 120

SendBase

= 120

Sendbase

= 100

33 of 50

ACK cumulativo

Transport Layer

3-33

Host A

Seq=92, 8 bytes data

ACK=100

loss

timeout

ACK cumulativo

Host B

X

Seq=100, 20 bytes data

ACK=120

time

SendBase

= 120

34 of 50

TCP Connection Management

TCP necessità di aprire una connessione prima di trasmettere

  • Bisogna inizializzare le variabili:
    • Numeri di sequenza
    • Allocare I buffer di invio e ricezione
  • client: colui che apre la connessione

Socket clientSocket = new Socket("hostname","port number");

  • server: colui che è contattato

Socket connectionSocket = welcomeSocket.accept();

Handshake a tre vie:

Step 1: Il client manda un TCP SYN al server

    • Indica il suo numero di seq. iniziale
    • no dati

Step 2: Il server riceve la richiesta, replica con un pacchetto SYN/ACK

    • Specifica il suo numero di partenza
    • Alloca I suoi buffer (per sfortuna)

Step 3: Il client riceve SYN/ACK, risponde con un ACK, che può contenere dati

Transport Layer

3-34

35 of 50

Transport Layer

3-35

36 of 50

TCP Connection Management (cont.)

Chiusura di una connessione:

Il client chiude il socket: clientSocket.close();

Step 1: il client manda TCP FIN per dire che vuole chiudere

Step 2: il server riceve FIN, risponde con ACK. Chiude la connessione, e manda FIN a sua volta

Transport Layer

3-36

client

FIN

server

ACK

ACK

FIN

close

close

closed

timed wait

37 of 50

TCP Connection Management (cont.)

Step 3: il client riceve FIN, risponde con ACK.

    • Si mette in “timed wait” – in questo periodo risponde con ACK a ogni FIN duplicato in arrivo

Step 4: il server riceve ACK. Fine della conversazione.

Nota: ci sono piccoli accorgimenti per gestire la chiusura contemporanea.

Transport Layer

3-37

client

FIN

server

ACK

ACK

FIN

closing

closing

closed

timed wait

closed

38 of 50

Diagramma a stati per un client che apre, usa e infine decide di chiudere una connessione

Transport Layer

3-38

Parte dell’automa tipica di chi chiude

Per primo la connessione �(potrebbe essere anche il �server a cominciare la chiusura)

39 of 50

Transport Layer

3-39

Diagramma a stati per un server che riceve una richiesta di connessione, usa e infine riceve una richiesta di chiusura di una connessione

Parte dell’automa tipica di chi chiude

per secondo la connessione �(potrebbe essere anche il �client)

40 of 50

Come in TCP si decide il tempo di time-out

D: come impostare questo valore?

  • deve essere più grande di RTT, ma non troppo
    • ma RTT varia
  • troppo corto: troppi falsi time-out
    • inutili ritrasmissioni
  • troppo lungo: reazione lenta alla perdita di un segmento

D: Come stimare RTT?

  • SampleRTT: tempo misurato di volta in volta tra una trasmissione e la ricezione dell’ACK corrispondente
    • Calcolato senza considerare casi di ritrasmissione
  • SampleRTT è molto variabile
    • è preferibile farne una media, senza usare solo il SampleRTT corrente.

Transport Layer

3-40

41 of 50

Come TCP decide il tempo di time-out (2)

Transport Layer

3-41

EstimatedRTT = (1 - α)*EstimatedRTT + α*SampleRTT

  • I vecchi campioni pesano esponenzialmente di meno, tanto più sono lontani nel tempo
  • Valore tipico: α = 0.125

42 of 50

Esempio di stima RTT:

Transport Layer

3-42

43 of 50

Come in TCP si decide il tempo di time-out (3)

Impostare il timeout:

  • EstimatedRTT più un certo margine
    • EstimatedRTT molto fluttuante -> maggiore margine
  • Si stima la deviazione media tra SampleRTT e EstimatedRTT:

Transport Layer

3-43

TimeoutInterval = EstimatedRTT + 4*DevRTT

DevRTT = (1-β)*DevRTT +

β*|SampleRTT-EstimatedRTT|

(tipicamente, β = 0.25)

Quindi si calcola il time-out con la formula:

44 of 50

Controllo di flusso (demo)

  • Ogni ricevitore ha un buffer di ricezione:

Transport Layer

3-44

  • Lo svuotamento può essere più lento del flusso di arrivo

Il mittente si ‘controlla’ per non affogare il destinatario

flow control

45 of 50

Come funziona il controllo di flusso

(Per comodità supponiamo i segmenti fuori ordine non vengano conservati)

  • Spazio libero nel buffer

= RcvWindow

= RcvBuffer-[LastByteRcvd - LastByteRead]

  • Il ricevitore comunica lo spazio libero usando il campo RcvWindow
  • Il mittente non eccede mai il numero di byte ‘in volo’ rispetto al valore di RcvWindow
    • Il buffer di ricezione non andrà mai in overflow

Transport Layer

3-45

46 of 50

Controllo di congestione (demo-1, demo-2)

Transport Layer

3-46

  • Non solo il ricevente fa da collo di bottiglia
    • Infrastruttura di rete potenzialmente congestionata
  • Idea: Aumentare la taglia della finestra progressivamente (mai oltre RcvWindow), finchè non scade un timeout
    • incremento additivo: aumenta CongWin di 1 MSS a ogni trasmissione finchè non scade un timeout
    • decremento moltiplicativo: dividi CongWin per due dopo una perdita

time

Andamento

a dente di sega

MSS = Maximum Segment Size

47 of 50

Avvio ad accelerazione esponenziale

Transport Layer

3-47

48 of 50

Controllo di congestione

  • Il controllo di congestione prevede la cooperazione tra tutti gli endpoint
  • Se io posso rallentare, e tu puoi rallentare, tutto il mondo può rallentare

Transport Layer

3-48

49 of 50

Esempio di strategia di controllo di congestione

  • Quando CongWin è sotto Threshold, allora il mittente è in slow-start mode; raddoppio continuo di CongWin.
  • Quando CongWin è sopra Threshold, allora il mittente è in congestion-avoidance mode; CongWin cresce linearmente
  • Quando un arriva un triple duplicate ACK, allora Threshold := CongWin/2 e CongWin := Threshold (Implementazione Reno).
  • Quando scade un timeout, Threshold := CongWin/2 e CongWin := 1 MSS.

Transport Layer

3-49

50 of 50

Problemi del controllo di congestione classico

  • Ogni evento di perdita viene interpretato come un problema di congestione
  • Pessima performance su link con packet loss da disturbo (es. WiFi)

  • Nuove soluzioni: TCP BBR (from Google)
    • BBR = Bottleneck Bandwidth and Round-trip propagation time