Jak oszacować przepustowość TCP między serwerami
Właśnie zakupiłeś serwer z dedykowanym kanałem, który gwarantuje przepustowość 1 Gbit/s (lub więcej) i z rozczarowaniem stwierdzasz, że transfer plików nie jest tak szybki, jak się spodziewałeś. Zanim napiszesz do pomocy technicznej i zaczniesz szukać problemów z siecią, spróbuj ocenić rzeczywistą przepustowość TCP z jednego hosta do drugiego.
Istnieją dwa najważniejsze czynniki wpływające na udany transfer danych za pośrednictwem protokołu TCP:
- Rozmiar okna TCP - to liczba bajtów, które jedna strona zaakceptuje bez potwierdzenia;
- Opóźnienie transmisji-odbioru (latencja) - czas potrzebny na wysłanie pakietu i potwierdzenie jego dostarczenia.
- Znajomość obu tych rzeczy pozwoli ci obliczyć maksymalną możliwą przepustowość, która może być współdzielona między dwoma hostami, niezależnie od przepustowości.
Wzór na obliczanie przepustowości TCP
Przepustowość TCP (bity/s) = rozmiar okna TCP (bity) / opóźnienie w obie strony (s)
Przeanalizujmy to na prostym przykładzie. Mamy gigabitowe łącze Ethernet między serwerami z opóźnieniem w obie strony wynoszącym 30 ms. Musimy wysłać duży plik z jednego serwera do drugiego za pośrednictwem protokołu FTP. Jakiej rzeczywistej przepustowości możemy się spodziewać?
Najpierw należy przekonwertować rozmiar okna TCP z bajtów na bity. W tym przypadku użyjemy standardowego rozmiaru okna TCP maszyny Windows 64 KB = 65 536 B = 65 536 * 8 = 524 288 bitów.
Następnie należy wziąć rozmiar okna TCP w bitach i podzielić go przez opóźnienie kołowe kanału, wyrażone w sekundach. Dla celów tych obliczeń 30 ms zamienia się w 0,030 s.
Maksymalna przepustowość TCP = 524 288 bitów / 0,030 s = 17 476 266 bps = 17,4 Mbps
Chociaż między dwoma serwerami istnieje gigabitowe połączenie Ethernet, nie można oczekiwać więcej niż 17 Mbit / s podczas przesyłania plików.
Jak możemy przyspieszyć sieć? Odpowiedź jest oczywista: zwiększyć rozmiar okna TCP i/lub zmniejszyć opóźnienie sygnału.
Wynegocjowanie większego rozmiaru okna TCP wymaga indywidualnej ręcznej konfiguracji każdego serwera. To z kolei prowadzi do następującego pytania: jaki jest optymalny rozmiar okna TCP? Aby się tego dowiedzieć, konieczne jest wykonanie odwrotnych obliczeń w oparciu o przepustowość.
Wzór na obliczenie optymalnego rozmiaru okna TCP
Rozmiar okna TCP (bajty) = Rozmiar okna TCP (bity) / 8 = Przepustowość (bity/s) * Opóźnienie w obie strony (s) / 8
W powyższym przykładzie dla gigabitowej trasy Ethernet między serwerami z opóźnieniem w ruchu okrężnym wynoszącym 30 ms uzyskuje się następującą wartość:
1 000 000 bitów/s * 0,030 s = 30 000 000 bitów / 8 = 3 750 000 bajtów.
Innymi słowy, jeśli oba serwery zostaną skonfigurowane dla okna TCP o wielkości 3750 KB, połączenie FTP całkowicie wypełni przepustowość i osiągnie przepustowość 1 Gbit/s.
Należy pamiętać, że zwiększenie rozmiaru okna TCP ma swoje wady.
Po pierwsze, będzie wymagać więcej pamięci do buforowania serwerów, która jest potrzebna do przechowywania niepotwierdzonych danych w przypadku ich obecności.
Po drugie, zwiększony rozmiar okna TCP może skutkować większą liczbą utraconych pakietów, co z kolei wymaga ponownego wysłania całego okna. Może to mieć negatywny wpływ na wydajność. Aby rozwiązać ten problem, stos TCP/IP serwera może aktywować opcję "selektywnego potwierdzania", która domyślnie jest wyłączona.
Aby rozwiązać ten problem, akceleratory WAN - globalne pedały gazu sieciowego - mogą być umieszczone na obu końcach linii. Mogą one wykonać następujące czynności:
- Otworzyć powiększone okno TCP;
- zapewniają możliwość dokładnej optymalizacji protokołu TCP (np. selektywne potwierdzanie tylko między pedałami gazu);
- nie wymagają specjalnej konfiguracji serwera ani dodatkowej pamięci buforowej;
- może wykorzystywać specjalne funkcje warstwy aplikacji modelu OSI (warstwa 7 - dostęp do usług sieciowych) w celu zmniejszenia opóźnienia kołowego.
Opóźnienie
Chcesz zmniejszyć opóźnienie sygnału? Czy w zasadzie można to zrobić? Ponieważ nie możemy pokonać prędkości światła, nie możemy wpłynąć na to, ile czasu zajmuje sygnałowi pokonanie określonej odległości. Najlepszym sposobem na zoptymalizowanie całego systemu jest zainstalowanie akceleratora WAN na każdym końcu linii, który przesyła odebrane pakiety TCP do lokalnego serwera, "oszukując" go w ten sposób co do rzeczywistej szybkości transferu danych. Zamiast czekać na opóźnioną odpowiedź ze zdalnego serwera, lokalny serwer otrzymuje natychmiastowe potwierdzenia z pedału gazu. Oszczędza nam to konieczności dostosowywania rozmiaru okna TCP na samych serwerach. Para urządzeń WAAS wykorzystuje zwiększony rozmiar okna TCP i selektywne potwierdzenia w całym segmencie linii.
Ponadto WAAS skutecznie oczyszcza strumień TCP z nadmiarowych danych, zapewniając niezwykle wysoki poziom kompresji (zagęszczenia). Każdy pedał gazu zapamiętuje poprzednio przeglądane dane. Jeśli zduplikowany fragment pojawi się ponownie, jest on usuwany i zastępowany maleńkim 2-bajtowym znacznikiem. Ten niewielki znacznik jest rozpoznawany przez zdalny pedał gazu, który wstawia oryginalny fragment danych w jego miejsce przed wysłaniem ruchu do lokalnego serwera.
Udowodnionym rezultatem optymalizacji jest wyższa przepustowość między serwerami bez specjalnego dostrajania TCP lokalnych serwerów.
Wzór na obliczenie maksymalnego dopuszczalnego opóźnienia dla danej przepustowości
Przykład. W witrynie między dwoma zdalnymi serwerami należy zagwarantować przepustowość FTP na poziomie 10 Gb/s przy użyciu standardowego rozmiaru okna TCP (64 KB). Jakie jest maksymalne dopuszczalne opóźnienie sygnału?
Opóźnienie w obie strony (ms) = rozmiar okna TCP (bity) / wymagana przepustowość (bps)
524 288 bitów / 10 000 000 bps = 52,4 mikrosekundy
Co robić?
Zasadniczo nie trzeba zwiększać okna TCP ani instalować wzmacniaczy WAN. Wystarczy użyć wielowątkowości i można korzystać z kanału przy 100% jego przepustowości!