Freebsd 6.2 : pb de TCP window scale ? et quoi d'autre ?

Le
Siddharta
Bonjour à tous,

je dispose d'un reseau hétérogène (windows xp, windows 2003 server,
freebsd 6.2, Ubuntu Feisty) qui se connecte a internet via un routeur/
gateway/server DNS/firewall OpenBSD 4.1, les machines se répartissent
sous 3 sous réseaux différents :
-192.168.0.0/30 (reseaux exterieur)
-192.168.1.0/29 (reseau serveur)
-192.168.2.0/27 (reseau desktop)

toutes les machines se pinguent et accedent a internet enfin
presque !!
Pour les tests de debug ci dessous ils sont fait avec firewall
desactivé (pfctl -d)

En effet sur un meme sous reseau donné les machines Linux/freebsd
n'affichent pas la totalité des sites alors que les windows xp les
affichent , pour les freebsd/linux les symptomes sont un chargement
infini de la page (en vain ) jusqu'a coupure de la connexion par le
site distant. J'ai remarqué ce probleme avec l'url http://www.freebsddiar=
y.org
(mais j'ai les meme probleme avec la plupart des sites ubuntu
également) j'affiche la page concernée sous windows XP et je ne
l'affiche pas sous les Unix-like. En discutant sur le canal irc
#openbsd de Freenode, une personne m'a orientée sur la piste d'un
probleme de TCP Window Scale et qu'il me fallait faire des analyses
avec tcpdump sur le routeur OpenBSD.


tcpdump d'une Connexion au site http://www.freebsddiary.org via le pc
windows (192.168.2.3) qui fonctionne donc:

# tcpdump host 192.168.2.3 and port 80
tcpdump: listening on xl0, link-type EN10MB
22:43:20.786162 192.168.2.3.4580 > 80.252.93.102.www: S
61070144:61070144(0) win 65535 <mss 1260,nop,nop,sackOK> (DF)
22:43:20.841949 80.252.93.102.www > 192.168.2.3.4580: S
2209311614:2209311614(0) ack 61070145 win 5840 <mss
1460,nop,nop,sackOK> (DF)
22:43:20.842261 192.168.2.3.4580 > 80.252.93.102.www: . ack 1 win
65535 (DF)
22:43:20.842611 192.168.2.3.4580 > 80.252.93.102.www: P 1:626(625) ack
1 win 65535 (DF)
22:43:20.917595 80.252.93.102.www > 192.168.2.3.4580: . ack 626 win
6875 (DF)
22:43:20.928520 80.252.93.102.www > 192.168.2.3.4580: . 1:1261(1260)
ack 626 win 6875 (DF)
22:43:20.929449 80.252.93.102.www > 192.168.2.3.4580: P 1261:1702(441)
ack 626 win 6875 (DF)
22:43:20.929714 80.252.93.102.www > 192.168.2.3.4580: F 1702:1702(0)
ack 626 win 6875 (DF)
22:43:20.929803 192.168.2.3.4580 > 80.252.93.102.www: . ack 1702 win
65535 (DF)
22:43:20.929891 192.168.2.3.4580 > 80.252.93.102.www: . ack 1703 win
65535 (DF)
22:43:20.933146 192.168.2.3.4580 > 80.252.93.102.www: F 626:626(0) ack
1703 win 65535 (DF)
22:43:20.990707 80.252.93.102.www > 192.168.2.3.4580: . ack 627 win
6875 (DF)
[]

Au vu du win 65535 j'ai donc adapté dans freebsd au niveau du fichier /
etc/sysctl.conf (Merci à QuirK) car j'avais une valeur inférieure lors
de mes tests de tcpdump.

