Дешевый способ определить время клиента для http

Я пытаюсь найти способ определения времени прохождения сигнала в обоих направлениях для каждого IP-адреса, который подключается к порту 80 на моем сервере. Какой хороший способ сделать это?

Существует много связей, и пинг каждого ip не практичен. Я думал, как-то измерить разницу во времени между тем, когда сервер отправляет пакет syn / ack, и когда сервер получает подтверждение для него.

Есть ли способ записать это дешево? Может быть, использовать какой-то волшебный фильтр tcpdump?

Цель этого упражнения - объединить данные и данные, если есть какие-либо недостатки маршрутизации. Скажем, один провайдер в одном регионе может быть неправильно маршрутизировать и т. Д.

FWIW веб-сервер nginx.

2 ответа

$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 Это создаст два текстовых файла, и средняя статистика RTT для всех соединений в этом pcap будет показана в нижней части под названием 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 аргумент, начиная с с 'willers.pcap' tcptrace Остерманна - версия 6.6.1 - ср. 19 ноября 2003 г. Просмотрено 16522 пакетов, прослежено 16522 TCP-пакетов, истекшее время Wallclock: 0:00:00.080496, 205252 pkts/sec, проанализированное время трассировки: 0:03:21.754962 Информация о TCP-соединении: 200 трассированных TCP-соединений:
TCP-соединение 1: хост c:        myhost.local:44781 хост d: willers.local: 22 полных conn: RESET    (SYNs: 2)  (FINS: 1) первый пакет: Вт 31 мая 22:52:24.154801 2011 последний пакет: вт 31 мая 22:52:25.668430 2011 истекшее время:  0:00:01.513628 всего пакетов: 73 имя файла:      willers.pcap
   c->d:                              d->c: всего пакетов:            34 всего пакетов:            39 отправленных отправок: 4 отправленных сброса: отправлено 0 подтвержденных пакетов: отправлено 29 подтвержденных пакетов: отправлено 39 чистых подтверждений: отправлено 11 подтвержденных отправлений: отправлено 2 снятых пакета: отправлено 0 отправленных пакетов: отправлено 0 пакетов отправлено: 0 отправлено отправлено pkts: 0 максимум sack blks/ack:         0           max sack blks/ack:         0 отправлено уникальных байтов: отправлено 2512 уникальных байтов:     14336 фактических данных pkts:         17 фактических данных:         36 байтов фактических данных:      2512 фактических байтов данных:     14336 пакетов данных rexmt: 0 пакетов данных rexmt: 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
     req 1323 ws/ts:          Y/Y Треб. 1323 Вт / тс: Г / г. Сдвиг ветра:            6 Сд. ветра: 1 Треб. мешок: Y Треб. мешка: Y Отправлено мешков: 0 отправлено: 0 отправлено срочных данных: 0 введено срочных данных: 0 отправлено срочных байтов данных: 0 байтов срочных данных: 0 байтов mss запрошено:          1460 байтов mss запрошено:          1460 байтов максимальный размер сегмента:           792 байта максимальный размер сегмента:          1448 байтов минимальный размер сегмента:            16 байтов минимальный размер сегмента: 32 байта avg размер сегмента:           147 байтов avg размер сегмента:           398 байт, максимальный выигрыш adv:           40832 байта, максимальный выигрыш adv:           66608 bytes
     min win adv:            5888 bytes     min win adv:           66608 bytes нулевой win adv: 0 раз нулевой win adv: 0 раз avg win adv:           14035 bytes     avg win adv:           66608 байт начальное окно: 32 по начальное окно tes: начальное окно 40 байт: 1 начальное окно pkts: 1 длина потока ttl:      2512 байт длина потока ttl: пропущенные данные NA: пропущенные данные 0 байтов: усеченные данные NA: усеченные данные 0 байт: усеченные пакеты 0 байтов: 0 pkts усеченные пакеты: 0 pkts время xmit данных:        1.181 с время xmit данных: 1,236 с макс. время простоя:          196,9 мс макс. время простоя:          196,9 мс пропускная способность:             1660 бит / с пропускная способность:             9471 б / с 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 мс RTT от 3WHS:          80,8 мс RTT от 3WHS:           0,0 мс RTT full_sz smpls:         1           RTT full_sz smpls:         3
     RTT full_sz min:       142,5 мс RTT full_sz min:         0,0 мс RTT full_sz max:       142,5 мс RTT full_sz max:         0,0 мс RTT full_sz avg:       142,5 мс RTT full_sz avg:         0,0 мс RTT full_sz stdev:       0,0 мс RTT full_sz stdev:       0,0 мс подтверждений после потери: 0 подтверждений после потери: 0 подтвержденных сегментов: 0 подтвержденных сегментов: 9 повторных подтверждений: 0 повторных подтверждений: 1 тройных дублировок: 0 тройных дублирования acks:            0
     max # retrans:             0           max # retrans:             0
     min время повторения: 0,0 мс min время повторения: 0,0 мс максимальное время повторения: 0,0 мс максимальное время повторения: 0,0 мс среднее время повторения: 0,0 мс среднее время повторения: 0,0 мс SDV время повтора: 0,0 мсек время ожидания SDV: 0,0 мс ================================ 
Другие вопросы по тегам