Linux
檢測http客戶端往返時間的廉價方法
我試圖找出一種方法來檢測連接到我伺服器上埠 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。您需要做的就是使用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)
結束註釋:
- Knoppix Live-CD就可以了
- 過濾以僅擷取測試流量
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 毫秒 ================================