关于 TLS 短连接访问时间过长的的一些问题

2019-10-09 21:56:18 +08:00
 RicardoY

最近在折腾一个把 Google Dns Over TLS 转换到本地使用的小玩具, 是用 Python 实现的, 但是发现单次连接耗费的时间特别长,使用的 TLS 协议不管是 TLS1.3 还是 TLS1.2 单次查询的时间都相似且长到不可接受。我同时还设置了 TCP_NODELAY 试图改善一下性能,但是似乎变得更慢了

抓包的结果如下

我有一些问题

1.网上有很多资料显示 TLS1.3 的握手过程仅需要 1-RTT, 但是抓包结果似乎显示使用了 2-RTT 的时间进行握手(第一个数据包应该是编号为 13 的包)

2.使用 Python 有办法开启 TCP Fast Open, TLS session resumption 和 TLS early data 这些技术来改善连接的速度吗? Python 自带的 ssl 模块似乎不直接支持这些技术, 我尝试将 TLS 协议版本设置为 TLS1.2 并使用 session ticket 进行连接恢复,但是还是没有任何改善

2264 次点击
所在节点    问与答
9 条回复
RicardoY
2019-10-10 12:09:13 +08:00
午饭时间捞一下自己..希望有好心人看到吧..
imWBB
2019-10-10 12:22:22 +08:00
想想 是不是 墙的原因
RicardoY
2019-10-10 18:00:33 +08:00
@imWBB 我测试了一下 在墙外还是差不多的情况
allenforrest
2019-10-10 18:57:38 +08:00
为啥不用长连接?
RicardoY
2019-10-10 18:59:49 +08:00
@allenforrest 一次查询之后会被对端关掉
allenforrest
2019-10-10 19:05:58 +08:00
从抓包看,dns.google 的相应太慢了
响应 SYN 花了 212ms
响应 Client Hello 花了 210ms
响应 Change Cipher Spec 花了 213ms
响应 TLS 建立以后的 DNS 查询请求,花了 220ms

你 ping 一下 dns.google 看看时延?
RicardoY
2019-10-10 19:36:08 +08:00
@allenforrest ping 的时延是 200ms 左右
allenforrest
2019-10-10 19:42:36 +08:00
@RicardoY 那 TLS 本身也没啥好优化的了。。。
fengtons
2019-10-10 19:50:13 +08:00
从抓包结果来看正常,TCP 握手 1RTT,SSL 握手 1RTT,TLS1.3 的 1RTT 不包握 TCP 握手的时间,这个不能省。如果使用 early data 的话可以在发送 client hello 的同时将一些数据发出去,这就是 TLS1.3 的 0RTT。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/607634

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX