在做弱网测试的时候, 发现了一个奇怪的问题, 我们分别在上行和下行通道上施加从 5% , 10% 到 20% 的丢包,
当仅在上行通道施加丢包时, 一切运行良好, 我们的 FEC/RTX 功能使得音视频通话依然流畅,
可是在下行通道施加丢包时, 重新连接服务器常常不成功, 时常出现连接失败的情况, 但是机率也不是 100%,
经过 wireshark 抓包发现一个 DTLS handshark 经常会不成功, DTLS v1.2 协议中规定的握手流程如下
Client Server
------ ------
ClientHello --------> Flight 1
<------- HelloVerifyRequest Flight 2
ClientHello --------> Flight 3
ServerHello \
Certificate* \
ServerKeyExchange* Flight 4
CertificateRequest* /
<-------- ServerHelloDone /
Certificate*

在进行弱网测试时,发现下行通道丢包会导致DTLS握手失败。OpenSSL1.1虽然有重传机制,但在服务器发送newsessionticket等最后一个握手消息后,不再处理客户端可能因丢包重传的握手请求。为解决此问题,通过在服务器端缓存最后的握手消息,在客户端重传时立即响应,确保握手成功。
最低0.47元/天 解锁文章
931

被折叠的 条评论
为什么被折叠?



