溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用curl工具分析HTTP請求網絡時延

發布時間:2021-07-29 23:46:56 來源:億速云 閱讀:937 作者:chen 欄目:云計算

這篇文章主要講解了“如何使用curl工具分析HTTP請求網絡時延”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何使用curl工具分析HTTP請求網絡時延”吧!

curl 是一個非常優秀的網絡測試工具,也是目前使用最廣泛的網絡測試工具之一,特別是在HTTP協議的支持上,可以算是最優秀、使用最廣泛的工具,沒有之一。curl提供命令行工具與API庫,開發者可以在腳本中集成命令行工具、在應用程序中集成庫。curl可以抓取到網絡與通信協議傳輸中各個階段的耗時數據,在分析網絡性能的時候特別好用。<!--more-->

典型的HTTP請求流

在當前互聯網應用架構上,一個典型的HTTP請求流,從客戶端發起請求,通過LocalDNS解析域名得到負載均衡服務的IP地址,訪問負載均衡服務的IP地址,負載均衡服務完成證書卸載,將請求轉發到后端服務。

                Client          LocalDNS            LoadBalancer          BackendService
                  |                |                    |                           |
                  |--1.1 DNS Req---|                    |                           |
time_namelookup   |<-1.2 DNS Resp--|                    |                           |
                  |                                     |                           |
                  |---------2.1 TCP SYNC--------------->|                           |
                  |<--------2.2 TCP ACK/SYNC------------|                           |
time_connect      |---------2.3 TCP ACK---------------->|                           |
                  |                                     |                           |
                  |--3.1 SSL ClientHello--------------->|                           |
                  |<-3.2 SSL ServerHello/Certificate----|                           |
                  |--3.3 SSL ClientKeyEx/ChangeCipher-->|                           |
time_appconnect   |<-3.4 SSL ChangeCipher/Finished------|                           |
                  |                                     |                           |
time_pretransfer  |--4.1 HTTP Request------------------>|                           |
                  |<-4.2 HTTP StatusCode 100 Continue---|                           |
                  |--4.3 HTTP Request Complete--------->|                           |
                  |                                     |--4.4 HTTP Request-------->|
                  |                                     |<-4.5 HTTP Response--------|
time_starttransfer|<-4.6 HTTP Response------------------|                           |
time_total        |                                     |                           |

通過上述HTTP請求流程拆解,可以得出HTTP請求的4個大段:

  1. DNS解析

  2. TCP建連

  3. SSL握手

  4. HTTP協議交互

通過curl工具作為客戶端,向服務端發起HTTP請求,可以采集上述4個分段的時延。

分段數據采集

curl 命令通過 -w, --write-out <format> 選項可以獲取到上述4個分段的時延數據。 -w 的參數格式為 -w "...${var}..." ,其中 ${var} 是由 curl 提供的變量,通過這些變量就可以獲得到時延數據。

需要注意的是,curl輸出的每個變量值,是包含所有分段時延總值,因此計算每個分段時候需要做減法。

1. DNS解析

通過變量 time_namelookup 獲取DNS解析時延。

time_namelookup The time, in seconds, it took from the start until the name resolving was completed.

2. TCP建連

通過變量 time_connect 獲取TCP連接時延,此值包含了DNS解析的時延time_namelookup。因此,

TCP連接時延 = (time_connect - time_namelookup)

time_connect The time, in seconds, it took from the start until the TCP connect to the remote host (or proxy) was completed.

RTT(Round Trip Time) 是一個重要的網絡參數指標,TCP連接時延可以約等于RTT。

RTT ~= TCP連接時延

3. SSL握手

通過變量 time_appconnect 獲取SSL握手時延,此值包含了time_connect。因此,

SSL握手時延 = (time_appconnect-time_connect)

time_appconnect The time, in seconds, it took from the start until the SSL/SSH/etc connect/handshake to the remote host was completed. (Added in 7.19.0).

4. HTTP協議交互

通過變量time_pretransfer獲取客戶端開始發送HTTP請求時延。 通過time_starttransfer獲取客戶端開始接收HTTP響應的第一個字節時延,也就是 TTFB(Time to First Byte)。 通過time_total獲取整個HTTP通信的時延。

HTTP協議交互時延 = (time_total-time_pretransfer)

HTTP數據傳輸時延 = (time_total-time_starttransfer),根據此值與響應消息包大小可以計算出帶寬。

time_pretransfer The time, in seconds, it took from the start until the file transfer was just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.

time_starttransfer The time, in seconds, it took from the start until the first byte was just about to be transferred. This includes time_pretransfer and also the time the server needed to calculate the result.

time_total The total time, in seconds, that the full operation lasted.

對于POST請求大于1024字節時的time_starttransfer值

curl 發送POST請求的Body大于1024字節的時候,默認會在HTTP請求頭中增加Expect: 100-continue,那么此時負載均衡服務會回復一個狀態碼為100的響應,此時time_starttransfer 的值是 curl接收狀態碼為100的響應時間,而不是實際開始接收后端服務響應數據的時間,如果負載均衡服務與后端服務地理位置分離部署,這個值就會差別很大。

為了避免這種情況,可以在curl命令行中顯示禁用Expect: 100-continue消息頭:

curl -H 'Expect:' ...

感謝各位的閱讀,以上就是“如何使用curl工具分析HTTP請求網絡時延”的內容了,經過本文的學習后,相信大家對如何使用curl工具分析HTTP請求網絡時延這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女