w mojej pracy muszę się wiele nauczyć na wiele tematów. Szczególnie na rynku wirtualizacji Wiele osób jest zazwyczaj dobrze przygotowanych, jeśli chodzi o infrastrukturę, serwery i pamięć masową, ale przekonałem się, że najsłabszym punktem jest wiele razy sieć. Jest kilka tematów, które są niejasne dla wielu, jak Layer2 vs Layer3, BGP, Spanning Tree, ale jest jeden temat, który jest naprawdę ważny nawet dla facetów od infrastruktury, ale jest dla nich prawie nieznany: opóźnienie.
co to jest opóźnienie?
tak szybko, jak to możliwe, nawet prędkość światła nie jest nieskończona. Przejście fotonu z punktu A do punktu B wymaga czasu, a na przykład światło generowane przez słońce dociera do ziemi w ciągu 8 minut. Nasze sieci komputerowe nie są nawet zbliżone do tej prędkości, ponieważ przede wszystkim zwykle nasze połączenia nie są wykonane za pomocą światłowodu (który ostatecznie byłby tak szybki jak światło), ale za pomocą kabli elektrycznych, a więc transmisje przez te media są wolniejsze, ale także dlatego, że istnieje wiele urządzeń między źródłem a miejscem docelowym, które muszą manipulować pakietem. Host źródłowy, przełączniki, routery, zapory sieciowe, host docelowy; każdy „hop” dodaje czas do całkowitego czasu, który pakiet potrzebuje, aby dotrzeć do miejsca docelowego. Możemy zaprojektować tę sytuację tak:
(źródło: https://stackoverflow.com/questions/8682702/how-to-calculate-packet-time-from-latency-and-bandwidth )
tak więc, mówiąc najprościej, opóźnienie to czas potrzebny pakietowi na przejście ze źródła do miejsca docelowego.
w sieci lokalnej łatwo jest zastosować pewne przybliżenie i zadeklarować, że opóźnienie przetwarzania wynosi 0, a także, że wiele przełączników pomiędzy dwoma hostami nie dodaje dodatkowego opóźnienia. W końcu, gdy uruchamiamy polecenie ping, aby sprawdzić, czy host jest podłączony, opóźnienie jest zawsze „poniżej 1 ms” :
z tego powodu nie jest rzadkością obliczanie maksymalnej prędkości transferu, po prostu patrząc na dostępną przepustowość:
– 1 GB łącze ethernet , podzielone przez 8, daje mi 125 MBps
– 10 GB łącze ethernet oznacza 1250 MBps
i tak dalej. A jeśli moja przepustowość wynosi 125mbps, oznacza to, że mogę przesyłać 125MB co sekundę.
dlaczego opóźnienie jest ważne?
bo ignorowanie go wraz z innymi parametrami prowadzi do fałszywych wyników!
spójrz na poprzedni przykład. Nawet w sieci lokalnej, gdzie opóźnienie jest bliskie zeru, istnieją inne parametry, które mogą mieć wpływ na końcową prędkość. Przede wszystkim: rozmiar okna TCP. Nie będę powtarzał tego, co zostało już napisane w doskonały sposób przez innych, więc jeśli chcesz dowiedzieć się więcej, przeczytaj ten post autorstwa Brada Hedlunda. Gdzie jest haczyk? Prędkość łącza, o której zwykle mówimy, to czysta prędkość łącza kablowego. Ale na dodatek, musimy uruchomić wiele protokołów, jeden nad drugim, jak TCP over IP. TCP dzieli dane na pakiety, a ich rozmiar jest podyktowany rozmiarem okna TCP: większa ta wartość, więcej danych może zostać przesłanych w jednej transmisji. Następnie ładunek jest pakowany wewnątrz pakietu, więc są dodatkowe bajty dla każdego pakietu, który ma zostać przesłany, nawet jeśli nie zawierają żadnych danych (jest też jakiś narzut dla podstawowej ramki ethernetowej, pomyśl o całej dyskusji w odniesieniu do ramek Jumbo). Wreszcie, opóźnienie TCP odgrywa swoją rolę, ponieważ mogę przesłać następny pakiet tylko wtedy, gdy poprzedni dotrze do miejsca docelowego, ponieważ Link jest zajęty przesyłaniem innych pakietów.
opóźnienie i rozmiar okna stają się najważniejsze, gdy przechodzimy z sieci lokalnych do sieci publicznych. Tutaj wartość <1ms odchodzi, a my mamy wyższe wartości, które należy wziąć pod uwagę. Wyższe jest opóźnienie, mniejsze to maksymalna” prawdziwa ” przepustowość, którą zobaczę. Weźmy prosty przykład: klient ma łącze 100 Mbps do Internetu i musi przesłać plik 1TB do swojego dostawcy usług.
zwykłe obliczenia teoretyczne byłyby proste:
100 MB / s = 12,5 MB / s
1 TB = 1000 GB = 1000000 MB
1000000 MB / 12,5 MB / s = 80000 sekund = 1333,33 minut = 22,22 godzin lub (d:h:m:s): 22h:13m:20s
ale jeśli spróbujesz wysłać ten plik do swojego dostawcy, nigdy nie zajmie to tego czasu, chyba że ty i twój dostawca usług jesteście połączeni z tym samym łączem ethernet; co oznacza, że w ogóle nie korzystasz z Internetu!
jak poprawnie obliczyć prędkość transferu
obliczyłem poprzednią wartość do dokładnych sekund za pomocą tego miłego narzędzia:
http://wintelguy.com/transfertimecalc.pl
jeśli jednak na to spojrzysz, zobaczysz ten sam „błąd przybliżenia”, o którym mówiłem wcześniej: pod uwagę brany jest tylko rozmiar i przepustowość. Bez rozmiaru okna i bez opóźnień. Ale witryna WintelGuy ma więcej niesamowitych narzędzi, a jeden jest dokładnie tym, czego potrzebujemy:
http://wintelguy.com/wanperf.pl
w tym widać, że każdy ważny parametr jest wymieniony i używany do obliczeń. Powtórzmy te same obliczenia, które robiliśmy wcześniej, ale teraz z nowymi informacjami:
dodaliśmy opóźnienie 40ms i zaakceptowaliśmy pozostałe dwie wartości domyślne (utrata pakietów i MTU). Nie mamy żadnych szans na zmianę MTU za pośrednictwem łącza internetowego, ponieważ istnieje wiele urządzeń między nami a naszymi dostawcami usług, które nie są pod naszą kontrolą. Jest to jeden z powodów, dla których wiele Telco oferuje swoim klientom prywatne łącza MPLS zamiast łączy VPN przez publiczny internet, ponieważ ustawienia połączenia mogą być kontrolowane i dostrajane przez dostawcę (cóż, jest też trochę blokady, ale to inna historia…). Tutaj widać, że obciążenie TCP i opóźnienie już wpływają na rzeczywistą maksymalną przepustowość, która spada do 94,9 Mb / s. Powiedziałbym jednak, że jest to naprawdę dobra sytuacja i może być gorzej: zachowajmy każdy inny parametr jak wcześniej i zwiększ opóźnienie do 150ms:
przepustowość została zmniejszona do 77,8 Mb / s, co oznacza utratę 22% teoretycznej prędkości. I może być jeszcze gorzej: na przykład połączenie ADSL ma większą utratę pakietów, więc jeśli zachowamy 150ms opóźnienia, ale zwiększymy utratę pakietów o 10 razy, otrzymamy to (zignoruj fakt, że żaden ADSL nie może przejść do 100 Mbps, robi się to, aby utrzymać tę samą prędkość we wszystkich przykładach):
utrata pakietów została zwiększona z 0.0001 (1 utracony pakiet na każde przesłane 10000) do 0.001 (1 utracony pakiet na każde przesłane 1000), a sama ta wartość zmniejszyła naszą maksymalną prędkość o 75%!!!
więc następnym razem, gdy zobaczysz, że Twoja nowa błyszcząca linia internetowa nie działa zgodnie z oczekiwaniami, zanim obwinisz swojego dostawcę usług lub oprogramowanie, którego używasz do przesyłania tych danych, lepiej przyjrzyj się swojej sieci. Może się okazać, że te 25Mbps to najszybsza prędkość, jaką możesz uzyskać.