LEZIONE 4 IL PROTOCOLLO TCP - IN QUESTA LEZIONE IMPAREREMO - Riccardo Fioretti

Pagina creata da Paolo Franchi
 
CONTINUA A LEGGERE
LEZIONE 4

IL P R O T O C O L L O T C P

   IN QUESTA LEZIONE IMPAREREMO...
   le caratteristiche del protocollo TCP
   la struttura del segmento TCP
  la stimare il valore del timeout

• Il protocollo T C P
La caratteristica fondamentale del protocollo TCP è
                                                                     A Protocollo punto-punto I pro-
quella d i essere u n < protocollo punto-punto  cioè
                                                                    tocolli punto-punto consentono
orientato alla connessione tra due host, chiamati
                                                                    un collegamento a basso costo per
client e server.                                                    mezzo di linee seriali o linee telefo-
                                                                    niche commutate. •
La connessione avviene mediante u n A handsha-
king • con lo scambio d i messaggi d i controllo che
inizializza lo stato del mittente e del destinatario
                                                                     A Handshaking Mediante questa
prima di iniziare a scambiare i dati.
                                                                    tecnica due elementi stabiliscono
                                                         fgTfTTm    regole hardware o software comu-
Prima d i iniziare la connessione vera e propria tra
                                                                    ni, ovvero la velocità, i protocolli
due computer si crea una connessione d i tipo hand-
                                                                    di compressione, di criptazione, di
shake che consiste nella trasmissione dei pacchetti                 controllo degli errori ecc. •
necessari per regolare i parametri d i connessione.

I   Il suono prodotto dal modem nella fase di connessione a Internet viene anche chiamato
    handshake.                                                                            '

Successivamente avviene la comunicazione vera e propria nella quale i l flusso dei dati è affidabile,
i n sequenza, bidirezionale, full duplex • , e viene realizzato mediante u n buffer d'invio e uno d i
ricezione.

   •4 Full duplex Full-duplex data transmission means that data can be transmitted in both direc-
t i o n s on a signal carrier at the same time. •

                                                                                                             185
Lo strato di trasporto

                                L'applicazione                                                     L'applicazione
                                  scrive i dati                                                      legge I dati
              Socket
                                -1-                                                Socket
                                                                                                       -i-
                                    Buffer                                                               Buffer
                                 d'invio TCP                                                       di ricezione TCP

                                               Œ                    I Segmento |
                                                                                                   D
      Le creazione del canale di comunicazione avviene mediante la connessione tramite socket (come
      abbiamo visto i n precedenza utilizzando i l protocollo UDP): i l server può effettuare contemporanea-
      mente più connessioni ma, naturalmente, affinché una connessione possa essere distinta dalle altre,
      ciascuna d i esse non può avere la stessa coppia d i socket.

      La tabella seguente riporta la numerazione d i alcune well-known ports di classiche applicazioni TCP.

            Porta      Protocollo                   Applicazione
       21              FTP                  File transfer
       23              Telnet               Remote login
       25              SMTP                 Email
       69              TFTP                 Trivial File Transfer Protocol
       79              Finger               Lookup info about a user
       80              HTTP                 World Wide Web
       119             NNTP                 USENET news
       110             POP-3                Remote email access

      Le porte con numero inferiore a 1024 sono porte note o riservate (well-known ports) mentre per
      tutte le altre viene attivato u n unico processo (programma A Inetd • ) che intercetta le richieste
      di connessione, crea i l processo relativo e ridirige la connessione da se stesso al processo appena
      creato, liberandosi per intercettare future richieste.

        A Inetd È anche chiamato Internet Super-Server in quanto gestisce le connessioni necessarie per
       i servizi richiesti: quando arriva una richiesta di connessione, inetd determina a quale programma la
       connessione è destinata, esegue quel particolare processo e affida a lui il socket. •

      • Il segmento TCP
      TCP suddivide i dati dell'utente i n segmenti d i non più d i 64 KB e l i incapsula i n datagrammi IP,
      come già descritto per i l datagramma UDP.
                        |4-                          •          IPdatagram
                                                                        TCP datagram

                                IP header           TCP header                              data

                                20 bytes                 20 bytes

      I segmenti sono organizzati i n due sezioni:
      • un'intestazione standard d i 20 byte;
      • u n payload d i dimensione variabile (anche nulla ma d i dimensione massima 64 Kb) contenente i
        dati di applicazione.

