J'ai expérimenté les paramètres TCP sous Linux (avec un noyau 3.5). Concernant essentiellement cette connexion:
Serveur: liaison montante Gigabit dans le centre de données, la bande passante réelle (en raison du partage des liaisons montantes) est d'environ 70 Mo / s lorsqu'elle est testée à partir d'un autre centre de données.
Client: LAN local Gigabit connecté à une fibre de 200 Mbits. La récupération d'un fichier de test atteint en réalité 20 Mo / s.
Latence: environ 50 ms aller-retour.
Le serveur distant est utilisé comme serveur de fichiers pour des fichiers de 10 à 100 Mo. J'ai remarqué qu'en utilisant un initcwnd de 10, le temps de transfert de ces fichiers est fortement affecté par le démarrage lent de TCP, prenant 3,5 secondes pour charger 10 Mo (vitesse maximale atteinte: 3,3 Mo / s) car il démarre lentement puis accélère comme il le souhaite est terminé avant que la vitesse maximale ne soit atteinte. Mon objectif est de régler les temps de chargement minimum de ces fichiers (donc pas le débit brut le plus élevé ni la latence aller-retour la plus basse, je suis prêt à sacrifier les deux si cela diminue le temps réel nécessaire pour charger un fichier)
J'ai donc essayé un calcul simple pour déterminer quel initcwnd idéal devrait être, en ignorant toutes les autres connexions et l'impact possible sur les autres. Le produit de retard de bande passante est de 200 Mbit / s * 50 ms = 10 Mbit ou 1,310,720 octets. Étant donné que l'initcwnd est défini en unités de MSS et en supposant que le MSS est d'environ 1400 octets, cela nécessitera un paramètre de: 1.310.720 / 1400 = 936
Cette valeur est très loin de la valeur par défaut (10 * MSS sous Linux, 64 Ko sous Windows), donc ce n'est pas une bonne idée de la définir comme ceci. Quels sont les inconvénients attendus d'une telle configuration? Par exemple:
- Cela affectera-t-il les autres utilisateurs du même réseau?
- Pourrait-il créer une congestion inacceptable pour d'autres connexions?
- Flood router-buffers quelque part sur le chemin?
- Augmenter l'impact de petites quantités de perte de paquets?
la source
70 MB/s
et non mégabits? Je cherche juste des éclaircissements.Réponses:
La modification de initcwnd affectera:
Sûr.
Pas hors de propos, mais à moins qu'ils ne soient vos routeurs, je me concentrerais sur les problèmes les plus proches de vous.
Bien sûr, il peut le faire.
Le résultat est que cela augmentera le coût de la perte de paquets, à la fois intentionnelle et non intentionnelle. Votre serveur est plus simple que DOS pour quiconque est capable de terminer la prise de contact à 3 voies (quantités importantes de données pour un faible investissement (quantité de données)).
Cela augmentera également les chances qu'un groupe de ces paquets doive être retransmis car l'un des premiers paquets de la rafale sera perdu.
la source
Je ne pense pas que je comprends parfaitement ce que vous demandez, alors voici une tentative de réponse:
Tout d'abord, ce que vous essayez de faire n'a de sens que du côté de l'envoi et non du côté de la réception. C'est-à-dire que vous devez changer le serveur de fichiers et non le récepteur. En supposant que c'est ce que vous faites:
Changer initcwnd (par exemple) 10 signifie que 10 paquets disparaîtront immédiatement. Si tous atteignent leur cible, vous pouvez vous retrouver avec une fenêtre beaucoup plus grande dans le premier RTT en raison du démarrage lent (l'augmentation exponentielle de la vitesse de rotation). Cependant, en cas de perte de paquets, le cwnd sera réduit de moitié et comme vous êtes en train de déborder de 10 paquets, vous aurez une quantité considérable de retransmissions, vous pouvez donc vous retrouver avec plus de problèmes que vous ne le pensez.
Si vous voulez essayer quelque chose de plus agressif et être en quelque sorte "grossier" avec les autres utilisateurs d'Internet, vous pouvez à la place changer l'algorithme de contrôle de la congestion côté serveur. Différents algorithmes gèrent cwnd d'une manière différente. Gardez à l'esprit que cela affectera tous les utilisateurs à moins que votre logiciel côté serveur ne modifie ces connexions par connexion (ce dont je doute fortement). L'avantage ici est que l'algorithme sera en vigueur même après la perte de paquets alors qu'initcwnd ne jouera pas beaucoup de rôle.
/ proc / sys / net / ipv4 / tcp_congestion_control est l'endroit où vous modifiez l'algorithme de contrôle de congestion.
FWIW pour ces petits RTT (50 ms) et pour les fichiers moyens ou grands, l'initcwnd ne devrait pas affecter beaucoup votre vitesse moyenne. S'il n'y a pas de perte de paquets, alors (c'est-à-dire le gros tuyau), cwnd doublera à chaque RTT. Avec RTT = 50 ms sur un gros tuyau, vous adapterez 20 RTT dans la première seconde, ce qui signifie qu'avec initcwnd = 2, vous vous retrouverez avec cwnd = 2 * 2 ^ 20 après 1 seconde, ce qui, je parie, est plus que vous ne pouvez manipuler ;-)
la source