TCP Transmission Control Protocol
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 2 TCP TCP fornisce un servizio di connessione –orientato alla connessione due applicazioni che usano TCP devono stabilire una connessione prima di poter scambiare dati. –stream di byte non vengono inseriti delimitatore di record o datagrammi –affidabile
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 3 Affidabilità di TCP TCP spezza i dati in segmenti. Per ogni segmento spedito viene tenuto un timer e viene atteso un acknowledgment. Se non perviene in tempo il segmento viene rispedito. Quando TCP riceve un segmento spedisce un acknowledgment (ritardo di qualche frazione di secondo)
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 4 Affidabilità di TCP TCP calcola checksum su dati e header. –Se il checksum risulta errato il segmento viene scartato e non ne viene dato lacknowledgment. Segmenti TCP sono incapsulati allinterno di datagrammi IP. –TCP riordina i segmenti arrivati non in ordine. –TCP scarta i segmenti duplicati.
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 5 Affidabilità di TCP TCP effettua controllo del flusso –Ogni parte permette allaltra di spedire tanti dati quanti possono essere memorizzati nel buffer.
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 6 Formato dellheader di TCP Sequence number: –identifica il numero di ordine del primo byte della porzione dati del segmenti relativamente al flusso di dati dal mittente al ricevente. – quando la connessione viene stabilita il segmento ha il flag SYN settato e il sequence number contiene linitial sequence number.
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 7 Formato header di TCP Il campo acknowledgement number contiene il prossimo sequence number che il mittente del segmento si aspetta di ricevere.
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 8 Stabilire una connessione TCP 1La parte richiedente (client) manda un segmento contente il flag SYN ed linitial sequence number (ISN). 2Il server risponde con il suo segmento SYN contente il suo ISN e manda un ACK del primo segmento. 3Il client invia un ACK per lISN + 1 del server.
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 9 Stabilire connessione TCP La parte che manda il primo segmento di SYN compie una open attiva. ISN deve essere incrementato di uno ogni 4 microsecondi. Ogni volta che una connessione è aperta ISN viene incrementato di 64000
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 10 Terminazione di una connessione TCP Una connessione è chiusa dallinvio di un segmento con flag FIN settato. Una connessione TCP è full-duplex –dati scorrono indipendentemente in entrambe le direzioni. E possibile chiudere ciascuna direzione indipendentemente.
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 11 Maximum Segment Size MSS è la dimensione del più grosso blocchi di dati che una parte di una connessione TCP invierà. Ogni parte rende nota la sua MSS come opzione nel segmento SYN. E usata per limitare il ricorso alla frammentazione dei datagrammi IP.
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 12 Esempio di half-close rsh bsdi sort < datafilersh bsdi sort < datafile –rsh –rsh apre una connessione con il processo che esegue il sort sullhost bsdi. –datafile –datafile è copiato sulla connesione. –loutput della connessione è dato in output. –sort –sort non può iniziare fino a quando non sono arrivati tutti i dati. – rsh – rsh effettua una half-close per segnalare la fine dei dati.
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 13 Maximum Segment Size Un valore alto di MSS permette la creazione di grossi segmenti però incorre nel rischio di frequenti frammentazioni. MSS dovrebbe essere non più grande della MTU dellinterfaccia di uscita meno il numero di byte minimi per header IP e TCP. –Ethernet: 1460 byte. Per connessioni non locali, MSS è posto uguale a 536.
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 14 Stato TIME_WAIT Anche chiamato stato 2MSL. –MSL è la massima vita di un segmento TCP; RFC793 specifica un valore di 2 minuti per MSL. Se TCP effettua una chiusura attiva, ed invia lultimo ACK, deve restare in TIME_WAIT per 2MSL per essere sicuro che lultimo ACK è arrivato.
Programmazione II: Programmazione su Reti -- Prof. G. Persiano 15 Aperture simultanee E possibile che due applicazioni compiano una open attiva simultaneamente. In questo caso TCP considera aperta una sola connessione