net.inet.tcp.recvspace=65535
net.inet.tcp.sendspace=65535
(j'avais essayé aussi net.net.tcp.rfc1323=0 mais ras , je me suis donc
dis qu'il valait mieux le retablir)

puis reboot
puis test a nouveau du tcpdump mais en lançant l'url depuis le FreeBSD
cette fois (192.168.2.4)

# tcpdump ip host 192.168.2.4 and port 80
tcpdump: listening on xl0, link-type EN10MB
23:01:44.797161 192.168.2.4.52911 > nyi.unixathome.org.www: F
78904001:78904001(0) ack 3948380736 win 65535 <nop,nop,timestamp
1315835 858126149,nop,nop,sack 1 {4345:4515} > (DF)
23:01:45.360652 192.168.2.4.52911 > nyi.unixathome.org.www: F 0:0(0)
ack 1 win 65535 <nop,nop,timestamp 1316399 858126149,nop,nop,sack 1
{4345:4515} > (DF)
23:01:45.501800 nyi.unixathome.org.www > 192.168.2.4.52911: .
4515:5793(1278) ack 0 win 33304 <nop,nop,timestamp 858240922 1316399>
(DF)
23:01:45.502337 192.168.2.4.52911 > nyi.unixathome.org.www: R
78904001:78904001(0) win 0 (DF)
23:01:48.303084 192.168.2.4.59930 > nyi.unixathome.org.www: S
3422422387:3422422387(0) win 65535 <mss 1460,nop,wscale
0,nop,nop,timestamp 1319341 0,sackOK,eol> (DF)
23:01:48.415966 nyi.unixathome.org.www > 192.168.2.4.59930: S
191119796:191119796(0) ack 3422422388 win 65535 <mss 1460,nop,wscale
1,nop,nop,timestamp 858243865 1319341,sackOK,eol> (DF)
23:01:48.416255 192.168.2.4.59930 > nyi.unixathome.org.www: . ack 1
win 65535 <nop,nop,timestamp 1319455 858243865> (DF)
23:01:48.416725 192.168.2.4.59930 > nyi.unixathome.org.www: P
1:382(381) ack 1 win 65535 <nop,nop,timestamp 1319455 858243865> (DF)
23:01:48.600591 nyi.unixathome.org.www > 192.168.2.4.59930: P
4345:4515(170) ack 382 win 33304 <nop,nop,timestamp 858244011 1319455>
(DF)
23:01:48.600849 192.168.2.4.59930 > nyi.unixathome.org.www: . ack 1
win 65535 <nop,nop,timestamp 1319639 858243865,nop,nop,sack 1
{4345:4515} > (DF)

eh voila c'est la que je bloque le xp et le Freebsd sont dans le meme
sous reseau (addressage statique), ont le meme dns de paramétré et ils
ne resolvent pas de la meme manière et le FreeBSD n'affiche
toujours pas la page du site.

Si vous aviez une piste, un conseil je vous remercie d'avance
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Siddharta
Le #895867
On 30 juil, 23:18, Siddharta
Bonjour à tous,

je dispose d'un reseau hétérogène (windows xp, windows 2003 server,
freebsd 6.2, Ubuntu Feisty) qui se connecte a internet via un routeur/
gateway/server DNS/firewall OpenBSD 4.1, les machines se répartissent
sous 3 sous réseaux différents :
-192.168.0.0/30 (reseaux exterieur)
-192.168.1.0/29 (reseau serveur)
-192.168.2.0/27 (reseau desktop)

toutes les machines se pinguent et accedent a internet... enfin
presque !!
Pour les tests de debug ci dessous ils sont fait avec firewall
desactivé (pfctl -d)

En effet sur un meme sous reseau donné les machines Linux/freebsd
n'affichent pas la totalité des sites alors que les windows xp les
affichent , pour les freebsd/linux les symptomes sont un chargement
infini de la page (en vain ) jusqu'a coupure de la connexion par le
site distant. J'ai remarqué ce probleme avec l'urlhttp://www.freebsddia ry.org
(mais j'ai les meme probleme avec la plupart des sites ubuntu
également) j'affiche la page concernée sous windows XP et je ne
l'affiche pas sous les Unix-like. En discutant sur le canal irc
#openbsd de Freenode, une personne m'a orientée sur la piste d'un
probleme de TCP Window Scale et qu'il me fallait faire des analyses
avec tcpdump sur le routeur OpenBSD.

tcpdump d'une Connexion au sitehttp://www.freebsddiary.orgvia le pc
windows (192.168.2.3) qui fonctionne donc:

