To może być głupie pytanie, ale ja i kilku znajomych dyskutowaliśmy o potencjalnych ograniczeniach TCP. Mamy aplikację, która będzie nasłuchiwała klientów (pomyśl o bramie) i kierowała dane wszystkich połączonych klientów przez jednego podłączonego wydawcę kafka do jednego tematu.
Jeden z moich znajomych mówi, że TCP będzie problemem dla tej bramy, ponieważ będzie ustanawiać nowe połączenie dla każdej wysyłanej wiadomości (nie kafka, ale sam protokół transportowy stanowi problem), wymagając za każdym razem nowego portu. W tempie, w jakim będziemy wysyłać te wiadomości klientów (gigabajty), kafce zabraknie portów do odczytu?
Robiłem prace rozwojowe od kilku lat i nigdy wcześniej o tym nie słyszałem i chciałbym uzyskać niższy poziom zrozumienia (jak mi się zdawało), jak działa TCP. Rozumiem, że po ustanowieniu połączenia TCP połączenie to pozostaje otwarte, dopóki nie zostanie przekroczone przez aplikację lub nie zostanie przymusowo zamknięte przez serwer lub klienta. Dane przesyłane przez to połączenie są strumieniem i nie otwierają / zamykają nowych połączeń niezależnie od 3 V (objętość, prędkość, różnorodność).
Jeśli chodzi o porty, jeden port służy do rozgłaszania, a wewnętrzny port deskryptora pliku to aplikacja zarządzana przez program do odczytu / zapisu poszczególnych klientów. Nigdy nie rozumiałem, jak TCP ustanawia nowe połączenia dla każdego zapisywanego pakietu.
Z góry przepraszam, jeśli to pytanie nie jest bezpośrednie i zbyt niejasne. Naprawdę jestem zaskoczony i mam nadzieję, że ktoś może zapewnić więcej kontekstu do tego, co mówią moi koledzy?
SO_REUSEADDR
szybsze zamykanie gniazd, zwiększanie zasięgu portów efemerycznych itp. Ponadto TCP_FASTOPEN
można użyć kilku przełączników na poziomie systemu operacyjnego, aby obejść inne dobrze znane ograniczenia TCP. Tak czy inaczej, nie ma sensu dyskutować o ograniczeniach TCP, gdy nie masz nawet obciążenia do przetestowania.