Zum Hauptinhalt springen

3.1. Packet Loss (Paketverlust)

3.1. Packet Loss (Paketverlust)

DTLS verwendet einen einfachen Übertragungstimer, um Paketverlust zu handhaben. Abbildung 1 demonstriert das Grundkonzept unter Verwendung der ersten Phase des DTLS-Handshakes:

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

X<-- HelloRetryRequest
(lost)

[Timer Expires]

ClientHello ------>
(retransmit)

Abbildung 1: DTLS Übertragungsbeispiel

Sobald der Client die ClientHello-Nachricht übertragen hat, erwartet er vom Server ein HelloRetryRequest oder ServerHello zu sehen. Wenn jedoch der Timer abläuft, weiß der Client, dass entweder das ClientHello oder die Antwort vom Server verloren gegangen ist, was den Client veranlasst, das ClientHello erneut zu übertragen. Wenn der Server die erneute Übertragung empfängt, weiß er, dass er sein HelloRetryRequest oder ServerHello erneut übertragen muss.

Der Server unterhält auch einen Übertragungstimer für Nachrichten, die er sendet (außer HelloRetryRequest), und überträgt erneut, wenn dieser Timer abläuft. Das Nichtanwenden von erneuten Übertragungen auf das HelloRetryRequest vermeidet die Notwendigkeit, einen Zustand auf dem Server zu erstellen. Das HelloRetryRequest ist so konzipiert, dass es klein genug ist, dass es selbst nicht fragmentiert wird, wodurch Bedenken bezüglich der Verschachtelung mehrerer HelloRetryRequests vermieden werden.

Für weitere Details zu Timeouts und erneuter Übertragung siehe Abschnitt 5.8.