Questa potrebbe essere una domanda sciocca, ma io e pochi amici abbiamo discusso dei potenziali limiti di TCP. Abbiamo un'applicazione che ascolterà i client (pensa a un gateway) e instraderà tutti i dati dei client connessi attraverso un singolo editore kafka connesso a un argomento.
Uno dei miei amici sta dicendo che TCP sarà un problema per questo gateway perché stabilirà una nuova connessione per ogni messaggio che invia (non kafka ma lo stesso protocollo di trasporto sottostante è il problema), che richiede una nuova porta ogni volta. Alla velocità in cui invieremo questi messaggi client (gigabyte), kafka esaurirà le porte da cui leggere ??
Ho fatto lo sviluppo per diversi anni e non ne ho mai sentito parlare prima e vorrei avere una comprensione di livello inferiore (che pensavo di avere) su come funziona TCP. La mia comprensione è che quando si stabilisce una connessione TCP, tale connessione rimane aperta fino a quando non viene scaduta dall'applicazione o chiusa forzatamente dal server o dal client. I dati inviati tramite questa connessione sono uno stream e non apriranno / chiuderanno nuove connessioni indipendentemente dai 3 V (volume, velocità, varietà).
Per quanto riguarda le porte, una porta viene utilizzata per la trasmissione e la porta del descrittore di file interno è qualcosa che l'applicazione gestisce per la lettura / scrittura dei singoli client. Non ho mai capito che TCP stabilisse nuove connessioni per ogni pacchetto che scrive.
Mi scuso in anticipo se questa domanda non è diretta e o troppo vaga. Sono davvero sconcertato e spero che qualcuno possa fornire un po 'più di contesto a ciò che dicono i miei colleghi?
SO_REUSEADDR
per chiudere più rapidamente socket, aumentare la gamma di porte effimere ecc. Inoltre, è TCP_FASTOPEN
possibile utilizzare diversi interruttori a livello di sistema operativo per aggirare altre limitazioni ben note di TCP. In ogni caso, non ha senso discutere le limitazioni di TCP quando non si ha nemmeno un carico di lavoro su cui testare.