Auteur Sujet: QoS : rendre prioritaire les paquets TCP ack sortants  (Lu 18067 fois)

0 Membres et 1 Invité sur ce sujet

jobarjo

  • réseau Quentiop (78)
  • Abonné KIWI fibre optique
  • *
  • Messages: 99
  • Futur ancien abonné Kiwi fibre optique
QoS : rendre prioritaire les paquets TCP ack sortants
« le: 12 mars 2011 à 10:48:38 »
Un bug du routeur kiwi:
Quand on ouvre un port externe, celui ci n'est pas accessible depuis le reseau interne.

Autres conséquences des fonctions pauvres du routeur:
- dns dynamique problématique, car impossible de connaitre son ip publique autrement qu'en accédant à un site web externe. D'ou un polling à longue période.
- impossible de mettre un serveur VPN (ou du moins beaucoup plus difficile car 2 gateways)
- pas de QoS. J'imagine que le routeur n'en fait pas (à tester). La moindre des choses est de rendre prioritaire les paquets TCP ack sortants.
- On ne peut pas fixer les ip et les noms des ordinateurs du reseau local: dhcp, dns et reverse dns des ip locales. D'ou la nécessité de le faire dans un autre routeur (remplacer les fonctions DHCP et DNS)

vivien

  • Administrateur
  • *
  • Messages: 47 284
    • Twitter LaFibre.info
QoS : rendre prioritaire les paquets TCP ack sortants
« Réponse #1 le: 12 mars 2011 à 11:05:18 »
rendre prioritaire les paquets TCP ack sortants.
Pourquoi ?

