Ons bedrijf heeft last van een redelijk vervelend probleem met een linux server (centos). Op deze server draait een webserver, SVN en samba, een allround servertje dus.
De gebruikers met Windows 7 melden dat zij vaak de server niet kunnen bereiken, welk protocol maakt niet uit (ook pingen naar de machine werkt dan niet). Na enkele minuten kunnen zij weer keurig verbinden en is het probleem weg. Ditzelfde probleem is ook 1 keer op een Mac voorgekomen. Mijn eigen workstation draait Fedora en ikzelf heb dit probleem geen 1 keer gehad (en ik zit constant op de server).
Onze netwerk-topologie is vrij simpel: een unmanaged Cisco switch met daaraan de router, alle workstations en de server. Mijn workstation (die nog nooit problemen heeft gehad) zit dus op dezelfde manier verbonden met de server als de rest van de workstations.
Op de server heb ik een aantal keer Wireshark laten draaien en zag dat elke keer als een PC niet meer verbinding kon leggen met de server, deze een window size van 0 aan de server doorgaf en vervolgens een tijdlang geen pakketjes meer stuurde naar de server. Na een tijd probeert de server weer verbinding te leggen met de client waarna alles weer vrolijk hervat wordt.
Het belangrijkste stukje log: 192.168.1.100 is de server, 192.168.1.136 de client. Bovenaan wat verkeer wat nog goed gaat, onderaan de log zit het probleem.
No. Time Source Destination Protocol Info
22367 10.154122 192.168.1.136 192.168.1.100 TCP 54871 > http [SYN] Seq=0 Win=8192 Len=0 MSS=1464 WS=8
No. Time Source Destination Protocol Info
22368 10.154209 192.168.1.100 192.168.1.136 TCP http > 54871 [SYN, ACK] Seq=0 Ack=1 Win=14600 Len=0 MSS=1460 WS=7
No. Time Source Destination Protocol Info
22369 10.154372 192.168.1.136 192.168.1.100 TCP 54871 > http [ACK] Seq=1 Ack=1 Win=65536 Len=0
No. Time Source Destination Protocol Info
22371 10.154799 192.168.1.136 192.168.1.100 HTTP GET /recognize/favicon.ico HTTP/1.1
No. Time Source Destination Protocol Info
22372 10.154864 192.168.1.100 192.168.1.136 TCP http > 54871 [ACK] Seq=1 Ack=564 Win=15744 Len=0
No. Time Source Destination Protocol Info
22402 10.176158 192.168.1.100 192.168.1.136 HTTP HTTP/1.1 200 OK (image/vnd.microsoft.icon)
No. Time Source Destination Protocol Info
22403 10.176318 192.168.1.100 192.168.1.136 TCP http > 54871 [FIN, ACK] Seq=1164 Ack=564 Win=15744 Len=0
No. Time Source Destination Protocol Info
22405 10.176999 192.168.1.136 192.168.1.100 TCP 54871 > http [FIN, ACK] Seq=564 Ack=1164 Win=64512 Len=0
No. Time Source Destination Protocol Info
22406 10.177053 192.168.1.100 192.168.1.136 TCP http > 54871 [ACK] Seq=1165 Ack=565 Win=15744 Len=0
No. Time Source Destination Protocol Info
22689 10.378000 192.168.1.100 192.168.1.136 TCP http > 54871 [FIN, ACK] Seq=1164 Ack=565 Win=15744 Len=0
No. Time Source Destination Protocol Info
22690 10.378298 192.168.1.136 192.168.1.100 TCP [TCP ZeroWindow] 54871 > http [ACK] Seq=565 Ack=1165 Win=0 Len=0
Van wat ik lees is dit een zeer lastig probleem om te diagnosticeren. Hoe ik de situatie in de laatste vier regels zie (en verbeter me als dat fout is), is dat de client eerst aan de server doorgeeft dat hij een window van 64512 byte heeft, de server dan 2 pakketjes stuurt, en de client vervolgens laat weten dat zijn buffer vol is en de server voorlopig niks moet sturen.
Wat we tot nu toe geprobeerd hebben en niet heeft geholpen:
De gebruikers met Windows 7 melden dat zij vaak de server niet kunnen bereiken, welk protocol maakt niet uit (ook pingen naar de machine werkt dan niet). Na enkele minuten kunnen zij weer keurig verbinden en is het probleem weg. Ditzelfde probleem is ook 1 keer op een Mac voorgekomen. Mijn eigen workstation draait Fedora en ikzelf heb dit probleem geen 1 keer gehad (en ik zit constant op de server).
Onze netwerk-topologie is vrij simpel: een unmanaged Cisco switch met daaraan de router, alle workstations en de server. Mijn workstation (die nog nooit problemen heeft gehad) zit dus op dezelfde manier verbonden met de server als de rest van de workstations.
Op de server heb ik een aantal keer Wireshark laten draaien en zag dat elke keer als een PC niet meer verbinding kon leggen met de server, deze een window size van 0 aan de server doorgaf en vervolgens een tijdlang geen pakketjes meer stuurde naar de server. Na een tijd probeert de server weer verbinding te leggen met de client waarna alles weer vrolijk hervat wordt.
Het belangrijkste stukje log: 192.168.1.100 is de server, 192.168.1.136 de client. Bovenaan wat verkeer wat nog goed gaat, onderaan de log zit het probleem.
No. Time Source Destination Protocol Info
22367 10.154122 192.168.1.136 192.168.1.100 TCP 54871 > http [SYN] Seq=0 Win=8192 Len=0 MSS=1464 WS=8
No. Time Source Destination Protocol Info
22368 10.154209 192.168.1.100 192.168.1.136 TCP http > 54871 [SYN, ACK] Seq=0 Ack=1 Win=14600 Len=0 MSS=1460 WS=7
No. Time Source Destination Protocol Info
22369 10.154372 192.168.1.136 192.168.1.100 TCP 54871 > http [ACK] Seq=1 Ack=1 Win=65536 Len=0
No. Time Source Destination Protocol Info
22371 10.154799 192.168.1.136 192.168.1.100 HTTP GET /recognize/favicon.ico HTTP/1.1
No. Time Source Destination Protocol Info
22372 10.154864 192.168.1.100 192.168.1.136 TCP http > 54871 [ACK] Seq=1 Ack=564 Win=15744 Len=0
No. Time Source Destination Protocol Info
22402 10.176158 192.168.1.100 192.168.1.136 HTTP HTTP/1.1 200 OK (image/vnd.microsoft.icon)
No. Time Source Destination Protocol Info
22403 10.176318 192.168.1.100 192.168.1.136 TCP http > 54871 [FIN, ACK] Seq=1164 Ack=564 Win=15744 Len=0
No. Time Source Destination Protocol Info
22405 10.176999 192.168.1.136 192.168.1.100 TCP 54871 > http [FIN, ACK] Seq=564 Ack=1164 Win=64512 Len=0
No. Time Source Destination Protocol Info
22406 10.177053 192.168.1.100 192.168.1.136 TCP http > 54871 [ACK] Seq=1165 Ack=565 Win=15744 Len=0
No. Time Source Destination Protocol Info
22689 10.378000 192.168.1.100 192.168.1.136 TCP http > 54871 [FIN, ACK] Seq=1164 Ack=565 Win=15744 Len=0
No. Time Source Destination Protocol Info
22690 10.378298 192.168.1.136 192.168.1.100 TCP [TCP ZeroWindow] 54871 > http [ACK] Seq=565 Ack=1165 Win=0 Len=0
Van wat ik lees is dit een zeer lastig probleem om te diagnosticeren. Hoe ik de situatie in de laatste vier regels zie (en verbeter me als dat fout is), is dat de client eerst aan de server doorgeeft dat hij een window van 64512 byte heeft, de server dan 2 pakketjes stuurt, en de client vervolgens laat weten dat zijn buffer vol is en de server voorlopig niks moet sturen.
Wat we tot nu toe geprobeerd hebben en niet heeft geholpen:
- Andere netwerkkabels van de server naar de switch en van de workstation naar de switch
- Een netwerkkaart van 1 van de workstations op 100mbit gezet (omdat mijn workstation het wel altijd deed en op 100mbit werkt)