Це може бути дурним питанням, але я та кілька приятелів обговорювали потенційні обмеження TCP. У нас є додаток, який збирається слухати клієнтів (придумайте шлюз) і спрямовує всі дані підключених клієнтів через одного підключеного видавця kafka до однієї теми.
Один з моїх приятелів говорить, що TCP буде проблемою для цього шлюзу, оскільки він буде встановлювати нове з'єднання для кожного повідомлення, яке він надсилає (не кафка, а сам базовий протокол транспортування - це проблема), вимагаючи кожного порту кожного разу. За швидкістю, коли ми будемо надсилати цим клієнтам повідомлення (гігабайти), у кафки не вистачить портів для читання ??
Я займався розробкою протягом декількох років і ніколи раніше про це не чув і хотів би зрозуміти нижчий рівень (як я вважав, що маю) того, як працює TCP. Я розумію, що коли ви встановлюєте TCP-з'єднання, це з'єднання залишається відкритим, поки його програма не вимкне або примусово закриває або сервер, або клієнт. Дані, що надсилаються через це з'єднання, є потоком і не відкриватимуть / закриватимуть нові з'єднання незалежно від 3 V (об'єм, швидкість, різноманітність).
Що стосується портів, один порт використовується для трансляції, а внутрішній порт дескриптора файлів - це те, що програма управляє для читання / запису окремих клієнтів. Я ніколи не розумів TCP для встановлення нових з'єднань для кожного пакету, який він пише.
Прошу вибачення заздалегідь, якщо це питання не є прямим і або занадто розпливчастим. Я справді збентежений і сподіваюся, що хтось може дати ще якийсь контекст тому, що говорять мої колеги?
SO_REUSEADDR
для швидшого закриття сокетів, збільшення діапазону ефемерних портів тощо. Крім того, TCP_FASTOPEN
кілька перемикачів на рівні ОС можна використовувати для подолання інших відомих обмежень TCP. Так чи інакше, немає сенсу обговорювати обмеження TCP, коли у вас навіть немає навантаження для тестування.