Я реализовал DTLS-сервер, используя openssl. (У меня есть сокет udp, и я использую био памяти для связи с openssl.) Однако, если есть потеря пакета, рукопожатие DTLS может занять 1-2 секунды, что много в моем случае.
нормальный поток, когда нет потери пакетов: (несколько миллисекунд)
Client Hello ------------------------->
<------------------------- Server Hello
Rest of the handshake ---------------->
<---------------- Rest of the handshake
Поток, который я испытываю: (несколько секунд)
Client Hello ------------------------->
<-------(lost)------------ Server Hello
Client Hello ------------------------->
Client Hello ------------------------->
Client Hello ------------------------->
<------------------------- Server Hello
Rest of the handshake ---------------->
<---------------- Rest of the handshake
Я могу легко воспроизвести его даже в локальной среде прямое удаление первого сервера Hello.
Мне любопытно, почему сервер не отвечает на несколько предстоящих приветствий клиента. Если он ответит, что рукопожатие может завершиться значительно менее чем за 1 секунду, но таким образом это займет 1-2 секунды, когда он, наконец, ответит снова для последующих приветствий клиента.
Как я могу сделать так, чтобы рукопожатие DTLS завершалось быстрее? (например, путем включения ответа для всех клиентов Hello), есть ли способ?)