检测 http 客户端往返时间的廉价方法

检测 http 客户端往返时间的廉价方法

我正在尝试找出一种方法来检测连接到我服务器上的端口 80 的每个 IP 的往返时间。有什么好的方法可以做到这一点?

连接太多了,ping 每个 IP 不切实际。我在想,以某种方式测量服务器发送 syn/ack 数据包和服务器收到 ack 之间的时间差。

有没有办法以低成本记录这些内容?也许使用一些神奇的 tcpdump 过滤器?

本次练习的目的是汇总数据并确定是否存在路由效率低下的问题。比如说,某个地区的某个 ISP 可能路由不正确,等等。

仅供参考,该网络服务器是 nginx。

答案1

$tcpinfo_rtt、$tcpinfo_rttvar、$tcpinfo_snd_cwnd、$tcpinfo_rcv_space

information about the client TCP connection; available on systems that support
the TCP_INFO socket option

http://nginx.org/en/docs/http/ngx_http_core_module.html#variables

答案2

如果你有Linux或Unix机器1,你应该使用跟踪您需要做的就是使用wireshark或者tcpdump到 pcap 文件。

获得该.pcap文件2后,使用tcptrace -xtraffic <pcap_filename>3进行分析。这将生成两个文本文件,并且该 pcap 中所有连接的平均 RTT 统计信息显示在名为 的文件的底部traffic_stats.dat

[mpenning@Bucksnort tcpperf]$ tcptrace -xtraffic willers.pcap
mod_traffic: characterizing traffic
1 arg remaining, starting with 'willers.pcap'
Ostermann's tcptrace -- version 6.6.1 -- Wed Nov 19, 2003

16522 packets seen, 16522 TCP packets traced
elapsed wallclock time: 0:00:00.200709, 82318 pkts/sec analyzed
trace file elapsed time: 0:03:21.754962
Dumping port statistics into file traffic_byport.dat
Dumping overall statistics into file traffic_stats.dat
Plotting performed at 15.000 second intervals
[mpenning@Bucksnort tcpperf]$
[mpenning@Bucksnort tcpperf]$ cat traffic_stats.dat


Overall Statistics over 201 seconds (0:03:21.754962):
4135308 ttl bytes sent, 20573.672 bytes/second
4135308 ttl non-rexmit bytes sent, 20573.672 bytes/second
0 ttl rexmit bytes sent, 0.000 bytes/second
16522 packets sent, 82.199 packets/second
200 connections opened, 0.995 conns/second
11 dupacks sent, 0.055 dupacks/second
0 rexmits sent, 0.000 rexmits/second
average RTT: 67.511 msecs        <------------------
[mpenning@Bucksnort tcpperf]$

本例中使用的文件.pcap是我在循环执行从我的其中一台服务器提取数据的脚本时生成的捕获文件expect。这就是我生成循环的方式...

#!/usr/bin/python
from subprocess import Popen, PIPE
import time

for ii in xrange(0,200):
    # willers.exp is an expect script
    Popen(['./willers.exp'], stdin=PIPE, stdout=PIPE, stderr=PIPE)
    time.sleep(1)


结束语:

  1. AKnoppix Live-CD会做
  2. 过滤仅捕获测试流量
  3. tcptrace如果您使用其他选项,则能够提供非常详细的每个插槽统计信息......
================================
[mpenning@Bucksnort tcpperf]$ tcptrace -lr willers.pcap
剩余 1 个参数,以“willers.pcap”开头
Ostermann 的 tcptrace -- 版本 6.6.1 -- 2003 年 11 月 19 日星期三

