mierzyć jednokierunkowe opóźnienie / jitter / utratę pakietów

10

Dostaję większe opóźnienia i StDev z powodu przeciążenia trasy i utraty pakietów , ale ścieżki do przodu i do tyłu biegną przez różne sieci (np. Jedna to init7.net, a druga he.net), więc bardzo trudno jest ją zrozumieć która sieć lub host jest odpowiedzialny za przeciążenie, utratę pakietów, fluktuację i zwiększone opóźnienie.

Czy istnieje sposób na zawężenie winy po tym, jak naprzód i wstecz mtrnie potrafią wskazać dokładnego winowajcy, a kontakty NOC @ albo nie odpowiadają, albo twierdzą, że nie ponoszą strat na danej ścieżce? (Używam OpenBSD).

Próbowałem nawet zrobić mtrbezpośrednio z niektórymi klientami obu sieci, które mogą doświadczać przeciążenia, ale tak naprawdę nie mogłem znaleźć żadnych problemów w ten sposób, zwłaszcza, że ​​na przykład he.net ma wiele POP i często różne trasy są wybierane między danym wejściem a wyjściem POP, więc kiedy próbuję mtrdotrzeć do ich hostów (takich jak tserv) bezpośrednio przy wyjściu POP, do którego mogę tracić pakiety w ich sieci, inna ścieżka he.net jest osiągana ten sam POP i nie dochodzi do utraty pakietów, co nie świadczy o nic interesującym (poza możliwą sugestią, że rzeczywiście mogą przeciążać niektóre trasy, jednocześnie zapewniając, że inne pozostaną nietknięte, a jednocześnie ignorują żądania NOC @ od klientów niebędących klientami).

cnst
źródło
Czy jakaś odpowiedź ci pomogła? jeśli tak, powinieneś zaakceptować odpowiedź, aby pytanie nie wyskakiwało wiecznie, szukając odpowiedzi. Alternatywnie możesz podać i zaakceptować własną odpowiedź.
Ron Maupin

Odpowiedzi:

9

Jednym ze sposobów na to jest datownik ICMP, który jest milisekund od północy UTC. Ma tę dodatkową zaletę, że niekoniecznie musisz kontrolować oba końce, o ile drugi koniec nie jest zaporą ogniową, istnieje duża szansa, że ​​zadziała.

Jednak, aby mieć wiarygodne pomiary jednokierunkowe, potrzebujesz niezawodnie tego samego czasu na obu końcach. Ponieważ znacznik czasu ICMP ma dokładność tylko 1 ms (co nie jest wystarczające dla wielu aplikacji, ale wystarczające do tego), dość łatwo można znaleźć nawet niewspółpracujące hosty, w których znacznik czasu ICMP dostarczy użytecznych danych.

Jeśli kontrolujesz oba końce, upewnij się, że synchronizujesz NTP tylko z 1 serwerem i tym samym serwerem. Zegar absolutny nie jest bardzo ważny, ważne jest, abyś doświadczył tak blisko czasu, jak to możliwe.

Jeśli znacznik czasu ICMP nie jest wystarczający, bardzo łatwo jest napisać 10 linii ruby ​​/ perl / python lub nawet C, aby wykonać pomiary, gdy kontrolujesz oba końce.

Naprawdę nie mogę zasugerować oprogramowania do wykonywania pomiarów znacznika czasu ICMP jednokierunkowo, hping2 obsługuje wysyłanie znacznika czasu ICMP, ale z jakiegoś powodu nie generuje wartości jednokierunkowych. Napisałem łatkę dla hping2, aby wyświetlała opóźnienia w jedną stronę.

iti
źródło
Wow, twoja hping --icmp-tsdodatkowa arytmetyka jest tak cholernie niesamowita! Zbyt leniwy, aby pobrać źródła i ponownie skompilować plik binarny, dostałem wersję powłoki twojej łatki hping ( stackoverflow.com/q/20172028/1122270 ) i pokazuje ona prawie stały czas na drodze init7 do hetznera, i wariancja na całej mapie ze ścieżką he.net od hetzner! W końcu mam ostateczny dowód, że init7 mówi prawdę! Chociaż argumentowałbym przeciwko używaniu tego samego serwera ntp tylko do tego: upewnij się, że ntpd żyje (nie musiałem w ogóle zmieniać żadnych ustawień, ale wartości wyglądają rozsądnie).
cnst
1
Jeśli zależy Ci na dokładnym czasie ściennym, potrzebujesz co najmniej 3 serwerów NTP (aby móc wykryć fałszywy znacznik, 2 serwery NTP są najgorszą opcją, jaką możesz zrobić). Ale tutaj nie zależy nam na czasie na ścianie, zależy nam na dokładnym tykaniu na tym samym zegarze, niezależnie od ściany. Tak więc w przypadku pomiaru jednokierunkowego optymalne wyniki pochodzą z dokładnego zegara, a czas na ścianie nie ma znaczenia. Cieszymy się, że masz wyniki!
ytti