ping -t
Kazdy wie, ze ping.exe uruchomiony z parametrem -t wysyla pakiety, i wysyla, i wysyla, i wysyla...
Wedlug dokumentacji - bez konca. Tymczasem prawda jest inna. Zamiast wysylac w nieskonczonosc, ping.exe wysle "tylko" 4294967295 pakietów.
Minimalny (i niezmienialny!) odstep miedzy pakietami wynosi 1s. Czyli zamiast wiecznosc, cala zabawa potrwa ~135 lat.
Czy to wazne? Chyba nie... za to ciekawe i a nuz przyda sie w jakims konkursie... ;))
Autor: Grzegorz Tworek
Comments
Anonymous
January 01, 2003
Wiadomo ze ver. 32-bit (2^32) wysle 4294967295, a ver. 64-bit (2^64) wysle az 18446744073709551615 O ile wiem, wersja 64bit też używa w tym miejscu uint.Anonymous
January 01, 2003
Jeśli już wchodzisz w takie zbędne 'szczegóły' to pominałęś fakt, że ping nie jest wysyłany DOKŁADNIE co sekundę, tylko za każdym razem minimalnie później, więc słówko 'niezmienialny' jest zdecydowanie nie na miejscu :P Nie do końca. Czas powrotu pinga jest za każdym razem odejmowany od tej niezmienialnej sekundy, więc to opóźnienie to naprawdę nieduża wartość. Poza tym, napisałem że sekunda to czas minimalny. Może być więcej, wystarczy że coś nie odpowiada na pinga....Anonymous
January 01, 2003
ping.exe ma 15360 bajtów. Można go poprawić i zapewniam Cię, że to w tym przypadku nie kwestia tego, że nikt nie potrafi. Tylko czy dystrybuując poprawkę z nowymi binariami do milionów komputerów nie zajmie się trochę więcej "cennych bajtów"? ;))) Błędy były i będą. Tak samo jak były i będą sytuacje, w których co innego pisze się w dokumentacji dla użytkowników a co innego w kodzie. Wiedzieć o takich sytuacjach warto. A czy warto do tego robić jakieś zamieszanie - odpowiedz sobie sam :)Anonymous
January 01, 2003
CO z tego z 135 lat skoro windows wytrzyma z tydzien :_) Może źle zaistalowałeś? Bo mój rekord to ponad dwa lata ciągłej pracy jako serwer plików w firmie. ;))Anonymous
January 01, 2003
ping (i w ogóle ICMP w Windows) próbuje dla każdego powracającego pakietu echo dopasować żądanie, dla którego ten pakiet wrócił. Jest tabela żądań i jak coś wróci - poszukiwane w niej są dane, które pozwalają na stwierdzenie kto był sprawcą. Każde żądanie ma w polu StartTime zapisany czas wysłania. Jak pakiet powraca, to od bieżącego czasu odejmowany jest czas wysłania i mamy czas wędrówki pakietu. Teoria jest prosta. Problem zaczyna się przy praktyce. Konkretnie podczas pomiaru czasu. Metod jest wiele, ale używana jest superdokładna funkcja KeQueryPerformanceCounter. Funkcja ta opiera się na zliczaniu sumy "tyknięć" zegara CPU. Problem w tym, że wielordzeniowe procesory AMD mają własny pogląd na ten temat i w zależności od tego, do którego rdzenia trafią rozkazy związane z obsługą KeQueryPerformanceCounter, odpowiedzi przychodzą różne. W efekcie, ping, który swobodnie między rdzeniami sobie wędruje, może od jednego rdzenia dostać czas wysłania późniejszy niż od drugiego czas dotarcia odpowiedzi. Odjęcie tych wartości daje ujemny czas wędrówki pakietu. Nie mam pod ręką komputera na którym pojawiałby się taki błąd, ale prostą drogą obejścia problemu powinno być zmienienie affinity dla procesu ping.exe tak, żeby wykonywał się tylko na jednym rdzeniu. Ewentualnie można żonglować PerfEnablePackageIdle ale wydaje mi się, że to może skutkować zwiększonym poborem energii podczas bezczynności, co z kolei może być bolesne w laptopach.Anonymous
March 18, 2008
Znaczy, nie umiecie napisać programu tak, że działa jak w dokumentacji, i zamiast to poprawić - rozprawiacie o tym w internecie, zajmując cenne kilobajty na tekst równie sensowny jak ten komentarz? Podziwiam, podziwiam...Anonymous
March 19, 2008
clondike, widzę, że już nie masz się czego przyczepić. Daj sobie na wstrzymanie człowieku. Jeśli ograniczenie długości ping -t do 135 lat traktujesz jako błąd to lepiej puknij się w czółko i weź jakieś ziółka na uspokojenie. Ech.Anonymous
March 19, 2008
Nie można tego zmienić, bo wszystkie programy które liczą na to, że ping przestanie działać po 135 latach zwyczajnie trzeba by poprawiać.Anonymous
March 19, 2008
Jeśli już wchodzisz w takie zbędne 'szczegóły' to pominałęś fakt, że ping nie jest wysyłany DOKŁADNIE co sekundę, tylko za każdym razem minimalnie później, więc słówko 'niezmienialny' jest zdecydowanie nie na miejscu :PAnonymous
March 19, 2008
Wiadomo ze ver. 32-bit (2^32) wysle 4294967295, a ver. 64-bit (2^64) wysle az 18446744073709551615. Anyway, ciekawe lol.Anonymous
March 19, 2008
CO z tego z 135 lat skoro windows wytrzyma z tydzien :_)Anonymous
March 19, 2008
Wasza przeglądarka (IE) nie radzi sobie w tym szablonem bloga. Komiczne :)Anonymous
April 20, 2008
ping pingiem a co jak mi wyskakuje minusowy? gdzieś kiedyś czytałem o tym ale nie moge teraz tego znaleźć google wywala tylko chucka norrisa który gra w call of duty znacie lekarstwo? napiszcie na maila time=-1ms np...Anonymous
May 22, 2008
jakoś nikt jeszcze nie powiedział że dla człowieka który ogółem biorąc żyje dość krótko ( porównajcie z jakimś żółwikiem czy sekwoją ) 135 lat to już wieczność, gdyż zgodnie z twierdzeniami prawie każdej religii po takim czasie zacznie "życie wieczne" =DAnonymous
February 21, 2009
Na stronie znajduje się test prędkości sieci wraz z pomiarem czasu odpowiedzi PING oraz mierzeniem maksymalnej liczby połączeń.