Cela peut être une question idiote, mais quelques copains et moi avons discuté des limites potentielles de TCP. Nous avons une application qui va écouter les clients (pensez à une passerelle) et acheminer toutes les données des clients connectés via un seul éditeur kafka connecté vers un sujet.
Un de mes amis dit que TCP sera un problème pour cette passerelle car il va établir une nouvelle connexion pour chaque message qu'il envoie (pas kafka mais le protocole de transport sous-jacent lui-même est le problème), nécessitant un nouveau port à chaque fois. Au rythme auquel nous enverrons ces messages clients (gigaoctets), kafka manquera de ports pour lire depuis ??
J'ai fait du développement depuis plusieurs années et je n'en ai jamais entendu parler auparavant et j'aimerais avoir une compréhension de niveau inférieur (que je pensais avoir) du fonctionnement de TCP. Ma compréhension est que lorsque vous établissez une connexion TCP, cette connexion reste ouverte jusqu'à ce qu'elle soit expirée par l'application ou fermée de force par le serveur ou le client. Les données envoyées via cette connexion sont un flux et n'ouvriront / fermeront pas de nouvelles connexions quels que soient les 3 V (volume, vitesse, variété).
En ce qui concerne les ports, un port est utilisé pour la diffusion et le port de descripteur de fichier interne est quelque chose que l'application gère pour la lecture / écriture de clients individuels. Je n'ai jamais compris TCP pour établir de nouvelles connexions pour chaque paquet qu'il écrit.
Je m'excuse à l'avance si cette question n'est pas directe et ou trop vague. Je suis vraiment déconcerté et j'espère que quelqu'un pourrait fournir un peu plus de contexte à ce que disent mes collègues?
SO_REUSEADDR
pour fermer les sockets plus rapidement, augmenter la plage de ports éphémères, etc. De plus TCP_FASTOPEN
, plusieurs bascules au niveau du système d'exploitation peuvent être utilisées pour contourner d'autres limitations bien connues de TCP. Quoi qu'il en soit, il est inutile de discuter des limites de TCP lorsque vous n'avez même pas de charge de travail à tester.