Passa al contenuto principale

4. Protocollo di connessione iniziale (Initial Connection Protocol)

Un trasferimento viene stabilito inviando una richiesta (WRQ per scrivere su un file system esterno, o RRQ per leggere da esso) e ricevendo una risposta positiva, un pacchetto di riconoscimento per la scrittura o il primo pacchetto di dati per la lettura. In generale, un pacchetto di riconoscimento conterrà il numero di blocco del pacchetto di dati riconosciuto. Ogni pacchetto di dati ha associato un numero di blocco; i numeri di blocco sono consecutivi e iniziano con uno. Poiché la risposta positiva a una richiesta di scrittura è un pacchetto di riconoscimento, in questo caso speciale il numero di blocco sarà zero. (Normalmente, poiché un pacchetto di riconoscimento sta riconoscendo un pacchetto di dati, il pacchetto di riconoscimento conterrà il numero di blocco del pacchetto di dati riconosciuto.) Se la risposta è un pacchetto di errore, allora la richiesta è stata negata.

Per creare una connessione, ogni estremità della connessione sceglie un TID per sé stessa, da utilizzare per la durata di quella connessione. I TID scelti per una connessione dovrebbero essere scelti casualmente, in modo che la probabilità che lo stesso numero sia scelto due volte in successione immediata sia molto bassa. Ogni pacchetto ha associato i due TID delle estremità della connessione, il TID di origine e il TID di destinazione. Questi TID vengono passati al supporto UDP (o altro protocollo di datagram) come porte di origine e destinazione. Un host richiedente sceglie il suo TID di origine come descritto sopra e invia la sua richiesta iniziale al TID noto 69 decimale (105 ottale) sull'host servente. La risposta alla richiesta, in operazione normale, utilizza un TID scelto dal server come suo TID di origine e il TID scelto per il messaggio precedente dal richiedente come suo TID di destinazione. I due TID scelti vengono quindi utilizzati per il resto del trasferimento.

Come esempio, il seguente mostra i passaggi utilizzati per stabilire una connessione per scrivere un file. Notare che WRQ, ACK e DATA sono i nomi dei tipi di pacchetti di richiesta di scrittura, riconoscimento e dati rispettivamente. L'appendice contiene un esempio simile per la lettura di un file.

  1. L'host A invia una "WRQ" all'host B con source= TID di A, destination= 69.
  2. L'host B invia una "ACK" (con numero di blocco= 0) all'host A con source= TID di B, destination= TID di A.

A questo punto la connessione è stata stabilita e il primo pacchetto di dati può essere inviato dall'host A con un numero di sequenza di 1. Nel passaggio successivo e in tutti i passaggi successivi, gli host dovrebbero assicurarsi che il TID di origine corrisponda al valore concordato nei passaggi 1 e 2. Se un TID di origine non corrisponde, il pacchetto dovrebbe essere scartato come erroneamente inviato da qualche altra parte. Un pacchetto di errore dovrebbe essere inviato all'origine del pacchetto errato, senza disturbare il trasferimento. Questo può essere fatto solo se TFTP riceve effettivamente un pacchetto con un TID errato. Se i protocolli di supporto non lo permettono, questa particolare condizione di errore non si verificherà.

L'esempio seguente dimostra un funzionamento corretto del protocollo in cui la situazione sopra può verificarsi. L'host A invia una richiesta all'host B. Da qualche parte nella rete, il pacchetto di richiesta viene duplicato e, di conseguenza, due riconoscimenti vengono restituiti all'host A, con TID diversi scelti sull'host B in risposta alle due richieste. Quando arriva la prima risposta, l'host A continua la connessione. Quando arriva la seconda risposta alla richiesta, dovrebbe essere rifiutata, ma non c'è motivo di terminare la prima connessione. Pertanto, se vengono scelti TID diversi per le due connessioni sull'host B e l'host A controlla i TID di origine dei messaggi che riceve, la prima connessione può essere mantenuta mentre la seconda viene rifiutata restituendo un pacchetto di errore.