Telematica di Base. IL Livello di Trasporto TCP



Похожие документы
Livello di trasporto: meccanismi trasferimento dati affidabile, TCP

Corso di Laurea in Ingegneria Informatica. Corso di Reti di Calcolatori I

Livello di trasporto e TSAP

Strato di trasporto. Livello di applicazione SAP. Livello di trasporto. Livello di rete SAP


I protocolli UDP e TCP

TCP. Servizio di Trasporto Affidabile. Transmission Control Protocol. Caratteristiche di TCP 1

IL LIVELLO TRASPORTO Protocolli TCP e UDP

IL LIVELLO TRASPORTO Protocolli TCP e UDP

Introduzione (parte III)

Reti di calcolatori TCP/IP. Slide a cura di Simon Pietro Romano

Lezione n.3 LIVELLO TRASPORTO

Application Layer DNS, TELNET

4 - Il livello di trasporto

Il livello trasporto Protocolli TCP e UDP

API Socket di Berkeley

Soluzione dell esercizio 2 (TCP) dell esame del 16 giugno 2015

J+... J+3 J+2 J+1 K+1 K+2 K+3 K+...

Prova di Esame - Rete Internet (ing. Giovanni Neglia) Lunedì 7 Febbraio 2005, ore 15.00

4 - Il livello di trasporto

Funzioni del protocollo TCP

TCP/IP: summary. Lorenzo Cavallaro, Andrea Lanzi

Transmission Control Protocol

Capitolo 3 Livello di trasporto

Livello trasporto in Internet

Transmission Control Protocol (TCP) Andrea Detti

Livello trasporto. Servizi del livello trasporto

CORSO DI RETI SSIS. Lezione n.3 9 novembre 2005 Laura Ricci

Транскрипт:

Telematica di Base IL Livello di Trasporto TCP

TCP RFCs: 793, 1122, 1323, 2018, 2581 point-to-point: Un sender, un receiver affidabile protocollo di tipo pipeline: Meccanismi per evitare la congestione, controlflow buffers full duplex: Canali di trasmissione bidirezionali MSS: maximum segment size connection-oriented: handshaking iniziale flow controlled 05/04/06 2

TCP s o c k e t d o o r a p p l i c a t i o n w r i t e s d a t a T C P s e n d b u f f e r s e g m e n t a p p l i c a t i o n r e a d s d a t a T C P r e c e i v e b u f f e r s o c k e t d o o r 05/04/06 3

Il segmento TCP Connessione: (SrcPort, SrcIPAddr, DsrPort, DstIPAddr) window + flow control acknowledgment, SequenceNum, RcvdWindow Data (SequenceNum) Sender Receiver Flags SYN, FIN, RESET, PUSH, URG, ACK Checksum TCP header + data Acknowledgment + RcvdWindow 05/04/06 4

URG: urgent data (generally not used) ACK: ACK # valid PSH: push data now (generally not used) RST, SYN, FIN: connection estab (setup, teardown commands) Internet checksum (as in UDP) 32 bits source port # dest port # head len sequence number acknowledgement number not used UAP R S F checksum rcvr window size application data (variable length) ptr urgent data Options (variable length) counting by bytes of data (not segments!) # bytes rcvr willing to accept 05/04/06 5

TCP: seq number & ACK Sequence Number: ACK: l indirizzo del primo byte del segmento dei dati seq # del byte che si aspetta di ricevere User types C host ACKs receipt of echoed C Host A Seq=42, ACK=79, data = C Host B Seq=42, ACK=79, data='c' Seq=79, ACK=43, data='c' Seq=43, ACK=80, data='c' host ACKs receipt of C, echoes back C simple telnet scenario time 05/04/06 6

TCP: Trasferimento wait for event Affidabile event: data received from application above create, send segment event: timeout for segment with seq # y retransmit segment Versione Semplificata Trasferimento unidirezionale Nessun meccanismo per il controllo del flusso e della congestione event: ACK received, with ACK # y ACK processing 05/04/06 7