检测到 16522 个数据包,跟踪 16522 个 TCP 数据包
已用时间:0:00:00.080496,已分析 205252 个数据包/秒
跟踪文件已用时间:0:03:21.754962
TCP 连接信息:
跟踪 200 个 TCP 连接:
TCP 连接 1:
        主机 c: myhost.local:44781
        主机 d: willers.local:22
        完成连接:RESET(SYN:2)(FIN:1)
        第一个数据包:2011 年 5 月 31 日星期二 22:52:24.154801
        最后一个数据包:2011 年 5 月 31 日星期二 22:52:25.668430
        已用时间:0:00:01.513628
        总包数:73
        文件名:willers.pcap
   c->d: d->c:
     总数据包数:34 总数据包数:39
     重置已发送:4 重置已发送:0
     确认数据包已发送:29 确认数据包已发送:39
     已发送纯确认:11 已发送纯确认:2
     已发送麻袋包数:0 已发送麻袋包数:0
     dsack pkts 已发送:0 dsack pkts 已发送:0
     最大袋装块数/确认数:0 最大袋装块数/确认数:0
     发送的唯一字节数:2512 发送的唯一字节数:14336
     实际数据包:17 实际数据包:36
     实际数据字节:2512 实际数据字节:14336
     rexmt 数据 pkts:0 rexmt 数据 pkts:0
     rexmt 数据字节:0 rexmt 数据字节:0
     zwnd 探测包:0 zwnd 探测包:0
     zwnd 探测字节数:0 zwnd 探测字节数:0
     无序包:0 无序包:0
     推送数据包:17 推送数据包:33
     SYN/FIN 数据包发送数:1/1 SYN/FIN 数据包发送数:1/0
     要求 1323 ws/ts:是/是 要求 1323 ws/ts:是/是
     高级风力:6 级 高级风力:1 级
     所需袋子:Y 所需袋子:Y
     发送麻袋数:0 发送麻袋数:0
     紧急数据包:0 包 紧急数据包:0 包
     紧急数据字节:0 字节 紧急数据字节:0 字节
     请求的 mss:1460 字节 请求的 mss:1460 字节
     最大 segm 大小:792 字节 最大 segm 大小:1448 字节
     最小 segm 大小:16 字节 最小 segm 大小:32 字节
     平均 segm 大小:147 字节 平均 segm 大小:398 字节
     最大赢优势:40832 字节 最大赢优势:66608 字节
     最小获胜优势:5888 字节 最小获胜优势:66608 字节
     零获胜优势:0 次 零获胜优势:0 次
     平均获胜优势:14035 字节 平均获胜优势:66608 字节
     初始窗口:32 字节 初始窗口:40 字节
     初始窗口:1 pkts 初始窗口:1 pkts
     ttl 流长度:2512 字节 ttl 流长度:NA
     丢失数据:0 字节 丢失数据:NA
     截断的数据:0 字节 截断的数据:0 字节
     截断的数据包:0 pkts 截断的数据包:0 pkts
     数据发送时间:1.181 秒 数据发送时间:1.236 秒
     最大空闲时间:196.9 毫秒 最大空闲时间:196.9 毫秒
     吞吐量:1660 Bps 吞吐量:9471 Bps

     RTT 样本:18 RTT 样本:24
     RTT 最小值:43.8 毫秒 RTT 最小值:0.0 毫秒
     RTT 最大值:142.5 毫秒 RTT 最大值:7.2 毫秒
     RTT 平均值:68.5 毫秒 RTT 平均值:0.7 毫秒
     RTT 标准差:35.8 毫秒 RTT 标准差:1.6 毫秒

     来自 3WHS 的 RTT:80.8 毫秒 来自 3WHS 的 RTT:0.0 毫秒

     RTT 全速率样本数:1 RTT 全速率样本数:3
     RTT full_sz 最小值:142.5 毫秒 RTT full_sz 最小值:0.0 毫秒
     RTT full_sz 最大值:142.5 毫秒 RTT full_sz 最大值:0.0 毫秒
     RTT full_sz 平均值:142.5 毫秒 RTT full_sz 平均值:0.0 毫秒
     RTT full_sz 标准差:0.0 毫秒 RTT full_sz 标准差:0.0 毫秒

     丢失后确认:0 丢失后确认:0
     累计确认的分段数:0 累计确认的分段数:9
     重复确认:0 重复确认:1
     三重重复包装:0 三重重复包装:0
     最大重新传输次数: 0 最大重新传输次数: 0
     最短重复时间:0.0 毫秒 最短重复时间:0.0 毫秒
     最大重复时间:0.0 毫秒 最大重复时间:0.0 毫秒
     平均重复时间:0.0 毫秒 平均重复时间:0.0 毫秒
     sdv 重新运行时间:0.0 毫秒 sdv 重新运行时间:0.0 毫秒
================================

相关内容