Auteur Sujet: Négociation MTU MSS: comment ça fonctionne ?  (Lu 44679 fois)

0 Membres et 1 Invité sur ce sujet

Leon

  • Client SFR sur réseau Numericable
  • Modérateur
  • *
  • Messages: 5 971
Négociation MTU MSS: comment ça fonctionne ?
« le: 31 mars 2014 à 08:36:53 »
Bonjour à tous!

J'aimerai comprendre comment les ordinateurs/serveurs adaptent la MTU de chaque connexion.
* Déjà, est-ce qu'un serveur adapte la MTU pour chaque client, en fonction de ce que ce client lui a annoncé? Je pense que oui, mais je n'en suis pas certain...
* Pour TCP, c'est visiblement la "négociation MSS" qui est utilisée. J'ai bon?
* Mais pour UDP, comment est-ce que ça fonctionne? Je n'ai pas trouvé d'information à ce sujet. Est-ce que c'est à la couche supérieure d'indiquer à UDP quelle MTU utiliser? Un autre mécanisme que je n'aurais pas trouvé?
Les connexions PPPoE et les VPN diminuent la MTU, donc cette négociation me semble importante, même à l'heure du très haut débit.

D'ailleurs, quel est l'intérêt de maintenir des MTU réduites sur les connexions ADSL PPPoX? Ne peut-on pas tout simplement élargir la MTU pour qu'au final, en supprimant l'overhead PPPoE, elle atteigne les 1500 standards?
Merci d'avance pour vos retours!

Leon.

vivien

  • Administrateur
  • *
  • Messages: 47 076
    • Twitter LaFibre.info
Négociation MTU - comment ça fonctionne?
« Réponse #1 le: 31 mars 2014 à 09:15:49 »
MTU :

Chaque interface réseau possède une propriété particulière appelée MTU (Maximum Transmission Unit). C'est une valeur entière qui correspond à la taille maximale d'un paquet transitant par cette interface.

  • Ethernet : 1500
  • Connexion ADSL qui utilise L2TP : 1460
  • PPPoA : 1500
  • PPPoE : 1492
  • PPTP : 1500
  • PPP en RTC :
    Download : MSS size 1408 bytes (MTU 1448 bytes, unknown interface)
    Upload :  MSS size 1420 bytes (MTU 1500 bytes, ethernet)
  • ATM : 9180


MSS :

MSS = MTU - en-têtes IP - en -têtes TCP/UDP

En-tête IPv4 : (taille sans option : 20 octets)


En-tête TCP : (taille sans option : 20 octets)


En-tête UDP : (taille : 8 octets)


MSS TCP :
  • MTU 1500 (Ethernet) : MSS TCP de 1460 octets
  • MTU 1500 (PPPoA) : MSS TCP de 1460 octets
  • MTU 1500 (PPTP) : MSS TCP de 1460 octets
  • MTU 1492 (PPPoE) : MSS TCP de 1452 octets
  • MTU 1460 (Connexion ADSL qui utilise L2TP) : MSS TCP de 1420 octets

MSS UDP :
  • MTU 1500 (Ethernet) : MSS UDP de 1472 octets
  • MTU 1500 (PPPoA) : MSS UDP de 1472 octets
  • MTU 1500 (PPTP) : MSS UDP de 1472 octets
  • MTU 1492 (PPPoE) : MSS UDP de 1464 octets
  • MTU 1460 (Connexion ADSL qui utilise L2TP) : MSS UDP de 1432 octets




Explication pour les différents cas de MTU / MSS pour l'ADSL / FTTH :

Les lignes avec IPoA / IPoE / PPPoA ont une MSS de 1460 octets soit une MTU de 1500 octets.
Les lignes avec PPPoE ont une MSS de 1452 octets soit une MTU de 1492 octets, car le PPP rajoute un en-tête de 8 octets.
Les lignes en extension qui utilisent un LNS (avec tunnel L2TP) ont une MSS de 1420 soit une MTU de 1460 octets, car le tunnel L2TP rajoute un en-tête de 40 octets.
Il est possible de dépasser 1500 octets sur certains réseaux pour offrir aux clients une MTU de 1500 octets malgré l'utilisation de PPP / LNS mais c'est souvent une chose difficile quand le flux passe sur plusieurs réseaux différents (cas de la collecte)

Évolution du [SYN , ACK] dans le sens Upload avec une connexion en collecte avec PPPoE +  LNS (L2tp Network Server) :
Paquet [SYN , ACK] émis par le client derrière une box ADSL vers un serveur en Ethernet en réponse à un [SYN] qui l'on analyse dans le post suivant.

Analyse au niveau du Client :

Le client précise dans les options du paquet [SYN , ACK] qu’il souhaite une MSS de 1460 octets, correspondant à une MTU de 1500 octets.



Analyse au niveau du DSLAM :

La box a modifié à la volée les paquets [SYN , ACK] afin de limiter la MSS à 1452 octets (MTU de 1492 octets) car la box utilise PPPoE ce qui utilise 8 octets.