186
Il protocollo TCP

I l mittente controlla il flusso dei dati trasmesso i n modo da non sovraccaricare i l destinatario: viene
anche definito u n parametro che indica la dimensione massima d i segmento (Maximum Segment
Size MSS). La corrispondente massima dimensione del blocco dati di applicazione che può essere
contenuto nel segmento non deve essere superiore alla dimensione del payload IP dedotta dalla
occupazione dell'header IP e dell'header TCP (per esempio, 65535 - 20 - 20 = 65495 byte); deve
inoltre rispettare i l i m i t i imposti alle dimensioni dei pacchetti dalle reti che deve attraversare (Ma-
x i m u m Trasmission Unit MTU) e quindi possiamo esprimere la relazione tra MTU e MSS i n :

                                          MSS = MTU - 20 - 20

     In generale non è possibile conoscere la       di ogni rete intermedia che verrà attraversata dai
     segmenti e viene utilizzato un algoritmo detto                       (RFC 1191) per la definizio-
     ne del suo valore: un tipico valore per     sono i 1500 byte imposti da Ethernet.

La struttura dei segmenti TCP è la seguente:
                                                     32 bit

                            Source port                              Destination port
                                               Sequence number
                                             Acknowledgment number

               Data     Reserved C E U A P R S
                                 R C R C S S Y                          Window
               Offset    (4 bit) W E G K H T N

                             Checksum                                 Urgent pointer
                                   Options                                     Padding

                                                     Data

Descriviamo i singoli campi dell'intestazione TCP:
 Source/Destination port: numero d i porta sorgente e destinazione;
 Sequence number: numero d i sequenza del primo byte contenuto nel segmento; è i l numero di
 sequenza iniziale su cui sincronizzarsi se è presente i l bit SYN=1;
 Acknowledgment number: se i l b i t ACK è a 1 , questo è i l numero d i sequenza del blocco di dati
 che ci si aspetta d i ricevere;
 Data offset: numero d i parole di 32 bit dell'intestazione TCP; indica dove iniziano i dati;
 Reserved: 4 bit riservati per uso futuro; devono essere posti a zero;
 Control bit: sono 8 flag
 - URG posto a 1 se si deve considerare i l campo Urgent Pointer;
 - ACK posto a 1 se si deve considerare i l campo Acknowledgment Number;
 - PSH posto a 1 indica la funzione d i push, per la consegna immediata delle informazioni;
 - CWR (Congestion Window Reduced) posto a 1 quando l'host sorgente ha ridotto la velocità d i
   trasmissione per ridurre la congestione (RCF 3168);
 - ECE (ECN echo) posto a 1 se l'host supporta 1 ' ^ Explicit Congestion Notification • ECN;
 - RST posto a 1 per resettare la connessione e rifiutare u n segmento o u n tentativo d i connessione
   non validi;
 - SYN posto a 1 per stabilire la connessione e per sincronizzare i numeri d i sequenza;
 - FIN posto a 1 per indicare la fine dei dati da trasmettere e chiudere la connessione i n una dire-
   zione.

                                                                                                               187