J'ai été assez surpris de vois qu'on pouvait dropper 90% des ack sortant sans véritable impact...  (enfin ca réduit un peu la Rwin car il y a des paquets acquittés que le serveur pense non acquittés.

Par contre rendre les flux IPTV et VoIP prioritaire, en download et en upload, ca c'est utile.

pour récupérer ton IP publique et que ça : http://ip.lafibre.info/

corrector

  • Invité
QoS : rendre prioritaire les paquets TCP ack sortants
« Réponse #2 le: 12 mars 2011 à 11:09:59 »
- impossible de mettre un serveur VPN (ou du moins beaucoup plus difficile car 2 gateways)
Je ne vois pas ce que tu veux dire.

- pas de QoS. J'imagine que le routeur n'en fait pas (à tester). La moindre des choses est de rendre prioritaire les paquets TCP ack sortants.
Je ne suis pas sûr de comprendre ce que tu entends pas TCP ack sortant, encore moins pourquoi ils devraient être prioritaires.

Est-ce que tu veux dire que les protocoles disciplinés (dont TCP) devraient être prioritaires sur les protocoles indisciplinés (comme UDP)?

jobarjo

  • réseau Quentiop (78)
  • Abonné KIWI fibre optique
  • *
  • Messages: 99
  • Futur ancien abonné Kiwi fibre optique
QoS : rendre prioritaire les paquets TCP ack sortants
« Réponse #3 le: 12 mars 2011 à 11:31:30 »
Pour le vpn (serveur en mode routage), c'est beaucoup plus simple de le mettre dans le routeur, car la gateway du réseau est le routeur.
Si tu relies 2 sites avec 2 subnets, c'est plus simple de configurer la table de routage du routeur a la place de la table de routage de toutes les machines du réseau.

L'autre solution plus simple consiste peut être a configurer openvpn en mode bridge ethernet...

Citer
Je ne suis pas sûr de comprendre ce que tu entends pas TCP ack sortant, encore moins pourquoi ils devraient être prioritaires.
Dans TCP, le récepteur prévient l'èmetteur qu'il a bien reçu les paquets en lui envoyant des packets TCP ACK(knowledge). Si tu perds un TCP ACK, l'èmetteur ré-èmet le paquet correspondant. En général, le débit baisse beaucoup. Donc, si tu ne les rends pas prioritaires (car peu nombreux) tu perds du débit en download dès que ton lien upload est occupé.

La freebox le fait d'office depuis pas mal d'années, çà change beaucoup la qualité du service.
Mais si tu upload pas, çà ne se voit pas. Le test est de simplement de downloader pendant que tu upload.

corrector

  • Invité
QoS : rendre prioritaire les paquets TCP ack sortants
« Réponse #4 le: 12 mars 2011 à 11:34:05 »
J'ai été assez surpris de vois qu'on pouvait dropper 90% des ack sortant sans véritable impact... 
C'est assez normal. Sur un TCP bien rempli on cherche à maximiser la taille de la fenêtre, c'est à dire le volume maximum qui peut potentiellement être encore dans le tuyau (entré d'un coté et pas encore sortir de l'autre) à tout instant.

Cela implique qu'il a de nombreux quanta d'information (paquets TCP) dans le tuyau à tout instant; comme la quantité de ack envoyés est normalement au moins 1/2 du nombre de paquets reçus; si nombre de ack envoyés pour les données dans le tuyau >> 10, en supprimant 90 % des ack ont doit avoir une performance légèrement diminuée. Les ack sont redondants.

(enfin ca réduit un peu la Rwin car il y a des paquets acquittés que le serveur pense non acquittés.
Qu'est-ce que tu entends par "serveur"? Un TCP est intrinsèquement symétrique, il n'y a pas de coté "serveur" et de coté "client", c'est une paire de tuyaux.


corrector

  • Invité
QoS : rendre prioritaire les paquets TCP ack sortants
« Réponse #5 le: 12 mars 2011 à 11:38:28 »
Dans TCP, le récepteur prévient l'èmetteur qu'il a bien reçu les paquets en lui envoyant des packets TCP ACK(knowledge).
Je connais, mais je ne vois pas ce que tu appelles donner la priorité aux paquets TCP ACK, ni même ce que tu appelles un paquet TCP ACK.

On parle bien de priorité entre différents paquets TCP?

jobarjo

  • réseau Quentiop (78)
  • Abonné KIWI fibre optique
  • *
  • Messages: 99
  • Futur ancien abonné Kiwi fibre optique

jobarjo

  • réseau Quentiop (78)
  • Abonné KIWI fibre optique
  • *
  • Messages: 99
  • Futur ancien abonné Kiwi fibre optique
QoS ACK prioritaire
« Réponse #7 le: 12 mars 2011 à 12:07:30 »
En fait, le réel problème est que les routeurs adsl ont souvent un vilain défaut, ils mémorisent les paquets à èmettre pour en perdre le moins possible (jusqu'à plusieurs secondes).
Donc si le lien upload est occupé, on obtient des latences très élevées.
La solution pour éviter cela est de gérer la qualité de service, c'est à dire permettre à certains paquets d'en doubler d'autres. Mais pour pouvoir le faire correctement, il faut le faire à l'endroit ou çà bouchonne, donc dans le modem adsl. Sinon, le script limite de débit upload pour ne jamais remplir les fifos d'upload.

vivien

  • Administrateur
  • *
  • Messages: 47 284
    • Twitter LaFibre.info
QoS ACK prioritaire
« Réponse #8 le: 12 mars 2011 à 12:11:34 »
Si tu perds un TCP ACK, l'èmetteur ré-èmet le paquet correspondant. En général, le débit baisse beaucoup. Donc, si tu ne les rends pas prioritaires (car peu nombreux) tu perds du débit en download dès que ton lien upload est occupé.
Non, l'èmetteur ré-èmet le paquet :
- Si il reçoit un paquet SACK lui indiquant un paquet manquant.
- Après l'expiration d'un timer assez long qui dépend du RTT où l'èmetteur n'a pas reçu d'acquittement. Il re démarre alors en "slow-start" c'est a dire en attendant l'acquittement paquet par paquet avant d'accélérer.

SACK = sélectif acquittement : tu acquitte uniquement les paquets reçus ce qui permet a l'èmetteur de ne renvoyer que les paquets manquants. Sans sack, l'èmetteur recommence depuis la perte de paquet alors que de nombreux paquets ont été envoyés depuis)

les routeurs adsl ont souvent un vilain défaut, ils mémorisent les paquets à èmettre pour en perdre le moins possible (jusqu'à plusieurs secondes)
Sans ce buffer, on aurait de nombreuses pertes de paquets, TCP envoyant des paquets en nombre a des vitesse plus élevée que la liaison physique. Sur un accés 3G, les buffers sont petit et on est obligé de mettre une petite Rwin pour ne pas perdre de paquets.

corrector

  • Invité
QoS ACK prioritaire
« Réponse #9 le: 12 mars 2011 à 12:54:13 »
Je connais, mais je ne vois pas ce que tu appelles donner la priorité aux paquets TCP ACK, ni même ce que tu appelles un paquet TCP ACK.
Vu :
# To speed up downloads while an upload is going on, put ACK packets in
# the interactive class:

tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \
   match ip protocol 6 0xff \
   match u8 0x05 0x0f at 0 \
   match u16 0x0000 0xffc0 at 2 \
   match u8 0x10 0xff at 33 \
   flowid 1:10
Je ne connaissais pas trop la commande tc et le manuel de "tc filter" manque à l'appel, mais si je ne me trompe pas, ça veut dire :
protocol ip : si le protocole est IPv4
match ip protocol 6 0xff : et que le protocole est TCP
match u8 0x05 0x0f at 0 : et que l'en-tête IP fait exactement 20 octets (taille minimum, aucune option IP)
match u16 0x0000 0xffc0 at 2 : et que la taille du paquet est < 0x40 = 64
match u8 0x10 0xff at 33 : et que les flags TCP sont ACK
flowid 1:10 : alors il est la classe 1:10 est utilisée :

tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${UPLINK}kbit \
   burst 6k prio 1

Si j'ai bien compris ça donne la priorité aux paquets TCP d'une taille inférieure à 64 octets, c'est à dire ayant moins de 24 octets d'options TCP et de données utiles.
« Modifié: 12 mars 2011 à 14:21:12 par corrector »

vivien

  • Administrateur
  • *
  • Messages: 47 284
    • Twitter LaFibre.info
QoS ACK prioritaire
« Réponse #10 le: 12 mars 2011 à 13:56:12 »
- et que l'en-tête IP fait exactement 20 octets (taille minimum, aucune option IP)
Le problème c'est qu'aujourd'hui il est conseillé d'utiliser les timestamp, donc d'activer les options.
Donc les l'en-tête IP dépasse 20 octets. (RFC132 http://www.ietf.org/rfc/rfc1323.txt)


corrector

  • Invité
QoS ACK prioritaire
« Réponse #11 le: 12 mars 2011 à 14:06:44 »
Sans ce buffer, on aurait de nombreuses pertes de paquets, TCP envoyant des paquets en nombre a des vitesse plus élevée que la liaison physique. Sur un accés 3G, les buffers sont petit et on est obligé de mettre une petite Rwin pour ne pas perdre de paquets.
Si tu envoies plus de données que la liaison ne le permet, tu vas perdre des paquets : il y a pas de miracle!

Si tu mets une ridiculement longue file d'attente pour stocker les paquets afin d'éviter les pertes, les pertes de paquets arriveront trop tard, et tu vas saturer ton lien 3G (ou autre) avec de vieux paquets qui sont considérés comme perdus par la couche transport fiable (TCP ou autre). Alors l'èmetteur va réèmettre les vieux paquets qu'il pense perdus, ce qui va encore plus saturer la file d'attente; quand les ACK des vieux paquets vont revenir, l'èmetteur ne saura pas si les premiers sont arrivés très lentement ou les derniers plus vite.

Penser qu'une longue file d'attente est une bonne chose c'est penser qu'une latence très élevée et très variable est une bonne chose. C'est ridicule, une latence élevée n'est pas une bonne chose et le jitter élevé une très mauvaises chose.

Le principe même d'un protocole de transport régulé (comme TCP) est d'arriver à perdre des paquets. Si tu ne perds pas de paquets c'est que tu n'as utilisé toute la capacité du lien.