Auteur Sujet: Recherche lib Stack TCP en C pour gérer 80 millions de session TCP  (Lu 437 fois)

0 Membres et 1 Invité sur ce sujet

levieuxatorange

  • Expert Orange
  • Expert
  • *
  • Messages: 262
Hello tous

Bon, je me trouve vers vous en désespoir de cause après de longue recherche sur le NET, dans les GIT sans succès.

Je suis en train de développer pour des tests un outils permettant de gérer 80 millions (pour démarrer, idéalement on voudrait 8 fois cela ...) en parallèle avec du trafic effectif sur toutes les sessions.

J'ai un truc qui marche sur la première séquence droite SYN/SYNACK/ACK mais j'ai un peu la flemme de réécrire un stack TCP complet. .. rien de bloquant mais j'ai le sentiment de réinventer l'eau tiède.

Il existe plein de stack sur le WEB, mais c'est toujours orienté en mode "gestion synchrone de la soquet sur un thread"
Comme je suis sur un socle DPDK, GoLang n'est pas possible. Et même là j'ai un doute sur le 80 millions de "goroutines"

Là autant dire que cela va pas le faire et que je recherche quelque chose :
- full asynchrone (un thread doit être capable de gérer moult session
- complet car je maltraite un équipement et si il fait n'importe quoi je dois pouvoir le détecter (le pourquoi je n'utilise pas T-REX sur DPDK)
- thread safe

Des idées ?

LeVieux

artemus24

  • Abonné SFR fibre FttH
  • *
  • Messages: 2 169
  • Montignac Lascaux (24)

levieuxatorange

  • Expert Orange
  • Expert
  • *
  • Messages: 262
Recherche lib Stack TCP en C pour gérer 80 millions de session TCP
« Réponse #2 le: 22 août 2025 à 15:58:53 »
Salut LeVieuxAtOrangee.

mTCP: a Highly Scalable User-level TCP Stack  for Multicore Systems.
Merci je vais regarder plus en profondeur.

Pas le cadre dans lequel je comptais faire cela, mais je vais voir, c'est un gros et bon morceau de code celui là ...

Levieux

pju91

  • Abonné Free fibre
  • *
  • Messages: 1 042
  • 91
Recherche lib Stack TCP en C pour gérer 80 millions de session TCP
« Réponse #3 le: 23 août 2025 à 18:38:02 »
Si c'est ça https://github.com/mtcp-stack/mtcp, ça ne paraît plus très actif :(

Question pour ma curiosité personnelle (désolé, ma connaissance des protocoles est très ancienne) : comment penses-tu gérer des millions de connexions "clientes" sur une (seule ?) machine générant les sessions compte tenu de la limitation du nombre de ports TCP utilisables (< 2^16) ? Vas-tu multiplier les adresses IP secondaires/virtuelles sur l'émetteur ? Ca va en faire un paquet ...

levieuxatorange

  • Expert Orange
  • Expert
  • *
  • Messages: 262
Recherche lib Stack TCP en C pour gérer 80 millions de session TCP
« Réponse #4 le: Aujourd'hui à 09:03:05 »
Si c'est ça https://github.com/mtcp-stack/mtcp, ça ne paraît plus très actif :(

Question pour ma curiosité personnelle (désolé, ma connaissance des protocoles est très ancienne) : comment penses-tu gérer des millions de connexions "clientes" sur une (seule ?) machine générant les sessions compte tenu de la limitation du nombre de ports TCP utilisables (< 2^16) ? Vas-tu multiplier les adresses IP secondaires/virtuelles sur l'émetteur ? Ca va en faire un paquet ...
Hello

C'est bien justement le soucis.. C'est impossible de faire cela au niveau OS.
Donc soit on multiplie les machines "à l'infini" soit on gère cela hostless directement protocolaire ...
En python j'ai fait un truc pour tunner les BNG sur la partie DHCP v4v6, 64K clients dual stack, cela représente 128K stack IPs. les injecteurs HARDWARE qui lancent un thread par stack, comment dire, ils n'ont pas voulu (et c'est pas une question de prix, j'ai accès à des machine couteuses ...)
C'est grosso modo écrire un stack IP avec un contexte externe au stack, contexte le plus petit possible pour pouvoir multiplier les contextes.
Vu le nb de trucs en potentiel timeout et avec des timers, la gestion du temps est aussi un des gros gros truc difficile. Le résultat n'est d'ailleurs pas temps réel, mais plutôt "temps réel mou" ...

En python je visais "petit" (64 K client dual stack) là je veux changer d'échelle et donc passer en C + DPDK.

Une contrainte cependant, au niveau routage, il faut que la machine qui fasse cela soit destinataire des paquets pour toutes les plages d'IPs.

Là j'ai un POC sur une boitier à 300 € ... sur un stack incomplet je tiens 500K sessions TCP secondes, mais le stack (surtout TCP, la base IP qui fait PING (et même pas ARP, c'est géré ailleurs par le HOP précédent) est totalement incomplet d'où ma recherche.

Je me demande si une lib FSM en "include only en C Only (cause DPDK... et mon niveau de C++ qui date d'il y a 30 ans ...)" avec la même problématique d'avoir un moteur pour x milliers de contexte existe. C'est un peu spécifique comme cas d'usage ...
Des idées la dessus aussi ??

LeVieux