Analyse au niveau du serveur :

Le réseau a modifié à la volée les paquets [SYN , ACK] afin de limiter la MSS de 1420 soit une MTU de 1460 octets, car le L2TP rajoute un en-tête de 40 octets.

vivien

  • Administrateur
  • *
  • Messages: 47 076
    • Twitter LaFibre.info
Négociation MTU - comment ça fonctionne?
« Réponse #2 le: 31 mars 2014 à 09:19:50 »
Évolution du [SYN] dans le sens download avec une connexion en collecte avec PPPoE + LNS (L2tp Network Server) :
Paquet émis [SYN] par le serveur vers le client (box ADSL en collecte).

Analyse au niveau du serveur :

Le serveur précise dans les options du paquet [SYN] qu’il souhaite une MSS de 1460 octets, correspondant à une MTU de 1500 octets.



Analyse au niveau du DSLAM :

Le réseau a modifié à la volée les paquets [SYN] afin de limiter la MSS de 1420 soit une MTU de 1460 octets, car le L2TP rajoute un en-tête de 40 octets.



Analyse au niveau du Client :

Aucune modification de la box car on a un paquet [SYN] qui a une MSS qui permet de faire passer les 8 octets du PPP.




Schéma du réseau utilisé





Source : Frameip

Leon

  • Client SFR sur réseau Numericable
  • Modérateur
  • *
  • Messages: 5 971
Négociation MTU - comment ça fonctionne?
« Réponse #3 le: 31 mars 2014 à 09:46:17 »
Merci Vivien!

Je ne savais pas que les équipements réseau changeaient "à la volée" ces paramètres! C'est très intéressant.

Et sais-tu comment ça se passe en UDP?

Leon.

vivien

  • Administrateur
  • *
  • Messages: 47 076
    • Twitter LaFibre.info
Négociation MTU - comment ça fonctionne?
« Réponse #4 le: 31 mars 2014 à 09:49:40 »
En UDP ou ICMP, cela ne passe pas !

Mais généralement le protocole UDP n'est pas utilisé pour des paquets larges (1500 octets).
La principale exception, ce sont des VPN qui se basent sur UDP.

En DNS, dès que la taille augmente on passe en TCP.

BadMax

  • Client Free adsl
  • Expert
  • *
  • Messages: 3 481
  • Malissard (26)
Négociation MTU - comment ça fonctionne?
« Réponse #5 le: 31 mars 2014 à 11:09:06 »
Pour UDP ou IP au sens large, il y a Path MTU discovery : https://fr.wikipedia.org/wiki/Path_MTU_discovery

Chez Cisco, on peut aussi forcer la MTU d'un tunnel GRE à 1500 et reporter la fragmentation au niveau des routers. Evidemment, ça augmente leur charge CPU s'il y a des paquets à gérer. Idéalement, on met la MTU à 1500 sur le tunnel et un MSS plus bas afin que les paquets TCP soient à la bonne taille. Ca permet un bon compromis compatibilité/performance.



vivien

  • Administrateur
  • *
  • Messages: 47 076
    • Twitter LaFibre.info
Négociation MTU - comment ça fonctionne?
« Réponse #6 le: 31 mars 2014 à 11:34:44 »
Et la fragmentation / ré-assemblage au niveau du réseau peut engendrer de la gigue importante entre paquets qui ont été fragmentés sur le réseau et ceux qui ne sont pas fragmentés.

On a même dans certains cas une inversion de l'ordre des paquets au niveau du client : le paquet suivant, plus petit et donc qui a transité directement arrive avant celui plus gros qui a été transporté en deux paquets.

Ce type de comportement (dé-ordonnancement) est catastrophique pour le débit, car le client va demander une retransmission et l’èmetteur va limiter son débit pour éviter de nouvelles occurrences de ce qu'il pense être des pertes.

corrector

  • Invité
Manipulation du MSS
« Réponse #7 le: 09 avril 2014 à 14:38:33 »
Je ne savais pas que les équipements réseau changeaient "à la volée" ces paramètres! C'est très intéressant.
Très crade aussi.

Cela ne peut marcher que quand TCP est directement au dessus de IP. Si tu as un protocole d'encapsulation comme 6in4 (comme le 6rd de Free), Teredo (connectivité IPv6 reposant sur IPv4), ESP (encapsulation IPsec), le routeur ne reconnaîtra pas un entête TCP (en fait il pourrait reconnaître 6in4, mais pas un contenu protégé par un VPN comme IPsec; c'est le principe d'un VPN : masquer aux routeurs intermédiaires les types de paquets) et dans le cas de IPsec en mode contrôle d'intégrité sans chiffrement, le routeur ne pourra pas modifier le paquet sans casser le contrôle d'intégrité (ce qui revient à détruire le paquet).

La seule bonne solution générale est d'informer les extrémités du MTU à utiliser.

