Pamiętam czasy, kiedy do internetu trzeba było dzwonić. Wszystko było piekielnie wolne i płaciło się za czas “on-line”. Moje pierwsze stałe łącze miało przepustowość 115200 kbps (kilobitów na sekundę). Dziwna liczba, ale właśnie takie było ograniczenie połączenia szeregowego między modemem a komputerem. Treści w internecie były oczywiście dostosowane do takich marnych przepustowości, ale i tak z zazdrością patrzyło się na ludzi posiadających łącze “T1”, gdzie przepustowości sięgały pojedynczych megabitów. Tamte czasy dawno minęły, coraz mniej ludzi korzysta z internetu po kablu miedzianym czy telewizyjnym, a coraz więcej ze światłowodu. Od pół roku i ja jestem szczęśliwym posiadaczem światłowodowego internetu. Tak teraz wygląda mój “speedtest”:
Sama przepustowość jest istotna gdy pobieramy dużo treści: np. strumieniowe wideo 4K czy inne dane w dużych pakietach. Na codzień inny parametr jest istotny – czas jaki potrzebuje mały pakiet danych, żeby dotrzeć od serwera do naszego komputera. Każde otwarcie strony internetowej to wymiana tysięcy takich pakietów z różnymi serwerami, ważne więc, żeby ten czas był możliwie najkrótszy. Na obrazku powyżej widać zmierzony ping na poziomie 2 ms – jest to czas od wysłania pakietu przez mój komputer do serwera, który go “odbija” do powrotu to mojego komputera. 2 ms to bardzo mało: 1/500 sekundy. Zacząłem się zastanawiać jak wygląda zależność czasu pinga (pingu?) od lokalizacji serwera. Do testu szybkości speedtest.net zawsze wybiera jeden z najbliższych serwerów, a tych na świecie są tysiące. Można oczywiście ręcznie wybrać kilka odległych, ale kto by się bawił w takie rzeczy ręcznie.
Ze strony http://www.speedtest.net/speedtest-servers.php pobrałem listę wszystkich serwerów. Wybrałem te, dla których podane były współrzędne geograficzne i rozpocząłem pingowanie. Każdego pingowałem 10 razy i wybierałem najlepszy wynik. Każdy testowany serwer przypisałem do kontynentu, naniosłem na mapę i obliczyłem odległość w linii prostej od mojego komputera do serwera. Tu pojawia się pierwszy problem – pakiet z danymi nigdy nie idzie po najkrótszej drodze, tylko po takiej, gdzie są kable. Mało tego, nigdy nie ma gwarancji, że za każdym razem pójdzie po tej samej drodze – na tym polega magia internetu.
Serwery naniosłem na mapę:
A wyniki na wykres:
Prędkość światła w próżni wynosi 299.792.458 m/s co w przybliżeniu daje 300.000 km/s. W światłowodzie prędkość ta jest mniejsza i wynosi ok. 200.000 km/s. Na wykresie narysowałem krzywe odpowiadające kilku wartościom prędkości. Widać, że prędkość przejścia pakietu do ameryki północnej wynosi około 130.000 km/s a do pozostałych kontynentów ok. 100.000 km/s. Dzieje się tak prawdopodobnie dlatego, że po drodze z europu do USA mamy ocean gdzie światłowód leży sobie prosto na dnie. W pozostały kierunkach droga jest bardziej skomplikowana i na lądzie jest dużo węzłów. No właśnie. Po drodze pakiet przechodzi przez wiele węzłów gdzie jest odpowiednio kierowany dalej – to wszystko kosztuje cenny czas!.
Nie publikuję tutaj kodu mojego programu, bo nie jest specjalnie ładny, a sam problem jest stosunkowo prosty. Gdyby jednak ktoś był zainteresowany kodem źródłowym to dajcie znać.
adres |