Sockets DTLS服务器在第二个ClientHello之后没有正确应答

Sockets DTLS服务器在第二个ClientHello之后没有正确应答,sockets,networking,udp,dtls,mbedtls,Sockets,Networking,Udp,Dtls,Mbedtls,我正在使用不同于UDP的网络传输协议构建DTLS服务器和客户端设置。但该协议也是不可靠的,因此需要DTLS。该协议使用无线网络将数据从客户端传输到服务器,反之亦然。为了使其与DTLS兼容,接收到的数据随后通过UDP客户端转发到服务器端的DTLS服务器,并通过UDP服务器转发到客户端的DTLS客户端,两者都在本地主机上工作 作为基础,我使用mbedTLS的programs/ssl目录中给出的DTLS示例实现。由于所使用的协议在传输时不是fastet,我通过使用mbedtls_ssl_conf_ha

我正在使用不同于UDP的网络传输协议构建DTLS服务器和客户端设置。但该协议也是不可靠的,因此需要DTLS。该协议使用无线网络将数据从客户端传输到服务器,反之亦然。为了使其与DTLS兼容,接收到的数据随后通过UDP客户端转发到服务器端的DTLS服务器,并通过UDP服务器转发到客户端的DTLS客户端,两者都在本地主机上工作

作为基础,我使用mbedTLS的programs/ssl目录中给出的DTLS示例实现。由于所使用的协议在传输时不是fastet,我通过使用mbedtls_ssl_conf_handshake_timeout函数调整了握手超时,以便不会出现任何可能干扰实际数据传输的早期重传。这是必要的

服务器在大约2分钟后收到第一条握手消息(ClientHello)。服务器通过VerifyRequest进行应答,再过3分钟,服务器就会收到客户端的应答(ClientHello+Cookie)。但是服务器没有发送ServerHello,而是用另一个VerifyRequest进行应答,比如他忘记了第一个初始化ClientHello

我将收到的ClientHello消息与DTLS握手产生的一些消息进行了比较,这些消息使用相同的设置,但UDP作为网络协议,它们几乎是等效的(除了随机部分和cookie)

我是否需要调整另一个超时计时器,以便服务器等待第二个ClientHello的时间更长?还是我忽略了另一件事

如果你需要对这个问题作进一步的描述,我会尽力给你


如果您有任何想法或提示,我将不胜感激。

对于延迟回复,我深表歉意
从中可以看到,如果cookie验证失败,将发送验证请求消息:

if( ssl->conf->transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM &&
    ssl->handshake->verify_cookie_len != 0 )
{
    MBEDTLS_SSL_DEBUG_MSG( 2, ( "client hello was not authenticated" ) );
    MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= write server hello" ) );

    return( ssl_write_hello_verify_request( ssl ) );
}
if(ssl->conf->transport==MBEDTLS\u ssl\u transport\u数据报&&
ssl->握手->验证\u cookie\u len!=0)
{
MBEDTLS_SSL_DEBUG_MSG(2,(“客户端hello未经身份验证”);
MBEDTLS\U SSL\U DEBUG\U MSG(2,(“