跳到主要内容

3.1. Packet Loss (数据包丢失)

3.1. Packet Loss (数据包丢失)

DTLS 使用简单的重传定时器来处理数据包丢失。图 1 使用 DTLS 握手的第一阶段演示了基本概念:

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

X<-- HelloRetryRequest
(lost)

[Timer Expires]

ClientHello ------>
(retransmit)

图 1: DTLS 重传示例

一旦客户端发送了 ClientHello 消息, 它期望从服务器看到 HelloRetryRequest 或 ServerHello。但是, 如果定时器过期, 客户端就知道 ClientHello 或服务器的响应已经丢失, 这会导致客户端重传 ClientHello。当服务器收到重传时, 它知道要重传其 HelloRetryRequest 或 ServerHello。

服务器还为其发送的消息 (除 HelloRetryRequest 外) 维护重传定时器, 并在该定时器过期时重传。不对 HelloRetryRequest 应用重传可以避免在服务器上创建状态的需要。HelloRetryRequest 被设计得足够小, 使其本身不会被分段, 从而避免了关于交错多个 HelloRetryRequest 的担忧。

有关超时和重传的更多详细信息, 请参见第 5.8 节。