Ostatnio zdaliśmy sobie sprawę z problemu z połączeniem TCP, który ogranicza się głównie do użytkowników komputerów Mac i Linux, którzy przeglądają nasze witryny.
Z perspektywy użytkownika przedstawia się jako bardzo długi czas połączenia z naszymi stronami internetowymi (> 11 sekund).
Udało nam się wyśledzić techniczną sygnaturę tego problemu, ale nie możemy zrozumieć, dlaczego tak się dzieje ani jak go naprawić.
Zasadniczo dzieje się tak, że komputer klienta wysyła pakiet SYN w celu nawiązania połączenia TCP, a serwer sieciowy go odbiera, ale nie odpowiada pakietem SYN / ACK. Po tym, jak klient wysłał wiele pakietów SYN, serwer w końcu odpowiada pakietem SYN / ACK i wszystko jest w porządku dla pozostałej części połączenia.
I, oczywiście, przyczyna problemu: jest sporadyczna i nie zdarza się cały czas (chociaż zdarza się to między 10-30% czasu)
Używamy Fedory 12 Linux jako systemu operacyjnego i Nginx jako serwera WWW.
Zrzut ekranu z analizy wireshark
Aktualizacja:
Wyłączenie skalowania okna na kliencie zatrzymało problem. Teraz potrzebuję tylko rozwiązania po stronie serwera (nie możemy zmusić wszystkich klientów do robienia tego) :)
Ostatnia aktualizacja:
Rozwiązaniem było wyłączenie skalowania okna TCP i znaczników czasu TCP na naszych serwerach, które są publicznie dostępne.