I   Gli ultimi tre bit sono utilizzati per impostare e chiudere la connessio

      • Window: dimensione della finestra i n ricezione sliding window per i l controllo di flusso, cioè i l
        numero di byte che i l ricevitore è disposto a ricevere a partire dal numero d i sequenza contenuto
        nel campo Acknowledgment Number;
      I Checksum: controllo d'errore su intestazione e dati che viene effettuato su blocchi da 16 bit.

        A Explicit Congestion Notification La congestione dei pacchetti si verifica quando il router riceve
       pacchetti a una velocità superiore a quella possibile sul link su cui dovrebbe spedirli. Solitamente
       vengono parcheggiati nella memoria sino alla completa saturazione. Per evitare l'inconveniente solita-
       mente i router compiono due azioni:
       fl abbassano la velocità di trasmissione;
       B ripetono i pacchetti scartati.
       La tecnica ECN (Explicit Congestion Notification) evita la congestione del router notificando esplicita-
                                                                                      :
       mente che si sta congestionando utilizzando un apposito campo (il campo         ) presente nell' header
       IP. Quando il router rileva uno stato di "blanda" congestione, i bit di tale campo vengono impostati
       in una configurazione detta Congestion Experienced CE. Il campo ECN è costituito dai bit 6 e 7 del
       campo TOS. •

      • L a connessione TCP
      Abbiamo detto che la connessione/sconnessione TCP avviene attraverso una fase preliminare chia-
      mata handshaking tra client e server che permette d i stabilire u n canale dedicato tra loro e alla fine
      di rilasciarlo: vediamo la procedura di connessione e successivamente quella d i rilascio del canale
      e chiusura della connessione.

          Nella letteratura tecnica viene spesso indicato con ACK nei diagrammi temporali sia il flag
          di stato che il campo Acknowledgment Number lasciando l'interpretazione al lettore in base
          al valore contenuto e al suo contesto di utilizzo: noi, per evitare ambiguità, indicheremo con
          ACK il flag e con ACKn l'Acknowledgment Number.
          Inoltre, quando viene indicato sul diagramma un flag, generalmente si sottintende che il suo
          valore è settato a 1 : noi, per completezza, lo scriveremo in modo esplicito.

      Apertura delle connessioni
      La procedura utilizzata per instaurare i n modo affidabile una connessione TCP tra due host è chia-
      mata three-way handshake (stretta d i mano a 3 vie), indicando la necessità d i scambiare 3 messaggi
      tra host mittente e host ricevente affinché la connessione sia creata correttamente.

      Fu proposta nel 1975 da Tomlinson, i l progettista informatico che inventò 1 ' ^ email • , per risolvere
      il problema dei duplicati relativi alla fase d i attivazione della connessione, che descriveremo nella
      prossima lezione.

        •4 email Raymond Samuel Tomlinson is a US programmer who implemented an email system
        in 1971 on the ARPANET. It was the first system able to send mail between users on different
        hosts connected to the ARPAnet. To achieve this, he used the @ sign to separate the user from their
        machine, which has been used in email addresses ever since. •

188
Il protocollo TCP
                                                                                                             Lezione 4

La seguente procedura illustra come avviare la connessione, nella quale è necessario che sui due
host sia presente i l software specifico per i l servizio desiderato e che venga mandato i n esecuzione.

Q    I I server manda i n esecuzione l'applicazione e rimane i n attesa passiva, sulla porta specifica per
     essa riservata, di una richiesta d i connessione (Passive Open);

Q    quando u n client vuole comunicare con u n server manda i n esecuzione l'applicativo specifico
     che conosce l'indirizzo IP del server e i l numero d i porta riservato per i l servizio desiderato
     (indirizzo del socket): viene quindi inviata una richiesta TCP (Active Open);

                         Client                                           Server
                       application                                      application

                                 2. ACTIVE OPEN                                   1. PASSIVE OPEN

                           TCP                                              TCP

^)   i l client TCP genera i n modo casuale u n numero d i sequenza iniziale (per esempio Seq=33100)
     e manda u n messaggio d i SYNchronize (flag SYN=1) contenente questo numero d i sequenza ( i l
     flagACK=0);

                          Client                                           Server
                        application                                      application

                                            SYN=1,Seq=33100
                           TCP                                              TCP

     In questa prima trasmissione non vengono inviati dati ma viene inviata solo la numerazione
     del segmento affinché si possa perfezionare l'operazione di setup.

Q    Alla ricezione del segmento con SYN=1, i l server genera casualmente u n suo numero d i se-
     quenza iniziale (per esempio Seq=4400) e risponde con u n segmento avente i flag SYN=1, flag
     ACK=1 (comunemente chiamato segmento SYN/ACK), che contiene i n risposta l'acknowledg-
     ment number uguale a ACKn=33101, incrementando cioè di 1 i l valore ricevuto dal TCP client
     come conferma di ricezione.

                          Client                                           Server
                        application                                      application

                                               SYN=1,ACK=1
                                           Seq=4400 ACKn=33101
                           TCP        %A                                    TCP

                                                                                                             189
