2010-10-04 6 views
4

Sous Linux, comment définir la taille de segment maximale autorisée sur une connexion TCP? Je dois définir ceci pour une application que je n'ai pas écrite (donc je ne peux pas utiliser setsockopt pour le faire). Je dois placer ceci AU-DESSUS du mtu dans la pile de réseau.Comment définir la taille maximale du segment TCP maximum sous Linux?

J'ai deux flux partageant la même connexion réseau. On envoie périodiquement de petits paquets, qui nécessitent une latence minimale absolue. L'autre envoie des tonnes de données - J'utilise SCP pour simuler ce lien.

J'ai mis en place le contrôle du trafic (tc) pour donner priorité au trafic de latence minimum. Le problème que je rencontre, cependant, est que les paquets TCP qui descendent de SCP finissent avec des tailles allant jusqu'à 64K bytes. Oui, ils sont divisés en paquets plus petits basés sur mtu, mais cela se produit malheureusement APRÈS la priorisation des paquets. Ainsi, mon paquet à faible latence est bloqué derrière jusqu'à 64K octets de trafic SCP.

This article indique que sous Windows, vous pouvez définir cette valeur.

Y at-il quelque chose sur Linux que je peux définir? J'ai essayé ip route et iptables, mais ceux-ci sont appliqués trop bas dans la pile réseau. J'ai besoin de limiter la taille du paquet TCP avant tc, donc il peut donner la priorité aux paquets de haute priorité de manière appropriée.

+0

J'ai du mal à croire que les paquets finissent avec 64k dans la file d'attente tc, tc ne fonctionne pas au niveau TCP, il se soucie des paquets, pas des segments TCP – nos

+0

Je suis d'accord. De ma lecture les segments de TCP devraient être cassés avant tc. Cependant, ce n'est pas ce que je vois (à la fois dans la latence et dans tcpdump). Lorsqu'un segment TCP volumineux s'éteint, il retarde le canal prioritaire jusqu'à ce que tous les segments (jusqu'à 64 Ko) du grand segment soient envoyés. – Eric

Répondre

2

La limite supérieure du MSS TCP annoncé est la MTU de la première route de saut. Si vous voyez des segments de 64k, cela tend à indiquer que la MTU du premier tronçon est trop grande - utilisez-vous un bouclage ou quelque chose à tester?

+0

Non. Le premier saut MTU est 1500. Je vois les gros paquets dans une sortie tcpdump (du côté de la transmission). Si je lance aussi un tcpdump du côté réception, je vois les paquets volumineux brisés en paquets de 1500 octets. – Eric

0

Vous avez définitivement mal diagnostiqué le problème; comme quelqu'un d'autre l'a fait remarquer, tc ne voit pas les paquets TCP, il voit les paquets IP, et ils seraient déjà dans les morceaux à ce moment-là.

Vous rencontrez probablement bufferbloat: vous surchargez votre file d'attente sortante dans un périphérique totalement séparé (probablement un modem DSL ou un modem câble). La seule solution consiste à dire à tc de limiter votre bande passante sortante à moins de la bande passante du modem, par exemple. en utilisant TBF.

5

Utilisez-vous le déchargement de segmentation de tcp au nic? (Vous pouvez utiliser "ethtool -k $ your_network_device" pour voir les paramètres de déchargement.) C'est la seule façon pour autant que je sache que vous verriez des paquets de 64k tcp avec un périphérique MTU de 1500. Non, cela répond à la question, mais cela pourrait aider à éviter les erreurs de diagnostic.

Questions connexes