最近在折腾一个把 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 进行连接恢复,但是还是没有任何改善
1
RicardoY OP 午饭时间捞一下自己..希望有好心人看到吧..
|
2
imWBB 2019-10-10 12:22:22 +08:00 via Android
想想 是不是 墙的原因
|
4
allenforrest 2019-10-10 18:57:38 +08:00
为啥不用长连接?
|
5
RicardoY OP @allenforrest 一次查询之后会被对端关掉
|
6
allenforrest 2019-10-10 19:05:58 +08:00 1
从抓包看,dns.google 的相应太慢了
响应 SYN 花了 212ms 响应 Client Hello 花了 210ms 响应 Change Cipher Spec 花了 213ms 响应 TLS 建立以后的 DNS 查询请求,花了 220ms 你 ping 一下 dns.google 看看时延? |
7
RicardoY OP @allenforrest ping 的时延是 200ms 左右
|
8
allenforrest 2019-10-10 19:42:36 +08:00
@RicardoY 那 TLS 本身也没啥好优化的了。。。
|
9
fengtons 2019-10-10 19:50:13 +08:00 via Android 1
从抓包结果来看正常,TCP 握手 1RTT,SSL 握手 1RTT,TLS1.3 的 1RTT 不包握 TCP 握手的时间,这个不能省。如果使用 early data 的话可以在发送 client hello 的同时将一些数据发出去,这就是 TLS1.3 的 0RTT。
|