容量规划:测量每个 HTTP 请求的网络流量

容量规划:测量每个 HTTP 请求的网络流量

我试图弄清楚执行单个 HTTP 请求到底需要多少网络数据

我目前正在使用 curl 模拟请求

curl -v  -X POST ${vehicles_endpoint}/updateMileageAndErrorCodes/abc123/9500/P0187,P0191,P0213

并捕获响应:

* About to connect() to localhost port 8088 (#0)
*   Trying ::1... connected
* Connected to localhost (::1) port 8088 (#0)
> POST /vdm/vehicles/updateMileageAndErrorCodes/abc123/15000/P0110 HTTP/1.1
> User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
> Host: localhost:8088
> Accept: */*
> 
< HTTP/1.1 204 No Content
< Server: Apache-Coyote/1.1
< Date: Wed, 28 Aug 2013 08:20:18 GMT
< 
* Connection #0 to host localhost left intact
* Closing connection #0

如何才能找出执行此请求/响应所需的确切字节数?

我可以查看请求中的字符数(211)

POST /vdm/vehicles/updateMileageAndErrorCodes/abc123/9500/P0187,P0191,P0213 HTTP/1.1
User-Agent: curl/7.21.4 (universal-apple-darwin11.0) libcurl/7.21.4 OpenSSL/0.9.8r zlib/1.2.5
Host: localhost:8088
Accept: */*

响应(86):

HTTP/1.1 204 No Content
Server: Apache-Coyote/1.1
Date: Wed, 28 Aug 2013 08:20:18 GMT

但我想还有一些其他与协议相关的开销?

如果我执行 tcpdump

sudo tcpdump -s 0 -X 'tcp dst port 80'

它给了我以下输出:

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
10:41:47.442934 IP 34-188-5-188.mobileinternet.proximus.be.51905 > CentOS-63-64-minimal.http: Flags [S], seq 1277831461, win 13140, options [mss 1460,sackOK,TS val 3832792 ecr 0,nop,wscale 1], length
0
        0x0000:  4500 003c 52fd 4000 2906 b6e0 bc05 bc22  E..<R.@.)......"
        0x0010:  904c 3f6a cac1 0050 4c2a 2925 0000 0000  .L?j...PL*)%....
        0x0020:  a002 3354 1060 0000 0204 05b4 0402 080a  ..3T.`..........
        0x0030:  003a 7bd8 0000 0000 0103 0301            .:{.........
10:41:47.862952 IP 34-188-5-188.mobileinternet.proximus.be.51905 > CentOS-63-64-minimal.http: Flags [.], ack 197676124, win 6570, options [nop,nop,TS val 3832868 ecr 2984946753], length 0
        0x0000:  4500 0034 52fe 4000 2906 b6e7 bc05 bc22  E..4R.@.)......"
        0x0010:  904c 3f6a cac1 0050 4c2a 2926 0bc8 4c5c  .L?j...PL*)&..L\
        0x0020:  8010 19aa a223 0000 0101 080a 003a 7c24  .....#.......:|$
        0x0030:  b1ea ac41                                ...A
10:41:48.144006 IP 34-188-5-188.mobileinternet.proximus.be.51905 > CentOS-63-64-minimal.http: Flags [P.], seq 0:317, ack 1, win 6570, options [nop,nop,TS val 3832874 ecr 2984946753], length 317
        0x0000:  4500 0171 52ff 4000 2906 b5a9 bc05 bc22  E..qR.@.)......"
        0x0010:  904c 3f6a cac1 0050 4c2a 2926 0bc8 4c5c  .L?j...PL*)&..L\
        0x0020:  8018 19aa 63e2 0000 0101 080a 003a 7c2a  ....c........:|*
        0x0030:  b1ea ac41 504f 5354 202f 7664 6d2f 7665  ...APOST./vdm/ve
        0x0040:  6869 636c 6573 2f75 7064 6174 654d 696c  hicles/updateMil
        0x0050:  6561 6765 416e 6445 7272 6f72 436f 6465  eageAndErrorCode
        0x0060:  732f 6162 6331 3233 2f39 3530 302f 5030  s/abc123/9500/P0
        0x0070:  3138 372c 5030 3139 312c 5030 3231 3320  187,P0191,P0213.
        0x0080:  4854 5450 2f31 2e31 0d0a 5573 6572 2d41  HTTP/1.1..User-A
        0x0090:  6765 6e74 3a20 4461 6c76 696b 2f31 2e36  gent:.Dalvik/1.6
        0x00a0:  2e30 2028 4c69 6e75 783b 2055 3b20 416e  .0.(Linux;.U;.An
        0x00b0:  6472 6f69 6420 342e 333b 2047 616c 6178  droid.4.3;.Galax
        0x00c0:  7920 4e65 7875 7320 4275 696c 642f 4a57  y.Nexus.Build/JW
        0x00d0:  5236 3659 290d 0a48 6f73 743a 2076 646d  R66Y)..Host:.vdm
        0x00e0:  2d61 7069 2e65 636f 6d6d 6974 2d63 6f6e  -api.ecommit-con
        0x00f0:  7375 6c74 696e 672e 6265 0d0a 436f 6e6e  sulting.be..Conn
        0x0100:  6563 7469 6f6e 3a20 4b65 6570 2d41 6c69  ection:.Keep-Ali
        0x0110:  7665 0d0a 4163 6365 7074 2d45 6e63 6f64  ve..Accept-Encod
        0x0120:  696e 673a 2067 7a69 700d 0a43 6f6e 7465  ing:.gzip..Conte
        0x0130:  6e74 2d54 7970 653a 2061 7070 6c69 6361  nt-Type:.applica
        0x0140:  7469 6f6e 2f78 2d77 7777 2d66 6f72 6d2d  tion/x-www-form-
        0x0150:  7572 6c65 6e63 6f64 6564 0d0a 436f 6e74  urlencoded..Cont
        0x0160:  656e 742d 4c65 6e67 7468 3a20 300d 0a0d  ent-Length:.0...
        0x0170:  0a                                       .
10:41:49.603082 IP 34-188-5-188.mobileinternet.proximus.be.51905 > CentOS-63-64-minimal.http: Flags [.], ack 162, win 6490, options [nop,nop,TS val 3833096 ecr 2984948484], length 0
        0x0000:  4500 0034 5300 4000 2906 b6e5 bc05 bc22  E..4S.@.)......"
        0x0010:  904c 3f6a cac1 0050 4c2a 2a63 0bc8 4cfd  .L?j...PL**c..L.
        0x0020:  8010 195a 98ee 0000 0101 080a 003a 7d08  ...Z.........:}.
        0x0030:  b1ea b304                                ....
10:41:49.622962 IP 34-188-5-188.mobileinternet.proximus.be.51905 > CentOS-63-64-minimal.http: Flags [F.], seq 317, ack 163, win 6490, options [nop,nop,TS val 3833098 ecr 2984948484], length 0
        0x0000:  4500 0034 5301 4000 2906 b6e4 bc05 bc22  E..4S.@.)......"
        0x0010:  904c 3f6a cac1 0050 4c2a 2a63 0bc8 4cfe  .L?j...PL**c..L.
        0x0020:  8011 195a 98ea 0000 0101 080a 003a 7d0a  ...Z.........:}.
        0x0030:  b1ea b304                                ....

我注意到请求的整个长度(包括所有 http 请求标头)为 317,但我也看到很多长度:0 输出。

我如何才能确定此请求传输的确切字节数?(我使用了我的 Android 手机数据使用工具,注意到每个请求大约为 900 字节)。

答案1

要弄清楚单个请求的总内容(包括主页调用的外部文件),请查看Pingdom 的网站速度测试

您可以使用curl -I http://sitename,或者wget站点。

curl -I仅显示标题(包括 Content-Length),但会丢弃文件,而 wget 实际上会保存主站点文件(例如 index.html)。这样可以获取主文件的大小,但无法获取该页面调用的所有文件的大小。

您也可以尝试使用 Chrome Dev 工具来收集一些见解。

答案2

尝试tcpdump -v获取完整数据包长度。您在此处获取的内容(不使用“-v”)是有效负载大小(等于数据包大小减去以太网/IP/TCP 标头)。

然后对整个通信进行总结(过滤“源主机”可能有助于缩小范围)

目前尚不清楚您是否有兴趣仅计算传出的数据包,还是同时计算传入和传出的数据包。

答案3

您可以尝试Http分析器效用作为普卡普项目。此实用程序捕获 HTTP 数据并收集大量有关它的统计数据。除此之外,它还收集 HTTP 请求/响应大小。您可以在此处阅读更多信息:http://seladb.github.io/PcapPlusPlus-Doc/examples.html

答案4

工具伊夫托普曼伊夫托普) 显示主机接口的带宽使用情况、传输/接收/总字节数的累积统计信息,并支持定义众所周知的 PCAP 过滤器(如 tcpdump)以仅统计特定流量。您可以尝试使用简单的命令来监控 http 流量,例如

iftop -P -i eth0 -f "dst port http"

默认情况下,当 iftop 启动时,屏幕上方显示客户端和服务器之间的当前带宽使用情况,而下方显示累积统计信息。您可以通过创建配置文件~/.iftoprc或使用-c选项指定配置文件来更改此设置。

相关内容