Eksperymentowałem z parametrami TCP w Linuksie (z jądrem 3.5). Zasadniczo dotyczące tego połączenia:
Serwer: Gigabitowe łącze wysyłające w centrum danych, rzeczywista przepustowość (ze względu na współdzielenie łącza wysyłającego) wynosi około 70 MB / s podczas testowania z innego centrum danych.
Klient: Gigabitowa lokalna sieć LAN podłączona do światłowodu 200 Mb. Pobieranie pliku testowego faktycznie osiąga 20 MB / s.
Opóźnienie: około 50ms w obie strony.
Serwer zdalny służy jako serwer plików dla plików w zakresie od 10 do 100 MB. Zauważyłem, że użycie initcwnd 10 ma duży wpływ na czas przesyłania tych plików przez powolny start TCP, który zajmuje 3,5 sekundy, aby załadować 10 Mb (prędkość maksymalna osiągnięta: 3,3 MB / s), ponieważ uruchamia się powoli, a następnie przyspiesza, jednak jest zakończone przed osiągnięciem maksymalnej prędkości. Moim celem jest dostrojenie się do minimalnych czasów ładowania tych plików (więc nie najwyższa nieprzetworzona przepustowość lub najniższe opóźnienie w obie strony, jestem gotów poświęcić oba, jeśli skróci to rzeczywisty czas potrzebny do załadowania pliku)
Próbowałem więc prostego obliczenia, aby określić, jaki powinien być idealny initcwnd, ignorując wszelkie inne połączenia i możliwy wpływ na innych. Produkt z opóźnieniem przepustowości wynosi 200 Mbit / s * 50 ms = 10 Mbit lub 1,310,720 bajtów. Biorąc pod uwagę, że initcwnd jest ustawiony w jednostkach MSS i przy założeniu, że MSS ma około 1400 bajtów, będzie to wymagało ustawienia: 1.310.720 / 1400 = 936
Ta wartość jest bardzo daleka od domyślnej (10 * MSS w Linuksie, 64kb w Windows), więc nie jest dobrym pomysłem ustawienie jej w ten sposób. Jakie są oczekiwane wady takiej konfiguracji? Na przykład:
- Czy wpłynie to na innych użytkowników tej samej sieci?
- Czy może to powodować niedopuszczalne zatory dla innych połączeń?
- Zalewasz bufory routerów gdzieś na ścieżce?
- Zwiększyć wpływ niewielkiej utraty pakietów?
70 MB/s
a nie megabajty? Po prostu szukam wyjaśnień.