Lo strato di trasporto

      e   Alla ricezione del SYN/ACK inviato dal server, i l client risponde con u n ACK di conferma rice-
          zione incrementando d i 1 i l corrispondente valore (ACKn=4401) e inizia a inviare i p r i m i dati
          nel payload indicando i l numero d i sequenza del primo byte, cioè Seq=33101.

                                 Client                                              Server
                               application                                         application

                                                      ACKn=4400 Seq=33101
                                    TCP                                                 TCP

          Sintetizziamo con la seguente figura le operazioni della procedura di three-way handshaking.
                                             Step 3

                                             Step 4 _Seg

                                             Step 5

          ffr Ora i l TCP client e i l TCP server comunicano alla applicazione che la connessione è aperta
          e le due applicazioni possono scambiarsi i dati nel canale logico che si è creato.

                           Client                                              Server
                         application                                         application

            2. ACTIVE OPEN           6. CONNECTION OPEN          1. PASSIVE OPEN         6. CONNECTION OPEN
                                r                                                  iT

                               TCP                                                 TCP

      ESEMPIO     8
      Vediamo ora un esempio di comunicazione i n TCP per meglio comprendere l'utilizzo dei registri
      Sequence Number (Seq) e Acknowledgment Number (ACKn).

      Ogni host l i utilizza i n modo indipendente, registrando i n essi
      © Seq: "numero" del primo byte nel flusso d i byte che sta trasmettendo;
      © ACKn: contiene i l numero d i sequenza del prossimo byte che si aspetta d i ricevere.

      Nel nostro esempio abbiamo una semplice applicazione dove i l ricevente risponde come echo lo
      stesso carattere inviato dal mittente; i numeri d i sequenza iniziali sono generati random e valgono:
      • host A = > Seq=42
      I host B => Seq=69

190
Il protocollo TCP

Alla trasmissione del primo carattere i l valore d i AGKn per l'host A è uguale a 0.

                                                                              HostB

                L'utente digita "C"
                                                                              L'host riscontra
                                                                            la ricezione di "C"
                                     1
                                                                                e reinvia "C"
               L'host riscontra
            la ricezione della "C"
                   reinviata

Alla ricezione del dato, i l byte numero 42 indicato dal valore d i Seq dell'host A, l'host B risponde
con la conferma di ricezione inviando lo stesso carattere ma con il proprio valore d i Seq=69 e incre-
mentando nell'ACKn i l numero di byte ricevuti di 1 , i n modo da indicare al mittente che il prossimo
byte che si aspetta d i ricevere è i l numero 43.
A sua volta l'host A, non appena riceve i l messaggio da B, gli risponde confermando i l numero di
sequenza ricevuto (Seq=43) che è i l numero del byte che si aspetta d i ricevere (inoltre aggiorna
ACKn=70, dato che ha ricevuto i l byte numero 69).

ESEMPIO     9
Vediamo u n ultimo esempio, dove ipotizziamo che i l primo host invìi segmenti lunghi 100 byte cia-
scuno. Questo host riscontra i segmenti inviati dall'altro, e inoltre invia dati lunghi 6 byte ogni volta.

                  Seq=101,ACK=406 \

                  Seq=201,ACK=406                                                 Seq=406, ACK=201

                  Seq=301,ACK=406                                                 Seq=412, ACK=301

                  Seq=401,ACK=412                                                 Seq=418,ACK=401

                  Seq=501,ACK=418                                                 Seq=424, ACK=501

                  Seq=601,ACK=424                                                 Seq=430, ACK=601

                  Seq=701,ACK=430                                                 Seq=436, ACK=701

                                           •
                                         Tempo                               Tempo

                                                                                                             191
