URL: https://linuxfr.org/forums/linux-redhat/posts/reseau-fragmentations-de-paquets-tcp Title: [RESEAU] Fragmentations de paquets tcp Authors: jean_clume Date: 2013年10月08日T22:30:27+02:00 License: CC By-SA Tags: red_hat, tcp et fragmentation Score: 6 Salut à tous, ça concerne un problème réseau, j'suis une bille en réseau alors soyez indulgent si je dis de grosses conneries :) J'ai un besoin très précis, j'utilise une application serveur qui envoie des paquets tcp a un client. La machine serveur est un HP Proliant DL360 G6 sous RHEL 5U4 32 bits. J'ai 2 cartes broadcom netxtreme II BCM 5709 en failover bonding mode1 (driver bnx2) et j'ai désactivé ipv6 dans le driver. Mon appli là dessus envoie un paquet tcp d'exactement 1044 octets sur un client. Ce client a dans sa configuration TCP une fenêtre d'exactement 1044 octets. J'ai comme nécessité que le paquet arrive sur mon client en un seul "morceau" sans fragmentation, or quand je regarde un peu ce qui se passe avec Wireshark je vois que le paquet de 1044 octets est fragmenté en sortie d'interface de mon serveur en 2 paquets de 512 octets. Ma seule alternative pour que le paquet de 1044 octets passe d'un bloc, est d'augmenter la fenêtre TCP a 2088 octets ou plus (soit 2X la taille de mon paquet). Cette application fonctionne aussi sous un serveur sous Solaris7 et on n'a pas du tout le même comportement, le paquet est transmis entier. Ce que j'ai tenté pour le moment: -Jouer avec sysctl sur les paramètres tcp du server (MTU,MSS,probing, ...) -Jouer avec iptable en postrouting pour forcer le MSS en sortie -Desactiver tous les paramètres d'offload des cartes réseaux via ethtool -Changer le protocole de congestion tcp de BIC a CUBIC J'ai constaté que ce n'était pas un problème applicatif, j'ai fait un test en démarrant apache sur le serveur et en téléchargeant un fichier en http via un client linux du LAN sur lequel j'avais positionné le réglage suivant: net.ipv4.tcp_rmem = 512 1392 4092 net.ipv4.tcp_window_scaling = 0 Le paramètre de tcp_rmem fixé a 1392 me permet d'avoir une fenêtre tcp de 1044 octets sur le client (pourquoi? pour le moment j'en sais rien!). Et là c'est le drame je vois via Wireshark que là aussi j'ai des segments de 522 octets. Le support Redhat sèche pour me donner une explication sur ce comportement. J'ai l'impression que le systeme se reserve de la place et refuse d'utiliser toute la fenetre TCP disponible pour les données. En même temps c'est vrai que c'est un peu un besoin à la con, vu la taille ridicule des fenêtres TCP par rapport à ce qui est en place par défaut, mais je ne peux absolument pas jouer sur ces paramètres. Avez vous déjà été confronté à ça?