Modifier le MSS c'est vraiment du bricolage.

corrector

  • Invité
Négociation MTU - comment ça fonctionne?
« Réponse #8 le: 10 avril 2014 à 05:24:47 »
Bonjour à tous!

J'aimerai comprendre comment les ordinateurs/serveurs adaptent la MTU de chaque connexion.
* Déjà, est-ce qu'un serveur adapte la MTU pour chaque client, en fonction de ce que ce client lui a annoncé? Je pense que oui, mais je n'en suis pas certain...
Chaque interface a une MTU; sous Windows :

>netsh interface ipv4 show interfaces

Idx  Mét   MTU   État         Nom
---  ---  -----  -----------  -------------------
  1   50 4294967295  connected    Loopback Pseudo-Interface 1
  9    5   1500  disconnected  wifi
  8    9   1500  connected    ether


Envoi d'un paquet de taille maximale :
-4 : IPv4
-f : fragmentation interdite
-l : taille de la charge utile

>ping -4 -f -l 65500 localhost

Envoi d'une requête 'ping' sur PC [127.0.0.1] avec 65500 octets de données :

Réponse de 127.0.0.1 : octets=65500 temps<1ms TTL=128


Je précise que le suis en "mode bridge" :

>ping -4 -f -l 65500 82.mon.adr.esse

Envoi d'une requête 'Ping'  82.mon.adr.esse avec 65500 octets de données :

Réponse de 82.mon.adr.esse : octets=65500 temps<1ms TTL=128


plus sérieusement :

ping -4 -f -l 1472 82.x.y.254 : passe
ping -4 -f -l 1473 82.x.y.254 : ne pas passe pas

En effet l'entête IP fait 20 octets, et l'entête ICMP 8 octets (WP : Format d'un paquet ICMP).

Dans le cas IPv4, l'interface réseau de Windows associée à l'adresse Internet a le MTU maximum autorisé par le driver Ethernet. Ce n'est plus le cas en IPv6 :

>netsh interface ipv6 show interfaces

  8   20   1480  connected    ether

Le MTU est inférieur de 20 octets au MTU de la carte Ethernet, cela correspond pile poil à l'entête IPv4 utilisé par 6in4 utilisé par 6rd de Free. Par quel miracle Windows a t-il trouvé la bonne valeur?

(... la suite prochainement ...)

Leon

  • Client SFR sur réseau Numericable
  • Modérateur
  • *
  • Messages: 5 971
Négociation MTU - comment ça fonctionne?
« Réponse #9 le: 10 avril 2014 à 21:28:11 »
Merci corrector!

Pour le paquet de 65000 octets, c'est un truquage, ou alors est-ce que l'interface loopback accepte n'importe quelle MTU?

Leon.

corrector

  • Invité
Négociation MTU - comment ça fonctionne?
« Réponse #10 le: 10 avril 2014 à 22:40:43 »
Aucun trucage!

L'interface de bouclage est particulière, elle sert à tous les paquets qui ne sortent pas de la machine. Elle ne sert pas à uniquement pour l'IP "localhost".

corrector

  • Invité
Négociation MTU - comment ça fonctionne?
« Réponse #11 le: 04 novembre 2014 à 22:11:08 »
Le réseau a modifié à la volée les paquets [SYN] afin de limiter la MSS de 1420 soit une MTU de 1460 octets, car le LNS rajoute un en-tête de 40 octets.
On peut faire ça avec la cible TCPMSS de iptables :

La cible TCPMSS peut être utilisée pour modifier la valeur MSS (Maximum Segment Size) des paquets TCP SYN que le pare-feu examine. La valeur MSS sert à contrôler la taille maximum des paquets d'une connexion spécifique. Dans des circonstances normales, ceci indique la taille de la valeur MTU (Maximum Transfert Unit), moins 40 octets. Elle est utilisée pour éviter que certains fournisseurs d'accès ou serveurs bloquent la fragmentation ICMP des paquets, ce qui peut provoquer des problèmes mystérieux, qui peuvent être décrits principalement par le fait que tout fonctionne parfaitement au niveau de notre routeur/pare-feu, mais que nos hôtes locaux derrière le pare-feu ne peuvent échanger des paquets importants. Ceci peut se traduire par certaines choses comme des serveurs de courrier capables d'envoyer des petits mails, mais pas des gros, des navigateurs web qui se connectent mais ensuite se figent en ne recevant aucune donnée, une connexion ssh propre, mais dont le scp est suspendu après l'établissement de la liaison. Autrement dit, tout ce qui utilise des paquets importants sera incapable de fonctionner.

La cible TCPMSS est capable de résoudre ces problèmes, en changeant la taille des paquets sortants d'une connexion. Notez que nous avons uniquement besoin de placer le MSS sur le paquet SYN, les hôtes s'occupant du MSS après ça. La cible prend deux arguments.

http://www.inetdoc.net/guides/iptables-tutorial/tcpmsstarget.html