Chiusura della connessione
      La connessione TCP tra due host non è considerata una singola connessione bidirezionale ma piut-
      tosto una coppia d i connessioni monodirezionali: quando si vuole chiudere u n canale è quindi ne-
      cessario che venga chiusa la trasmissione i n entrambi i sensi.
      Può infatti verificarsi la situazione di connessioni aperte a metà, i n cui solo uno dei due terminali ha
      chiuso la connessione e non può più trasmettere, ma può (e deve) ricevere i dati dall'altro terminale.

      È quindi possibile avere due modalità di chiusura della connessione: con u n handshake a tre vie, i n
      cui le due parti chiudono contemporaneamente le rispettive connessioni, o con uno a quattro vie,
      in cui le due connessioni vengono chiuse i n tempi diversi:
      ì l'handshake a 3 vie è omologo a quello usato per l'apertura della connessione, con la differenza
        che i l flag utilizzato è i l FIN invece del SYN. Un terminale invia u n pacchetto con la richiesta FIN,
        l'altro risponde con u n FIN + ACK, infine i l primo manda l'ultimo AGK e l'intera connessione
        viene terminata;
      • l'handshake a 4 vie invece viene utilizzato quando la disconnessione non è contemporanea tra i
        due terminali i n comunicazione. I n questo caso uno dei due terminali invia la richiesta d i FIN e
        attende PACK. L'altro terminale farà poi altrettanto, generando quindi u n totale d i 4 pacchetti.

      Vediamo nel dettaglio l'handshake a 4 vie:

          I l client inizia la procedura d i chiusura della connessione inviando u n messaggio contenente gli
          u l t i m i dati che deve trasmettere e settando a 1 i l flag d i FIN" (flag FIN=1).

          II server come prima operazione invia u n messaggio d i AGK per confermare la ricezione dei dati.

                                Client                                            Server
                              application                                       application

                                                   1.FIN=1,Seq=888

                                 TCP              2.ACK=1,ACKn=889                 TCP

           In questo momento la comunicazione nella direzione server->client è aperta e quindi posso-
           no essere trasferiti altri pacchetti verso il client: di ciascuno il client invierà il corrispondente
           messaggio di ACKal server.
                                                                            f                 \
                                Client
                                                                                  Server
                              application
                                                                                application

                                                                                                     w
                                                        Seq=321
                                            A
                                 TCP        %                                      TCP
                                            4
                                            A

      ^ ) Quando anche i l server decide di chiudere la connessione invia u n messaggio con i l flag FIN
          settato al valore 1 . . .

192
Il protocollo TCP

Q   ... che viene confermato con u n AGK finale dal client che aveva già chiuso la connessione i n
    precedenza.

                        Client                                           Server
                      application                                      application

                                           3. FIN=1,Seq=444
                         TCP              4.ACK=1,ACKn=445                TCP

In sintesi possiamo rappresentare quanto descritto nel seguente diagramma temporale:

                                         ^£iHACKn 445 =

                                                                     Tempo

• Stima e impostazione del timeout
Come è possibile intuire dalla analisi degli scambi d i messaggi tra client e server u n ruolo fondamen-
tale nel protocollo TCP lo ha i l dimensionamento del timeout dato che:
I se è troppo breve i l mittente immetterà molteplici ritrasmissioni dello stesso segmento i n quanto
  potrebbe non arrivarne la conferma i n tempo utile;
I se è troppo lungo viene rallentato i l recupero dei segmenti persi.

    Il valore ottimale del timeout non è un parametro standard ma dipende fortemente dal ritar-
    do della rete e deve essere determinato stimando il     (               ).

Vediamo u n semplice procedimento che ci permette di impostare i l valore del timeout d i TCP.
Poniamo SampleRTT come i l tempo misurato intercorso tra la trasmissione di u n segmento e la
ricezione del suo ACK d i riscontro: essendo però questo u n valore variabile i n funzione dello stato
della rete, calcoliamo EstimatedRTT come una sua media mobile esponenziale ponderata, ovvero

                      EstimatedRTT = (1 - a) • EstimatedRTT + a • SampleRTT

dove u n valore tipico per a è 0,125: i n questa relazione l'influenza dei vecchi campioni decresce
esponenzialmente i n modo che siano più "pesanti" i valori più recenti, e quindi più reali, d i RTT.

                                                                                                           193
Puoi anche leggere