使用curl获取网络连接细节耗时

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-format

使用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

参考:Timing Details With cURL

经过以上过程可以看到,采用了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 介绍

发表评论

电子邮件地址不会被公开。 必填项已用*标注