Дешевый способ определить время клиента для 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)
ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ:
- Knoppix Live-CD подойдет
- Фильтрация только для захвата тестового трафика.
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 мс ================================