00 sendbase = initial_sequence number 01 nextseqnum = initial_sequence number 02 03 loop (forever) { 04 switch(event) 05 event: data received from application above 06 create TCP segment with sequence number nextseqnum 07 start timer for segment nextseqnum 08 pass segment to IP 09 nextseqnum = nextseqnum + length(data) 10 event: timer timeout for segment with sequence number y 11 retransmit segment with sequence number y 12 compute new timeout interval for segment y 13 restart timer for sequence number y 14 event: ACK received, with ACK field value of y 15 if (y > sendbase) { /* cumulative ACK of all data up to y */ 16 cancel all timers for segments with sequence numbers < y 17 sendbase = y 18 } 19 else { /* a duplicate ACK for already ACKed segment */ 20 increment number of duplicate ACKs received for y 21 if (number of duplicate ACKS received for y == 3) { 22 /* TCP fast retransmit */ 23 resend segment with sequence number y 24 restart timer for segment y 25 } 05/04/06 26 } /* end of loop forever */ 8 TCP: Sender Pseudo Codice

TCP: esempi di trasmissione Host A Host B Host A Host B timeout X loss Seq=92, 8 bytes data ACK=100 Seq=92, 8 bytes data Seq=100 timeout Seq=92 timeout Seq=92, 8 bytes data Seq=100, 20 bytes data ACK=100 ACK=120 Seq=92, 8 bytes data ACK=100 ACK=120 Perdita di un ACK ACK cumulativo 05/04/06 9

Host A Host B Seq=92, 8 bytes data timeout X loss ACK=100 Seq=100, 20 bytes data ACK=120 ACK cumulativo 05/04/06 10

Commenti ACK cumulativo Sender Sendbase = più piccolo numero di sequenza dei segmenti trasmessi ma di cui non si è ancora ricevuto ACK Nextseqnum = numero di sequenza del prossimo dato da inviare 05/04/06 11

TCP Timeout Problema: come definire il valore del timeout? Maggiore del RTT TO = RTT + Delay Delay piccolo: Trasmissioni non necessarie Delay grande: problemi con la perdita di segmenti Problema: come si determina il valore per RTT? SampleRTT: definisce la misura del tempo che occorre tra la trasmissione di un segmento e la ricezione dell' ACK SampleRTT varia dinamicamente (congestione, traffico della rete) 05/04/06 12

TCP: gestione della connessione Sender e receiver definiscono la connessione: inizializzazione dei seq. #s buffers flow control (RcvWindow) 05/04/06 13

Three way handshake: Step 1: client invia al server TCP SYN (segmento di controllo) Definisce il valore iniziale seq # Step 2: server riceve SYN, ed invia un segmento di controllo SYNACK ACK del SYN Allocazione dei buffers Definisce receiver seq. # iniziale 05/04/06 14

Gestione della connessione Step 3: Cliente riceve SYNACK: Allocazione dei buffers Invio al server di un segmento di controllo SYN = 0 ACK = server_isn+1 05/04/06 15

Gestione della connessione Active participant (client) Passive participant (server) SYN, SequenceNum = x SYN + ACK, SequenceNum = y Acknowledgment = x + 1 ACK, Acknowledgment = y + 1 05/04/06 16

Host A Host B SYN=1, seq=client_isn SYN=1, seq=server_isn SYN=0, seq=client_isn+1 05/04/06 17

Chiusura della connessione client server Step 1: client invia al server TCP FIN (segmento di controllo) (FIN = 1) close FIN ACK FIN close Step 2: server riceve FIN, ed invia un ACK. Poi invia un segmento FIN per chiudere la connessione (close) timed wait closed ACK 05/04/06 18

Chiusura di una connessione Step 3: client riceve FIN, ed invia un ACK. closing client FIN server Attiva un timeout Step 4: server riceve ACK. ACK FIN closing timed wait closed ACK closed 05/04/06 19

TCP Connection Management TCP server lifecycle TCP client lifecycle 05/04/06 20