Programmazione su Reti

31
Programmazione su Reti Il livello trasporto di TCP/IP: TCP Giuseppe Persiano Dipartimento di Informatica ed Applicazioni Università degli Studi di Salerno http://www.dia.unisa.it/~giuper

description

Programmazione su Reti. Il livello trasporto di TCP/IP: TCP Giuseppe Persiano Dipartimento di Informatica ed Applicazioni Università degli Studi di Salerno http://www.dia.unisa.it/~giuper. TCP: Transmission Control Protocol. Orientato allo stream: - PowerPoint PPT Presentation

Transcript of Programmazione su Reti

Page 1: Programmazione su Reti

Programmazione su Reti

Il livello trasporto di TCP/IP: TCP Giuseppe Persiano

Dipartimento di Informatica ed Applicazioni

Università degli Studi di Salerno

http://www.dia.unisa.it/~giuper

Page 2: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

2

TCP: Transmission Control Protocol

Orientato allo stream:» non avendo una dimensione di segmento fissa, trasmette alla

destinazione la sequenza identica (stream) di byte che il mittente ha fornito a TCP nella macchina di provenienza.

Stream non strutturato:» In TCP non è necessario nessun tipo di formattazione

specifica della stream, quindi è demandata agli applicativi la corretta estrazione dei dati dai segmenti ricevuti.

» Simile ad un file del sistema Unix

Page 3: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

3

TCP: Caratteristiche

Connessione di circuito virtuale:» La connessione è vista dagli applicativi come un

circuito fisico dedicato, quindi TCP è capace di fornire servizi del tipo Connection Oriented mentre il protocollo IP su cui appoggia, è in grado di fornire servizi Connection Less.

Connessione Full Duplex:» TCP consente il trasferimento simultaneo in entrambe le

direzioni per ogni connessione. Questo permette la trasmissione parallela di segmenti di dati in un senso e di segmenti di acknowledgement nell'altro.

TCP richiede più banda e più CPU di UDP

Page 4: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

4

Bufferizzazione

TCP suddivide lo stream in segmenti indipendenti dal programma applicativo che li ha generati.

Dispone di un buffer dove immagazzinare la sequenza di byte.

Al verificarsi di certe condizioni alcuni dei dati sono trasmessi attraverso la rete.

La bufferizzazione consente una riduzione del traffico sulla rete "ottimizzando" in qualche modo il numero di segmenti da trasmettere.

Page 5: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

5

TCPheaderlength

Header TCP

0 4 10 16 19 24 32

Source Port Destination Port

Sequence Number

Acknowledgement Number

Checksum

Options

Window

Urgent Pointer

Reserved

Padding

URG

ACK

EOM

RST

SYN

FIN

Page 6: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

6

Header di TCP

Flag:» Per identificare il tipo di informazione contenuta nel

segmento vengono impiegati i 6 bit di codice: URG (11): Il campo puntatore urgente è valido ACK (12): Il campo riscontro è valido PSH (13): Questo segmento richiede una “spinta” RST (14): Effettua il reset della connessione SYN (15): Sincronizza i numeri di sequenza FIN (16): Il trasmettitore ha raggiunto la fine

della sua stream di byte

Page 7: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

7

Campi dell’header TCP

HLEN:» Contiene un numero intero che indica la lunghezza

dell'intestazione TCP del datagramma. Questa informazione è necessaria perché il campo opzioni è di lunghezza variabile.

Porta (provenienza/destinazione):» Contengono i numeri di porta di protocollo TCP che

identificano gli applicativi alle estremità della connessione.

Page 8: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

8

Campi dell’header TCP

Numero sequenziale:» questo campo identifica, nello stream di byte del trasmettitore, la

posizione dei dati nel segmento. Questo valore è riferito alla stream che fluisce nella medesima direzione del segmento, mentre il Numero di Riscontro si riferisce alla stream che fluisce nella direzione opposta.

Numero di riscontro:» Contiene il numero sequenziale del byte successivo a quello

correttamente ricevuto dalla destinazione. Tale campo è valido solo nei segmenti di riscontro, o nei segmenti utilizzanti la tecnica trasmissiva Piggy-backing, e fa riferimento allo stream di dati che fluisce nella direzione opposta a tale segmento.

Page 9: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

9

Campi dell’header di TCP

Nel datagramma di riscontro la destinazione comunica quale byte dello stream si aspetta di ricevere successivamente:» I riscontri specificano sempre il numero sequenziale del

primo byte non ancora ricevuto.» Esempio: in uno stream di 1000 byte segmentato in

