Passa al contenuto principale

3.1. Packet Loss (Perdita di pacchetti)

3.1. Packet Loss (Perdita di pacchetti)

DTLS utilizza un semplice timer di ritrasmissione per gestire la perdita di pacchetti. La figura 1 dimostra il concetto di base utilizzando la prima fase dell'handshake DTLS:

         Client                                   Server
------ ------
ClientHello ------>

X<-- HelloRetryRequest
(lost)

[Timer Expires]

ClientHello ------>
(retransmit)

Figura 1: Esempio di ritrasmissione DTLS

Una volta che il client ha trasmesso il messaggio ClientHello, si aspetta di vedere un HelloRetryRequest o un ServerHello dal server. Tuttavia, se il timer scade, il client sa che o il ClientHello o la risposta dal server è stata persa, il che fa sì che il client ritrasmetta il ClientHello. Quando il server riceve la ritrasmissione, sa di dover ritrasmettere il suo HelloRetryRequest o ServerHello.

Il server mantiene anche un timer di ritrasmissione per i messaggi che invia (diversi da HelloRetryRequest) e ritrasmette quando quel timer scade. Non applicare ritrasmissioni al HelloRetryRequest evita la necessità di creare stato sul server. L'HelloRetryRequest è progettato per essere abbastanza piccolo da non essere esso stesso frammentato, evitando così preoccupazioni sull'interleaving di più HelloRetryRequest.

Per maggiori dettagli sui timeout e sulla ritrasmissione, vedere la sezione 5.8.