curl -w的参数可以获取很多网络访问的细节,其中之一就是可以获取到ssl连接中的tcp handshake和ssl handshake的相关时间:
$ curl -w "TCP handshake: %{time_connect}, SSL handshake: %{time_appconnect}\n" -so /dev/null https://www.alipay.com
TCP handshake: 0.031, SSL handshake: 0.146
获取更加详细的连接时间的方式:
$cat curl-format.txt
\n
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
—————\n
time_total: %{time_total}\n
\n
使用curl:
$curl -w "@curl-format.txt" -o /dev/null -s http://wordpress.com/
-w "@curl-format.txt" tells cURL to use our format file
-o /dev/null redirects the output of the request to /dev/null
-s tells cURL not to show a progress meter
测试:
$curl -w "@curl-format.txt" -o /dev/null -s http://wordpress.com/
time_namelookup: 1.521
time_connect: 2.264
time_appconnect: 0.000
time_pretransfer: 2.264
time_redirect: 0.000
time_starttransfer: 0.000
—————
time_total: 2.264
curl帮助文档:curl man
经过以上过程可以看到,采用了TLS后,由于增加RTT,对于网络延时影响还是比较大,当前的TLS V1.3版本提出了0-RTT的方案,也就是如果有共有秘钥的情况下,可以节省掉握手的PSK模式,非常有利于性能的优化参见 https://timtaubert.de/blog/2015/11/more-privacy-less-latency-improved-handshakes-in-tls-13/,另外在分析微信的通信过程中发现微信采用了mmtls的协议,类似于TLS 1.3的方式,参见:基于 TLS 1.3 的微信安全通信协议 mmtls 介绍