blocchi di 100 byte, il primo riscontro conterrà il numero sequenziale 101.

» Questo metodo di riscontro cumulativo si ha il vantaggio che la perdita di un riscontro non blocca la trasmissione se confermato dal riscontro successivo.

Page 10: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

10

Campi dell’header di TCP

Nel datagramma di riscontro la destinazione comunica quale byte dello stream si aspetta di ricevere successivamente:» I riscontri specificano sempre il numero sequenziale del

primo byte non ancora ricevuto.» Esempio: in uno stream di 1000 byte segmentato in

blocchi di 100 byte, il primo riscontro conterrà il numero sequenziale 101.

» Questo metodo di riscontro cumulativo si ha il vantaggio che la perdita di un riscontro non blocca la trasmissione se confermato dal riscontro successivo.

Page 11: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

11

Campi dell’header TCP

Finestra:» Numero intero senza segno di 16 bit che specifica la

dimensione del buffer che il TCP ha a disposizione per immagazzinare dati in arrivo. È utilizzato per la gestione dinamica della dimensione della finestra scorrevole.

Puntatore urgente:» Il TCP permette la trasmissione fuori banda di dati

informativi ad alta priorità. Questi devono essere trasmessi il prima possibile, indipendentemente dalla loro posizione nella stream. Questo campo, se valido, conterrà un puntatore alla posizione nella stream, dei dati urgenti.

Page 12: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

12

Campi dell’header TCP

Checksum:» Campo di 16 bit contenente un valore intero utilizzato dal

TCP della macchina host di destinazione, per verificare l'integrità dei dati e la correttezza dell'intestazione. Questa informazione è di essenziale importanza perché il protocollo IP non prevede nessun controllo di errore sulla parte dati del frame. Per il calcolo del valore checksum il TCP ha bisogno di aggiungere una pseudointestazione al datagramma, per effettuare così un controllo anche sugli indirizzi IP di destinazione e provenienza.

Page 13: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

13

TCP: Protocollo di Connessione

La parte richiedente (client) invia un segmento SYN e specifica la porta del server e il proprio initial sequence number (ISN).» RFC793 specifica che ISN viene incrementato ogni 4

ms Il server risponde con un segmento contenente il

proprio SYN e dà l’ack (riscontro) del SYN del client ponendo l’ack al valore dell’ ISN del client + 1

Il cliente dà riscontro al SYN del server spedendo un ACK per l’ISN del server + 1.

Page 14: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

14

TCP: Opzione MSS

Il segmento di SYN contiene l’opzione Maximum Segment Size» ogni parte annuncia la taglia del più grande

segmento che si aspetta di ricevere» una grossa MSS aumenta il throughput ma corre il

rischio di frammentazione a livello IP.» per connessioni locali

MSS è sempre minore della MTU dell’interfaccia di uscita meno la lunghezza dell’header di TCP (1460 per Ethernet)

» per connessioni non locali MSS normalmente è posto uguale a 536

Page 15: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

15

Opzione Reset

Segmento con bit Reset posto 1 è inviato in situazioni di errore» richiesta di connessione a porta con nessuna

applicazione legata (bind con i socket di Berkeley) il segmento di reset porta l’ack del ISN UDP usa ICMP port unreachable

» abortive release dati in buffer sono scartati La controparte riceve il segmento di reset e non

deve farne l’ack

Page 16: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

16

Esempio di half-close

E’ possibile per una delle due parti di una connessione TCP chiudere il proprio canale di output e ricevere dati sull’altro canale.» La API dei socket di Berkeley prevede la system call

shutdownshutdown

Esempio: » rsh remote_host sort < datafilersh remote_host sort < datafile

Page 17: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

17

Esempio di half-close

rsh bsdi sort < datafilersh bsdi sort < datafile» rsh rsh apre una connessione con il processo che esegue il

sort sull’host bsdi.» datafiledatafile è copiato sulla connesione.» l’output della connessione è dato in output.» sortsort non può iniziare fino a quando non sono arrivati tutti

i dati.» rsh rsh effettua una half-close per segnalare la fine dei dati.

Page 18: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

18

TCP: Calcolo del checksum di TCP

Lo pseudoheader viene creato e posto in testa al segmento TCP e sono aggiunti byte necessari per raggiungere un multiplo di 16 bit. Successivamente viene calcolata un checksum su tutto il messaggio così formato. Lo pseudoheader viene eliminato prima del passaggio a TCP.

Page 19: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

19

Figura tratta da:TCP/IP illustrated vol. 1 di

Richard W. Stevens

