原创 通用工程 2025-08-26 12:02 上海
作者在前段时间为某个服务升级支持了 TLS 1.3,然而在升级过程中发现 RTT 并没有按预期减少,所以进行了排查与记录,并分享给大家。

💡 **TLS 1.3 升级与预期不符**:尽管 TLS 1.3 标准宣称将握手时间从 2 RTT 减少到 1 RTT,但在实际服务升级后,作者发现 TLS 握手仍需 2 RTT,这与预期不符,促使作者深入排查。
🔍 **TCP 层面的 RTT 瓶颈**:通过 Wireshark 对比分析,问题被定位到 TCP 层,发现多出的 1 RTT 发生在服务器端收到客户端 Ack 后才发送 Certificate Verify 和 Finished 包。排除了接收方窗口、MSS、拥塞控制等常见 TCP 参数的影响。
⏳ **Nagle 算法的影响**:最终排查发现服务器端启用了 Nagle 算法,该算法为了减少小数据包而引入了额外的时延。在 TLS 1.3 场景下,Nagle 算法导致服务器端的 Certificate Verify 和 Finished 包需要等待客户端对前一个包的 Ack,从而增加了 1 RTT。
✅ **关闭 Nagle 算法优化成功**:关闭 Nagle 算法后,TLS 握手时间成功缩短为 1 RTT,服务器端可以更及时地发送握手数据包,解决了 RTT 未达预期的性能问题,并带来了显著的访问时延降低。
原创 通用工程 2025-08-26 12:02 上海
作者在前段时间为某个服务升级支持了 TLS 1.3,然而在升级过程中发现 RTT 并没有按预期减少,所以进行了排查与记录,并分享给大家。
tcp_nodelay off这段代码开启了 Nagle 算法。翻阅 RFC896 我们可以发现 Nagle 算法是为了解决小数据包问题,比如下面这种情况:各种协议必要的头尾数据占 58 bytes,真正需要传输的数据只有 1 byte,有效载荷比不到 2%。于是 Nagle 算法通过一种自适应的方法来减少小数据包的数量,提升网络效率。其本质是通过增加时延来换取更高的有效载荷比Nagle 算法的核心内容可以概括为:不一下子把所有小分组都发出去,而是等到前一个小分组的 ACK 收到或者攒够一个 MSS 大小再一起发Nagle 算法的规则:满载的数据包,允许发送包含 FIN,允许发送TCP_NODELAY 被设置,允许发送所有送的小数据包(长度小于 MSS)都被确认了,允许发送上述条件都未满足,但发送了超时(一般为 200 ms),则立即发送根据上述规则,我们可以看到 Server 发送的序号为 9 和 12 的都是未满载的数据包,所以 12 号包是等 Server 收到了 Client 对 9 号包的 Ack 后才发送的。这就增加了 1 RTT。Nagle 算法提出于 1984 年,那时的带宽、数据包处理能力都远不如今天。而在当前环境下,对于时延敏感的应用,通常建议关闭 Nagle 算法。经确认 Nagle 算法并不适合我们现在的场景,所以关闭 Nagle 算法后再做验证,TLS 握手时间果然只有 1 RTT。看数据包 Serever 端的 Certificate Verify 和 Finished 包也不需要等 Client 的 Ack 就直接发送了。至此问题已圆满解决。我们已将上述优化上线,可将国内用户首次访问时延减少 10 ~ 40ms,海外最高减少上百毫秒。咱们再回过头来仔细看一下 TLS 1.3 的握手流程,会多一层理解:1 RTT 只是 TLS 交互逻辑上的,真正端到端的交互时间还受到底层协议比如 TCP 的影响。三. 结语这次问题的排查过程让笔者对网络协议的实际行为有了更深入的理解。同时笔者也从基础的网络知识中受益颇多,所以将整个过程整理分享出来,希望也会对你有所帮助。推荐阅读:对 RFC 8446(即 TLS 1.3)的详细解读: https://blog.cloudflare.com/rfc-8446-aka-tls-1-3/TLS 1.3 愿望清单:https://www.ietf.org/proceedings/87/slides/slides-87-tls-5.pdfRFC 8446(TLS 1.3 规范): https://datatracker.ietf.org/doc/html/rfc8446Nagle 算法以及所谓 TCP 粘包 :https://www.cnblogs.com/jojop/p/14376423.htmlRFC896(IP/TCP 互联网中的拥塞控制): https://datatracker.ietf.org/doc/html/rfc896-End-作者丨House开发者问答大家还有过哪些有趣的性能优化或者 Debug 经历?欢迎在留言区分享你的见解~转发本文至朋友圈并留言,即可参与下方抽奖⬇️小编将抽取1位幸运的小伙伴获取JOJO的奇妙冒险 石之海 冷水杯抽奖截止时间:9月2日12:00如果喜欢本期内容的话,欢迎点个“在看”吧!往期精彩指路
AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。
鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