La Fibre

Fournisseurs d'accès à Internet fixe en France métropolitaine => KIWI fibre optique KIWI fibre optique => Opérateurs grand public alternatifs => KIWI fibre optique Espace technique internet Kiwi => Discussion démarrée par: jobarjo le 12 mars 2011 à 10:48:38

Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: jobarjo 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)
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: vivien 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/
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: 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)?
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: jobarjo 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.
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: 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.

Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: 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?
Titre: QoS ACK prioritaire
Posté par: jobarjo le 12 mars 2011 à 11:56:11
http://dir.filewatcher.com/d/SuSE/10.0/noarch/Productivity/Networking/System/wondershaper-1.1a-218.noarch.rpm.21022.html (http://dir.filewatcher.com/d/SuSE/10.0/noarch/Productivity/Networking/System/wondershaper-1.1a-218.noarch.rpm.21022.html)

http://lartc.org/wondershaper/ (http://lartc.org/wondershaper/)
Titre: QoS ACK prioritaire
Posté par: jobarjo 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.
Titre: QoS ACK prioritaire
Posté par: vivien 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.
Titre: QoS ACK prioritaire
Posté par: corrector 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.
Titre: QoS ACK prioritaire
Posté par: vivien 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 (http://www.ietf.org/rfc/rfc1323.txt))

Titre: QoS ACK prioritaire
Posté par: 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.
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: le 12 mars 2011 à 14:17:51
Non, l'èmetteur ré-èmet le paquet :
- Si il reçoit un paquet SACK lui indiquant un paquet manquant.
ou quand SACK n'est pas géré par les deux extrémités :
- si il reçoit un certain nombre de ACK identiques, ce qui indique que des segments sont arrivés qui sont postérieurs à un premier segment qui n'est pas arrivé
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: vivien le 12 mars 2011 à 14:18:07
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.

TCP calcul la latence afin d'optimiser le débit sans perdre de paquet. Cela nécessite un buffer...
Ces calculs sont d'ailleurs très bien fait : on perd très peu de paquet avec TCP en étant très très proche du débit maximal de la ligne.
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: le 12 mars 2011 à 14:23:45
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. (RFC 1323 http://www.ietf.org/rfc/rfc1323.txt (http://www.ietf.org/rfc/rfc1323.txt))
Non : TCP Extensions for High Performance
Titre: QoS ACK prioritaire
Posté par: le 12 mars 2011 à 14:28:43
TCP calcul la latence afin d'optimiser le débit sans perdre de paquet.
C'est ce que je dis : avec la file d'attente de capacité ridiculement grande dont parle jobarjo, la latence est aléatoire, on ne peut pas la mesurer : quand la file d'attente sera de taille raisonnable tu vas avoir une latence en rapport avec la technologie de lien employée, quand la file d'attente grandira ridiculement ("jusqu'à plusieurs secondes"), la latence sera démultipliée.

Cela nécessite un buffer...
Où ça?

Ces calculs sont d'ailleurs très bien fait : on perd très peu de paquet avec TCP en étant très très proche du débit maximal de la ligne.
Pour connaitre la hauteur du plafond il faut quand même s'y cogner.
Titre: QoS ACK prioritaire
Posté par: le 16 mars 2011 à 04:59:18
Citer
To speed up downloads while an upload is going on, put ACK packets in the interactive class
Qu'est-ce qu'un "ACK packet"?
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.
Cela signifie que les connexions utilisées en down pur sont optimisées, notamment quand on a
- un client qui download un fichier
- un serveur qui upload un fichier

La notion de paquet ACK correspond à l'utilisation d'un circuit quasiment en sens unique, sur le modèle de :
A>B GET une_url + quelques en-têtes
B>A 200 OK + quelques en-têtes + beaucoup de données
et de
A>B PUT une_url + quelques en-têtes + beaucoup de données
B>A 200 OK + quelques en-têtes
c'est à dire des connexions avec taille(données dans un sens) >> taille(données dans l'autre sens).

Mais une connexion TCP réellement utilisée dans les deux sens en même temps n'aura pas "ACK packet", elle ne sera donc pas "speed up"!

Pour moi, ça montre que c'est du bricolage.
Titre: QoS ACK prioritaire
Posté par: le 16 mars 2011 à 05:12:58
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é.
Je dirais qu'ils ne sont pas spécialement peu nombreux, mais qu'ils sont pas très gros et donc n'occupent pas le lien très longtemps.

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.
En "mode routeur"?
Titre: QoS ACK prioritaire
Posté par: le 19 mars 2011 à 22:53:08
Donc les l'en-tête IP dépasse 20 octets.
Pour voir ces paquets avec Wireshark, utiliser le filtre "ip.hdr_len > 20"

J'ai fais un sondage, et je n'ai vu que de l'IGMP avec l'option "router alert".
Titre: QoS ACK prioritaire
Posté par: vivien le 20 mars 2011 à 22:56:56
Un bug Windows fait que le système d'exploitation de Microsoft n'arrive pas activés les timestamps quand en face le serveur est Linux.

Linux représente la majorité des serveurs web et donc dans la majorité des cas les timestamps ne sont pas activés...

Fait le même test avec un autre système d'exploitation (MacOS, Linux, FreeBSD, ...). Les timestamps seront activés.
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: jobarjo le 29 mars 2011 à 10:28:32
Mais une connexion TCP réellement utilisée dans les deux sens en même temps n'aura pas "ACK packet", elle ne sera donc pas "speed up"!

Pour moi, ça montre que c'est du bricolage.
Oui c'est vrai que j'avais pas pensé qu'un paquet avec le flag ACK pouvait contenir des données.
Cette optimisation concerne donc principalement des uploads de gros fichiers, ce qui est déja une bonne chose. Mais j'avais pas tilté que çà causerait un désordonnement.

Après avoir regardé plus longuement TCP, j'ai vu qu'il existe d'autres moyens de gérer la contention sans perdre trop de paquets.
Par exemple, l'explicit congestion notification (https://en.wikipedia.org/wiki/Explicit_Congestion_Notification), semble bien. Mais c'est désactivé par défaut sous windows 7.

Finalement, une solution plus "universelle" est de faire une queue par flow, et d'utiliser un algorithme comme le SFQ (http://lartc.org/howto/lartc.qdisc.classless.html#LARTC.SFQ) dans l'ONT (au niveau de la congestion)

Sinon, aucune réponse de kiwi sur le bug du port entrant à mes 2 emails. C'est très pénible d'accéder au service de 2 manières différentes selon que je sois à l'intérieur ou à l'extérieur de mon réseau. Impossible d'exploiter correctement la ligne internet avec la box.

Titre: Syntaxe de "tc filter add ... protocol ip ... u32 match"
Posté par: corrector le 22 mai 2011 à 06:38:12
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 :
La description de match (http://lartc.org/howto/lartc.adv-filter.html#AEN1289) : c'est exactement ce que je supposais :
match TYPE VAL MASQ at OFF signifie en C :
bool test (char *p) // p pointe sur le début de paquet
{
  return (*(TYPE *) (p+OFF)) & MASQ == VAL;
}

L'exemple donné dans la doc correspond exactement :
Citer
## match acks the hard way,
## IP protocol 6,
## IP header length 0x5(32 bit words),
## IP Total length 0x34 (ACK + 12 bytes of TCP options)
## TCP ack set (bit 5, offset 33)
# tc filter add dev ppp14 parent 1:0 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:3

Sauf que le commentaire "IP Total length 0x34 " est faux : en fait 0x34 n'apparait même pas dans le filtre!

Il faut traduire :
match u16 0x0000 0xffc0 at 2 en C :
(*(u16*)(p+2)) & 0xffc0 == 0x0000 or 0xffc0 égal ~ 0x3F en calculant en u16 (voir remarque)
donc
x & 0xffc0 = x & ~ 0x3F
= x / 0x40 * 0x40
donc les conditions suivantes sont équivalentes :
x & 0xffc0 == 0x0000x / 0x40 * 0x40 == 0x / 0x40 == 0x < 0x40or x = *(u16*)(p+2) correspond à la taille du paquet donc :
taille du paquet est < 0x40

Remarque :

Ne pas supposer qu'en C:
0xffc0 == ~ (u16) 0x3Fça n'est valable que si int fait 16 bits, sinon l'integral promotion de (u16) 0x3F va en faire un unsigned int et ~ (u16) 0x3F vaudra ~ (unsigned int) 0x3F qui sera supérieur à 0xFFC0.
Titre: Wireshark : "tcp and ip.hdr_len > 20"
Posté par: corrector le 22 mai 2011 à 07:18:44
Un bug Windows fait que le système d'exploitation de Microsoft n'arrive pas activés les timestamps quand en face le serveur est Linux.

Linux représente la majorité des serveurs web et donc dans la majorité des cas les timestamps ne sont pas activés...

Fait le même test avec un autre système d'exploitation (MacOS, Linux, FreeBSD, ...). Les timestamps seront activés.
Sur les autres OS, combien de paquets apparaissent quand on fait :
Pour voir ces paquets avec Wireshark, utiliser le filtre "ip.hdr_len > 20"
et n'ont pas "router alert"?

Combien de paquets correspondent au critère :
tcp and ip.hdr_len > 20
Titre: "tc filter add ... protocol ip ... u32 match TYPE ... at nexthdr +", options IP
Posté par: corrector le 22 mai 2011 à 07:22:18
Donc les l'en-tête IP dépasse 20 octets.
Si je comprends bien la doc, pour gérer ce cas il faut utiliser : at nexthdr + TCP_OFFSET
au lieu de : at IP_OFFSET

Mais je demande à voir quels sont les paquets TCP qui ont des options IP.
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: vivien le 22 mai 2011 à 07:44:00
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.
La Freebox priorise les ACK depuis plusieurs années ?
Je ne voit pas dans le menu de configuration une option a activer, normal ?

Mais une connexion TCP réellement utilisée dans les deux sens en même temps n'aura pas "ACK packet", elle ne sera donc pas "speed up"!

Pour moi, ça montre que c'est du bricolage.
C'est vrai mais dans la grande majorité des cas, c'est du http et tu n'utilise qu'un sens (a part faire des demande pour télécharger des images / pages).
Titre: QoS : rendre prioritaire les paquets TCP ack sortants : sur la Freebox?
Posté par: le 22 mai 2011 à 08:11:51
La Freebox priorise les ACK depuis plusieurs années ?
Je ne voit pas dans le menu de configuration une option a activer, normal ?
Je ne vois qu'une façon de tester : comparer sans protocole autour (netcat pur).

Je pense qu'il faut ressortir les bons vieux echo, discard et chargen.

C'est vrai mais dans la grande majorité des cas, c'est du http et tu n'utilise qu'un sens (a part faire des demande pour télécharger des images / pages).
À part quand le pipelining est mis en œuvre (ce qui pose parfois problème), HTTP n'utilise jamais qu'un sens à la fois.

IMAP est un protocole requête-réponse (donc conversation un sens à la fois) qui peut gérer plusieurs conversations dans la même connexion, donc peut utiliser les deux sens à la fois (ce qui a l'air de poser quelques problèmes avec le serveur IMAP préhistorique de Free!).
Titre: iptables, tc, iproute2... la conception des outils réseau avancés sous linux
Posté par: le 22 mai 2011 à 12:09:00
La description de match (http://lartc.org/howto/lartc.adv-filter.html#AEN1289) : c'est exactement ce que je supposais :
match TYPE VAL MASQ at OFF signifie en C :
bool test (char *p) // p pointe sur le début de paquet
{
  return (*(TYPE *) (p+OFF)) & MASQ == VAL;
}

L'exemple donné dans la doc correspond exactement :
Sauf que le commentaire "IP Total length 0x34 " est faux : en fait 0x34 n'apparait même pas dans le filtre!

Il faut traduire :
match u16 0x0000 0xffc0 at 2 en C :
(*(u16*)(p+2)) & 0xffc0 == 0x0000 or 0xffc0 égal ~ 0x3F en calculant en u16 (voir remarque)
donc
x & 0xffc0 = x & ~ 0x3F
= x / 0x40 * 0x40
donc les conditions suivantes sont équivalentes :
x & 0xffc0 == 0x0000x / 0x40 * 0x40 == 0x / 0x40 == 0x < 0x40or x = *(u16*)(p+2) correspond à la taille du paquet donc :
taille du paquet est < 0x40
Ce raisonnement, juste pour analyser une partie d'une commande "tc filter ... match", c'est quand même très laborieux.

Je trouve le système de filtrage de tc pénible à souhait, au contraire des filtres iptables.

En fait, plus je me documente sur les possibilités de discriminations IP de linux, plus je trouve que :
- c'est hyper compliqué;
- différents sous-systèmes semblent suivre une philosophie différente;
- du point de vue conception orientée vers l'administrateur, c'est zéro : plus abscons c'est difficile à imaginer;
- l'administrateur n'a aucun indice sur ce qui est efficace ou non (est-ce que beaucoup de règles iptables à la suite est efficace? on ne sait pas comment c'est implèmenté);
- dans le pur style linux, on aligne des règles à la suite au lieu de permettre des expressions complexes comme un véritable langage avec une grammaire récursive;
- la doc de chaque sous-système mentionne assez peu les autres; par exemple PREROUTING a lieu avant ou après l'examen des règles de routage pour un paquet généré localement? intuitivement il faut que ça soit après, mais ça n'est pas expliqué dans la doc de iptables;
- le comportement de la pile IP dépend de 42000 sysctl mal voir pas documentés du tout, ou documentés plusieurs fois avec une plage de valeurs permises différentes.

Je pense que le seule façon de débroussailler tout ça serait de tout décrire dans un formalisme rigoureux - si ce n'est pas déjà trop tard.

Les réponses a toutes les questions qu'on peut se poser doivent se trouver au beau milieu d'une discussion sur une de ML des dév. C'est là qu'est la vraie doc de linux.

Est-ce qu'une seule personne a une vision d'ensemble du circuit que peut faire une trame réseau dans un pont/routeur/... linux?

Je trouve ça vaguement monstrueux (dans le style de Firefox ou du C++).
Titre: Taille du tampon des modems
Posté par: le 23 mai 2011 à 06:53:33
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).
Tous? Lesquels?

Quelqu'un a fait une étude?
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: jobarjo le 23 mai 2011 à 12:51:46
@corrector

Ce problème se posait en effet il y a quelques années. Le symptome était simple, lorsqu'il y avait de l'upload (P2P ou autre), la ligne internet était inutilisable, aussi bien chez wanadoo (avec un modem speedtouch je crois à l'époque), que chez free avec leur freebox.

Le script wondershaper réglait efficacement ce problème.
Je suis d'accord avec vous que c'est une bidouille, mais je vous garantis que çà fonctionne parfaitement.

Il se trouve qu'après quelques années, ce script n'était plus nécéssaire chez free à la suite d'un update de leur part. Ils n'ont pas précisé quels algorithmes de QOS ils ont utilisés, mais le problème était réglé.
Maintenant, je ne sais pas si ce problème existe ou non chez les autres FAI. Peut être qu'ils l'ont tous réglé.

Ce sont les auteurs de wondershaper qui indiquent que la plupart des modems (peut être de l'époque?) ont ce problème. En effet, aux débuts de l'internet, et même de l'adsl, il n'était même pas autorisé de partager la ligne internet entre plusieurs utilisateurs chez la plupart des FAI. Cà explique pourquoi les fabricants choisissaient la bête FIFO pour perdre le moins de paquets possible.

Wondershaper est très vieux. Comme je l'ai dit, je pense qu'il existe d'autres solutions plus élégantes comme par exemple le SFQ qui fait simplement une queue par flow. Mais je ne l'ai pas testé, faute de besoin. De plus mixer des algorithmes de QOS les uns derriere les autres n'est pas trop utile.
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: le 23 mai 2011 à 18:52:57
Le script wondershaper réglait efficacement ce problème.
pour un cas précis.

Il se trouve qu'après quelques années, ce script n'était plus nécéssaire chez free à la suite d'un update de leur part. Ils n'ont pas précisé quels algorithmes de QOS ils ont utilisés, mais le problème était réglé.
Ni même si une QOS quelconque était à l'œuvre, ou si autre chose que la QOS a été modifié.

Je ne possède pas de modem ADSL pour comparer les performances avec la Freebox.

Ce sont les auteurs de wondershaper qui indiquent que la plupart des modems (peut être de l'époque?) ont ce problème. En effet, aux débuts de l'internet, et même de l'adsl, il n'était même pas autorisé de partager la ligne internet entre plusieurs utilisateurs chez la plupart des FAI.
Je n'ai connaissance de ce genre de clause qu'avec un abonnement câble. De toute façon c'est parfaitement inapplicable : de l'extérieur, plusieurs PC derrière un SNAT apparaissent comme un seul PC.

Cà explique pourquoi les fabricants choisissaient la bête FIFO pour perdre le moins de paquets possible.
Je ne suis pas certain que la bête FIFO perde le moins de paquets, cela dépend de beaucoup de paramètres.
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: vivien le 23 mai 2011 à 19:01:56
Je n'ai connaissance de ce genre de clause qu'avec un abonnement câble. De toute façon c'est parfaitement inapplicable : de l'extérieur, plusieurs PC derrière un SNAT apparaissent comme un seul PC.
Avant, avec Wanadoo il était interdit de partager sa connexion (c'était avant l’arrivée de la livebox)
Titre: Partage de connexion
Posté par: le 23 mai 2011 à 20:37:42
Avant, avec Wanadoo il était interdit de partager sa connexion (c'était avant l’arrivée de la livebox)
Comment ils contrôlaient ça?
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: vivien le 23 mai 2011 à 21:15:23
C'est juste les CGV...

Par contre la déconnexion toutes les 24h pour éviter que l'ADSL ne concurrence les liaisons louées, ça elles étaient bien présentes.
Officiellement c'est pour éviter les connexions fantômes mais d'autres FAI arrivent très bien à ne pas provoquer ces déconnexions.
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: jobarjo le 23 mai 2011 à 21:33:19
Mon cher corrector, vous êtes du genre "persévérant"   ;)

Voici l'email de juillet 2005 indiquant la prise en compte de la QoS upload:
Citer
From : Maxime Bizon
Date : Fri, 01 Jul 2005 19:49:07 +0200
User-Agent : Gnus/5.1007 (Gnus v5.10.7) Emacs/21.4 (gnu/linux)

Bonsoir,

Un nouveau firmware a été déployé pour les Freebox v3 et v4 des dégroupés et non dégroupés.

Au menu :

- correction du bug de débit apparaissant avec certains modèles de cartes Wifi (chipset TI).

- il est maintenant possible de rediriger des plages complètes de ports, l’interface de configuration du mode routeur a été mise à jour. L’interface sur le téléviseur les fait également apparaître.

- pour les _dégroupés uniquement_, les redirections en mode routeur fonctionnent désormais en interne.

- l’interface permettant de récuperer les informations techniques de la Freebox sur le téleviseur et maintenant disponible pour les non dégroupés.

- gestion de QOS en upstream, que ce soit en mode bridge ou en mode routeur. la Freebox procède désormais à une gestion intelligente du
traffic sortant. Le champ TOS des paquets émis est examiné, et chaque queue possède un gestionnaire intelligent et juste (SFQ). Ainsi un gros upload ne perturbe plus le surf.


- et... le Freeplayer ! Toutes les informations à ce sujet sont sur http://adsl.free.fr/tv/freeplayer/ (http://adsl.free.fr/tv/freeplayer/)

Vous pouvez mettre à jour votre Freebox en redémarrant simplement celle-ci.


Maxime

Il semble même que le freebox soit sensible au champ TOS. De toute façon, ils étaient obligés de le gérer rien que pour le téléphone. Ils ont même mis beaucoup de temps je trouve, car avant cette modif, l'utilisation de la ligne avait un impact sur la qualité de la liaison téléphonique. (Je ne suis pas sur que la VOIP passe par son propre canal ATM)


Pour la clause de partage de la ligne, nous sommes d'accord, ce n'est pas vérifiable. Mais, même aujourd'hui, la plupart des contrats vous interdisent de revendre de la connectivité IP (avoir un hotspot par exemple pour revendre de l'internet à vos voisins ou à des passants). C'est invérifiable, mais il reste toujours des gens prêts à payer très cher juste pour retirer ce genre de clauses, et "être en règle".
Titre: QoS : rendre prioritaire les paquets TCP ack sortants
Posté par: le 26 mai 2011 à 05:48:03
Oui c'est vrai que j'avais pas pensé qu'un paquet avec le flag ACK pouvait contenir des données.
Tous les paquets sauf le premier d'une connexion TCP indiquent un numéro ACK.

Finalement, une solution plus "universelle" est de faire une queue par flow, et d'utiliser un algorithme comme le SFQ (http://lartc.org/howto/lartc.qdisc.classless.html#LARTC.SFQ) dans l'ONT (au niveau de la congestion)
Ce qui est plus propre.

Sinon, aucune réponse de kiwi sur le bug du port entrant à mes 2 emails. C'est très pénible d'accéder au service de 2 manières différentes selon que je sois à l'intérieur ou à l'extérieur de mon réseau. Impossible d'exploiter correctement la ligne internet avec la box.
Tu as quoi comme OS sur tes machines?

Est-ce que tu as un routeur entre la box et les autres machines?