Diagramma di transizione degli stati di TCP

Page 20: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

20

Stato TIME_WAIT

MSL (maximum segment life) è la durata massima della vita di un segmento

RFC793 raccomanda MSL = 2 minuti Quando TCP effettua una chiusura attiva, la

connessione resta nello stato TIME_WAUT per una durata doppia all’MSL.» Ciò per permettere di rispedire l’ack finale da inviare

all’altra parte. Se ciò accade l’altra parte va in timeout e re-invia il

FIN. » Nell’API Berkeley Socket, una porta locale non può essere

usata se la connessione è in TIME_WAIT opzione SO_REUSEADDRSO_REUSEADDR

Page 21: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

21

Opzioni TCP

Campo opzioni in header TCP» Opzione MSS

1 byte kind (MSS ha kind=2) 1 byte len 4 2 byte MSS

» Opzione End 1 byte kind=0

Page 22: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

22

TCP: Protocollo di terminazione

Ogni connessione TCP è full-duplex» i dati viaggiano nelle due direzioni

indipendentemente e ciascuna deve essere chiusa indipendentemente

Per chiudere una direzione di flusso viene spedito un segmento con bit di FIN» ciò indica solo che non arriveranno più dati lungo

questa direzione

Page 23: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

23

Riscontro e ritrasmissione

Riscontro e ritrasmissione:» Consiste nella ritrasmissione di un segmento se non

è giunta conferma entro un tempo massimo (time-out).

Time-Out:» Al momento della trasmissione di ogni segmento, il

TCP attiva una timer.

Page 24: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

24

Time Out

Time-Out:» tempo massimo entro cui un segmento trasmesso deve

avere riscontro.

» Se questo non avviene, si procede alla ritrasmissione.

» TCP, per stimare efficientemente il TIME-OUT di ogni connessione, utilizza l'algoritmo di Karn.

» È un algoritmo adattivo, ovvero al variare delle prestazioni della connessione corregge opportunamente il valore stimato in precedenza.

Page 25: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

25

Retransmission TimeOut value

TCP misura il tempo di andata e ritorno M per ogni pacchetto

Calcola stima di andata e ritorno (Round Trip Time)» R=a R + (1-a)M valore di a raccomandato .9

Il valore di timeout è posto» RTO=bR valore di b raccomandato 2

Non riesce a gestire le fluttuazioni di velocità della connessione

Page 26: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

26

Algoritmo di Jacobson

Per ogni segmento» calcoliamo una stima del RTT

» otteniamo una misurazione del RTT

RTO tiene conto di media e varianza» Err = M - A (A stima del RTT -- M valore

misurato)

» A = A + g Err (g=.125)

» D = D + h(|Err| - D) (h=.25)

» RTO = A + 4D

Page 27: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

27

Algoritmo di Karn

Problema dell’ambiguità di ritrasmissione

» Le stime di RTT non sono aggiornate quando arriva l’ACK di dati ritrasmessi.

Page 28: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

28

Flusso di dati interattivi in TCP

Esempi tipici di applicazioni interattive: RLOGIN, TELNET

Ogni carattere viene inviato dal client al server un byte per volta. Inoltre ogni carattere viene normalmente re-inviato dal server al client per la visualizzazione.

Quindi un byte genera 4 segmenti:» byte di dati» ack del byte » echo del byte per visulalizzazione» ack dell’echo

Page 29: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

29

Riscontro ritardato (delayed ack)

Normalmente TCP non invia ACK subito dopo aver ricevuto un segmento.

L’ack viene ritardato nella speranza che vi siano dei dati che viaggiano nella stessa direzione.

La maggioranza delle implementazioni utilizza un ritardo di 200 ms.

Page 30: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

30

Algoritmo di Nagle

In connessione interattive possiamo avere dei segmenti che contengono un solo byte di dati.

L’overhead che paghiamo è di 40 byte (20 per IP + 20 per TCP)

Algoritmo di Nagle» una connessione TCP non può avere più di un segmento

piccolo di cui non si è ricevuto l’ACK. Segmento piccolo di taglia minore di MSS

Page 31: Programmazione su Reti

Programmazione su Reti -- G. Persiano -- Dipartimento di Informatica ed Appl.

31

Algoritmo di Nagle: Pro e Contro

Self-clocking» su una connessione veloce vengono inviati molti tinygram

» una connessione lenta invia pochi segmenti ciascuno con più byte di dati.

Problemi con applicazioni molto interattive» Esempio: function keys

Disabilitato con opzione TCP_NODELAYTCP_NODELAY