# tcpdump host 192.168.2.3 and port 80
tcpdump: listening on xl0, link-type EN10MB
22:43:20.786162 192.168.2.3.4580 > 80.252.93.102.www: S
61070144:61070144(0) win 65535 <mss 1260,nop,nop,sackOK> (DF)
22:43:20.841949 80.252.93.102.www > 192.168.2.3.4580: S
2209311614:2209311614(0) ack 61070145 win 5840 <mss
1460,nop,nop,sackOK> (DF)
22:43:20.842261 192.168.2.3.4580 > 80.252.93.102.www: . ack 1 win
65535 (DF)
22:43:20.842611 192.168.2.3.4580 > 80.252.93.102.www: P 1:626(625) ack
1 win 65535 (DF)
22:43:20.917595 80.252.93.102.www > 192.168.2.3.4580: . ack 626 win
6875 (DF)
22:43:20.928520 80.252.93.102.www > 192.168.2.3.4580: . 1:1261(1260)
ack 626 win 6875 (DF)
22:43:20.929449 80.252.93.102.www > 192.168.2.3.4580: P 1261:1702(441)
ack 626 win 6875 (DF)
22:43:20.929714 80.252.93.102.www > 192.168.2.3.4580: F 1702:1702(0)
ack 626 win 6875 (DF)
22:43:20.929803 192.168.2.3.4580 > 80.252.93.102.www: . ack 1702 win
65535 (DF)
22:43:20.929891 192.168.2.3.4580 > 80.252.93.102.www: . ack 1703 win
65535 (DF)
22:43:20.933146 192.168.2.3.4580 > 80.252.93.102.www: F 626:626(0) ack
1703 win 65535 (DF)
22:43:20.990707 80.252.93.102.www > 192.168.2.3.4580: . ack 627 win
6875 (DF)
[...]

Au vu du win 65535 j'ai donc adapté dans freebsd au niveau du fichier /
etc/sysctl.conf (Merci à QuirK) car j'avais une valeur inférieure lors
de mes tests de tcpdump.

