Linux

檢測http客戶端往返時間的廉價方法

  • July 18, 2012

我試圖找出一種方法來檢測連接到我伺服器上埠 80 的每個 IP 的往返時間。有什麼好方法可以做到這一點?

有很多連接,ping每個ip是不切實際的。我在想,以某種方式測量伺服器發送 syn/ack 數據包和伺服器接收到它的 ack 之間的時間差。

有沒有辦法便宜地記錄這個?也許使用一些神奇的 tcpdump 過濾器?

本練習的目標是匯總數據併計算是否存在任何路由效率低下的問題。假設一個地區的一個 ISP 可能路由不正確,等等。

FWIW 網路伺服器是 nginx。

$ 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

如果您可以訪問 linux 或 unix 機器1,則應使用tcptrace。您需要做的就是使用wiresharktcpdump將客戶端流量擷取到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. Knoppix Live-CD就可以了
  2. 過濾以僅擷取測試流量
  3. tcptrace如果您使用其他選項,則能夠獲得非常詳細的每個套接字統計資訊…
================================
[mpenning@Bucksnort tcpperf]$ tcptrace -lr willers.pcap
剩餘 1 個 arg,以“willers.pcap”開頭
Ostermann 的 tcptrace——6.6.1 版——2003 年 11 月 19 日,星期三

看到 16522 個數據包,跟踪了 16522 個 TCP 數據包
經過的掛鐘時間:0:00:00.080496, 205252 pkts/sec 分析
跟踪文件經過時間: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
發送的麻袋 pkts:0 發送的麻袋 pkts:0
dsack pkts 發送:0 dsack pkts 發送:0
最大袋數/確認:0 最大袋數/確認:0
發送的唯一字節數:2512 發送的唯一字節數:14336
實際數據包:17 實際數據包:36
實際數據字節:2512 實際數據字節:14336
rexmt 數據包:0 rexmt 數據包:0
rexmt 數據字節:0 rexmt 數據字節:0
zwnd 探測 pkts: 0 zwnd 探測 pkts: 0
zwnd 探測字節:0 zwnd 探測字節:0
亂序包:0 亂序包:0
推送數據包:17 推送數據包:33
發送的 SYN/FIN pkts:1/1 發送的 SYN/FIN pkts:1/0
請求 1323 ws/ts:是/是 請求 1323 ws/ts:是/是
adv 風級:6 adv 風級:1
請求麻袋:是 請求麻袋:是
發送的麻袋:0 發送的麻袋:0
緊急數據包:0 包 緊急數據包:0 包
緊急數據字節:0字節緊急數據字節:0字節
請求的毫秒數:1460 字節請求的毫秒數:1460 字節
最大段大小:792 字節最大段大小:1448 字節
最小 segm 大小:16 字節 最小 segm 大小:32 字節
平均段大小:147 字節 平均段大小:398 字節
最大獲勝廣告:40832 字節最大獲勝廣告:66608 字節
最小獲勝廣告:5888 字節最小獲勝廣告:66608 字節
零贏 adv:0 次 零贏 adv: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 full_sz smpls:1 RTT full_sz smpls:3
RTT full_sz min:142.5 ms RTT full_sz min:0.0 ms
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
segs cum acked: 0 segs 暨 acked: 9
重複確認:0 重複確認:1
三重包裝:0 三重包裝:0
max # retrans: 0 max # retrans: 0
最小回退時間:0.0 ms 最小回退時間:0.0 ms
最大回退時間:0.0 毫秒 最大回退時間:0.0 毫秒
平均回退時間:0.0 毫秒 平均回退時間:0.0 毫秒
sdv 回退時間:0.0 毫秒 sdv 回退時間:0.0 毫秒
================================

引用自:https://serverfault.com/questions/408966