2015-04-19 2 views
1

Je suis intéressé par la création d'un utilitaire de contrôle de la bande passante et j'ai besoin de limiter dynamiquement le trafic sortant ou entrant. Pour ce faire, je pourrais utiliser des pipes ipfw, mais cela crée une dépendance sur ipfw. Comment les programmes comme ipfw contrôlent-ils la bande passante, au niveau syscall/socket? Mon objectif est de mettre en œuvre des fonctionnalités similaires, adaptées à mes besoins spécifiques.Comment fonctionne la limitation de bande passante (avec, disons, ipfw)?

Répondre

1

Tous les limiteurs de bande passante fonctionnent sur un principe simple - en filtrant (en laissant tomber) les paquets. La mise en œuvre est toutefois beaucoup plus complexe et nécessite une bonne connaissance de la pile TCP/IP et des conséquences du filtrage des différents types de trafic.

Les limiteurs de bande passante sont modélisés sur quelque chose appelé un seau à jetons. Les jetons (qui représentent les données à envoyer ou à recevoir) sont ajoutés au compartiment à intervalles réguliers. Comme le godet a une capacité limitée si le godet est plein, les jetons nouveaux sont ignorés (ils débordent). Ce compartiment est utilisé pour gérer la quantité de trafic. S'il y a suffisamment de jetons dans le compartiment, le nombre de jetons est réduit pour une quantité appropriée (proportionnelle à la taille du paquet) et le paquet est envoyé ou reçu. S'il n'y a pas assez de jetons dans le compartiment, le paquet est rejeté. C'est une explication de base, lisez plus sur wiki ou une autre ressource.

Il existe deux types de base de la gestion de quantité de trafic - police et façonner. La différence fondamentale entre les deux est qu'un shaper a une file d'attente ou un tampon qui peut contenir une certaine quantité de données. Si les paquets ne peuvent pas être envoyés immédiatement en raison du faible nombre de jetons, les paquets sont placés dans ce tampon et sont envoyés après qu'il y ait suffisamment de jetons. Cette technique est couramment utilisée pour le trafic sortant alors que la police est utilisée pour le trafic entrant. Après cela, vous devriez en savoir plus sur les différents mécanismes du seau à jetons, comment éviter la synchronisation globale des flux TCP, quels sont les effets de RED/WRED sur le trafic non TCP, et beaucoup d'autres choses liées aux files d'attente et QoS. En d'autres termes, je pense que la satisfaction d'une dépendance est plus facile que la mise en œuvre de tout cela. Je vous suggère donc d'utiliser les outils qui fonctionnent déjà et de créer ce dont vous avez besoin.

+0

Donc, il n'est pas possible d'avoir une limitation de la bande passante du trafic entrant sans laisser tomber les paquets? En supposant que nous utilisons TCP, l'hôte doit renvoyer les paquets parce qu'il n'a reçu aucun ACK? –