net.inet.tcp.recvspacee535
net.inet.tcp.sendspacee535
(j'avais essayé aussi net.net.tcp.rfc1323=0 mais ras , je me suis donc
dis qu'il valait mieux le retablir)

puis reboot
puis test a nouveau du tcpdump mais en lançant l'url depuis le FreeBSD
cette fois (192.168.2.4)

# tcpdump ip host 192.168.2.4 and port 80
tcpdump: listening on xl0, link-type EN10MB
23:01:44.797161 192.168.2.4.52911 > nyi.unixathome.org.www: F
78904001:78904001(0) ack 3948380736 win 65535 <nop,nop,timestamp
1315835 858126149,nop,nop,sack 1 {4345:4515} > (DF)
23:01:45.360652 192.168.2.4.52911 > nyi.unixathome.org.www: F 0:0(0)
ack 1 win 65535 <nop,nop,timestamp 1316399 858126149,nop,nop,sack 1
{4345:4515} > (DF)
23:01:45.501800 nyi.unixathome.org.www > 192.168.2.4.52911: .
4515:5793(1278) ack 0 win 33304 <nop,nop,timestamp 858240922 1316399>
(DF)
23:01:45.502337 192.168.2.4.52911 > nyi.unixathome.org.www: R
78904001:78904001(0) win 0 (DF)
23:01:48.303084 192.168.2.4.59930 > nyi.unixathome.org.www: S
3422422387:3422422387(0) win 65535 <mss 1460,nop,wscale
0,nop,nop,timestamp 1319341 0,sackOK,eol> (DF)
23:01:48.415966 nyi.unixathome.org.www > 192.168.2.4.59930: S
191119796:191119796(0) ack 3422422388 win 65535 <mss 1460,nop,wscale
1,nop,nop,timestamp 858243865 1319341,sackOK,eol> (DF)
23:01:48.416255 192.168.2.4.59930 > nyi.unixathome.org.www: . ack 1
win 65535 <nop,nop,timestamp 1319455 858243865> (DF)
23:01:48.416725 192.168.2.4.59930 > nyi.unixathome.org.www: P
1:382(381) ack 1 win 65535 <nop,nop,timestamp 1319455 858243865> (DF)
23:01:48.600591 nyi.unixathome.org.www > 192.168.2.4.59930: P
4345:4515(170) ack 382 win 33304 <nop,nop,timestamp 858244011 1319455>
(DF)
23:01:48.600849 192.168.2.4.59930 > nyi.unixathome.org.www: . ack 1
win 65535 <nop,nop,timestamp 1319639 858243865,nop,nop,sack 1
{4345:4515} > (DF)

eh voila c'est la que je bloque le xp et le Freebsd sont dans le meme
sous reseau (addressage statique), ont le meme dns de paramétré et ils
ne resolvent pas de la meme manière ... et le FreeBSD n'affiche
toujours pas la page du site.

Si vous aviez une piste, un conseil... je vous remercie d'avance


Bon alors ca y est le problème est réglé (encore merci a QuiRK pour
m'avoir mis sur la piste du MTU), pour info voici comment je m'y suis
pris

Comme sur le pc windows xp je pouvais aller sur tous les sites testés,
j'ai donc essayé de trouver le bon MTU (maximum tranfert unit).
L'hypothese de départ était que ma MTU sur les FreeBSD/Linux était
trop élevé, il faudrait donc la diminuer, sur les Unix-like elle est a
1500 :
#ifconfig fxp0
fxp0: flagsˆ43<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=8<VLAN_MTU>
inet6 fe80::20f:1fff:fec1:de99%fxp0 prefixlen 64 scopeid 0x3
inet 192.168.2.4 netmask 0xffffffe0 broadcast 192.168.2.31
ether 00:0f:1f:c1:de:99
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active

Sur le windows XP j'ai donc trouvé le MTU optimal par essai-erreur (si
qq un a une methode plus directe, ca m'interesse) et j'en suis arrivé
à 1272 :

C:Documents and Settingsmoi>ping -f -l 1273 192.168.2.1

Envoi d'une requête 'ping' sur 192.168.2.1 avec 1273 octets de
données :

Le paquet doit être fragmenté mais paramétré DF.
Le paquet doit être fragmenté mais paramétré DF.
Le paquet doit être fragmenté mais paramétré DF.
Le paquet doit être fragmenté mais paramétré DF.

Statistiques Ping pour 192.168.2.1:
Paquets : envoyés = 4, reçus = 0, perdus = 4 (perte 100%),

C:Documents and Settingsmoi>ping -f -l 1272 192.168.2.1

Envoi d'une requête 'ping' sur 192.168.2.1 avec 1272 octets de
données :

Réponse de 192.168.2.1 : octets72 temps=1 ms TTL%5
Réponse de 192.168.2.1 : octets72 temps=1 ms TTL%5
Réponse de 192.168.2.1 : octets72 temps=1 ms TTL%5
Réponse de 192.168.2.1 : octets72 temps=1 ms TTL%5

Statistiques Ping pour 192.168.2.1:
Paquets : envoyés = 4, reçus = 4, perdus = 0 (perte 0%),
Durée approximative des boucles en millisecondes :
Minimum = 1ms, Maximum = 1ms, Moyenne = 1ms


On peut voir qu'avec une valeur a 1272 on obtient une reponse alors
qu'avec 1273 on ne l'obtient pas
la commande passée se décompose ainsi :
ping -f -l (taille du paquet -28) (IP de votre serveur)
- (-f) = ne pas fragmenter dans le paquet (paquet entier)
- (-l) = indiquer la taille du paquet
- 1272 = MTU optimale = MTU maximale - 28 (pour les en-têtes ICMP et
IP)
- 192.168.2.1 = IP de mon serveur (gateway)

Une fois la MTU optimale défini , en lui ajoutant 28 on obtient la MTU
maximale qui est donc de 1300

enfin il ne reste plus qu'a passer la mtu sur le FreeBSD de 1500 à
1300
# ifconfig fxp0 mtu 1300
on verifie
# ifconfig fxp0
fxp0: flagsˆ43<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1300
options=8<VLAN_MTU>
inet6 fe80::20f:1fff:fec1:de99%fxp0 prefixlen 64 scopeid 0x3
inet 192.168.2.4 netmask 0xffffffe0 broadcast 192.168.2.31
ether 00:0f:1f:c1:de:99
media: Ethernet autoselect (100baseTX <full-duplex>)
status: active

et la ... miracle ... le site http://www.freebsddiary.org s'affiche

je me suis basé sur cette doc pour changer la MTU :
http://www.dslvalley.com/dossiers/mtu/mtu.php

Publicité
Poster une réponse
Anonyme