Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[TCP] Checksum-errors; Router brak? Andere oorzaak?

Pagina: 1
Acties:

  • Osiris
  • Registratie: Januari 2000
  • Niet online

Casus: Brakke TCP-verbindingen

Het probleem
Ik heb al sinds een jaar of twee last van het probleem dat één van de twee 'halve verbindingen' van een TCP-verbinding 'stopt'. Dat uit zich bijvoorbeeld op IRC, maar ook steeds vaker op normale sites.
Op IRC merk ik dat er al tijden geen "berichtjes" meer doorkomen en de lag-meter spiket tot z'n max.. Totdat IRC disconnected raakt. Berichtjes die ik zelf blaat komen echter nog wél bij de server en andere chatters aan! Bij sites laadt de site gewoon niet.

WireShark to the rescue: packet-dumps *O*
Naar wat packet-snif-werk ben ik er achter dat er iets mis gaat met de inhoud van de TCP-pakketjes van de inbound TCP-helft. Uitgaande zooi gaat tot nu toe altijd nog prima. Als het probleem zich voordoet, dan "zie" ik niets meer van het IRC-gechat doorkomen, maar zien anderen al mijn geblaat nog wél. In de packet-dump zie je dat ook duidelijk, mijn IRC-requests (geblaat van mijn kant dus ;)) leveren zelfs nog prima een ACK op van de IRC-server, maar de inkomende helft stagneert vanwege het achterwege blijven van ACK's van mijn kant. Nogal logisch, waarom zou mijn TCP-stack ACK's gaan versturen voor brakke pakketjes met foutieve checksum (naar het blijkt is dat namelijk het probleem)? En zolang ik niet ACK, verstuurt de server geen nieuwe pakketjes meer, zodat de verbinding blijft 'hangen'. Het probleem doet zich echter ook voor bij normale sites, zo af en toe. (Sites zijn wat makkelijker te sniffen, want zelfs na F5/Ctrl-F5/whatever doet het probleem zich voor...)

Nu dan toch echt de packet-dumps :+
Anywayz, voorbeeldje van toen ik Weer.nl wilde bezoeken:

Afbeeldingslocatie: http://meuk.osiris.sapcentrifuge.net/packet-dump%20buggy%20css-file.png

Analyse van de éérste rood/zwarte packet:

Transmission Control Protocol, Src Port: http (80), Dst Port: 1851 (1851), Seq: 1, Ack: 460, Len: 1354
   Source port: http (80)
   Destination port: 1851 (1851)
   Sequence number: 1    (relative sequence number)
   Next sequence number: 1355    (relative sequence number)
   Acknowledgement number: 460    (relative ack number)
   Header length: 20 bytes
   Flags: 0x18 (PSH, ACK)
   Window size: 6432
[b]   Checksum: 0xfd15 [incorrect, should be 0x051e (maybe caused by checksum offloading?)][/]
   SEQ/ACK analysis
      This is an ACK to the segment in frame: 7
      The RTT to ACK the segment was: 0.002548000 seconds
      TCP Analysis Flags
         This frame is a (suspected) out-of-order segment

Checksum incorrect? WTF? Eens kijken wat er in het pakketje staat dan...:
[me]Hele boel CSS-regels, ff weg voor duidelijkheid  *[/]
.linklist ul li ass="last"><div id="anchorIDf36dfe5298" suBnC2ArJq71lC2gDhkHFoCjN14zHmtBs3YDjg0DIRglbiOI
c\303\004\215:,=(z\000\000\000\000\000\000\000
^X<\227\000P\177\a:n\b\000E\000\000(\320\342

Die "\ddd" (waarbij "d" voor digit staat)-meuQ is, uiteraard, een non-ASCII character. Dit is overigens aan het einde van het pakketje, niet middenin ofzo.

Dát is géén CSS-code meer! Dat is dus random onzin-data wat in 't pakketje zit...

Als je eventjes weer teruggaat naar het pakketjes-overzicht, dan zie je ook een "Previous segment lost"-pakketje staan met de TCP-flags "FIN, ACK". Dat wil dus zeggen dat de server (server was de source van het pakketje) de TCP-verbinding wil beëindigen. Huh? Nu al? Het was immers pas pakketje 6, praktisch vlak na de HTTP GET?

Kijken we even naar de SYN/ACK-analyse:

Sequence number: 1355    (relative sequence number)
Acknowledgement number: 460    (relative ack number)

Hey, 1355? Waar hadden we dat eerder gezien? Ohja, bij de "Next sequence number" van het kapotte pakketje! Het "data"-pakketje met m'n CSS-file die dus blijkbaar allang verstuurd had moeten zijn!

Klaarblijkelijk heeft de server het "data"-pakketje verstuurd en besloot het maar meteen de TCP-verbinding dicht te gooien (geen "keep-alive"), terwijl de CSS-data (hoewel foutief) pas 2,6 ms bij m'n systeem (Wireshark) aan kwam? Waar is het oorspronkelijke pakketje gebleven?

't Wekt bij mij eerlijk gezegd meer vragen op dan dat er beantwoord wordt :+

Verdere beknopte informatie
[list]• De "onzin-data" achteraan de pakketjes is random per herverstuurd pakketje, steeds anders dus;
• Het is OS-onafhankelijk: Ik draai hier dualboot en zowel mijn Gentoo Linux als mijn Windows XP-installatie hebben last van het probleem;
• Het is "lokatie"-afhankelijk: Ik heb het alleen hier op mijn studentenkamer in Utrecht. Bij mijn ouders met een andere router/switch/bekabeling gaat het prima;
• Het is hoogstwaarschijnlijk systeem-afhankelijk: mijn server met 3Com-NIC en ook Gentoo Linux heeft naar mijn weten nergens last van, mijn laptop wel;
• Het is, denk ik, "packet"-afhankelijk: 100x op (Ctrl-)F5 rammen/Stop-Reload/Stop-handmatig weer op enter drukken in de adresbalk hadden allemaal geen nut. Mijn browser verstuurde immers identieke HTTP-requests gevolgd met een identieke HTTP-reply. Toen ik mijn weer.nl-cookie wegpleurde, werkte het opeens vlekkeloos! Dus ik dénk dat er een bepaalde "trigger" in het pakketje moet zitten ofzo? :?

De vraag: wat is de oorzaak?
What the #*()$ kan de oorzaak van zo'n vaag probleem zijn? Je zou immers denken: stuk = stuk, dus dan zou je d'r altijd last van moeten hebben? Nee, het doet zich alleen voor bij specifieke situaties.

Ik denk zelf dat het mijn router (een Draytek Vigor 2600 WE) is. Wellicht een geheugen-probleem? Hij wordt niet te warm, hij hangt netjes in een soort post-verzamel-rekje onder onze telefoon etc, genoeg koeling dus.
Maar waarom dan alleen m'n laptop er last van heeft? Mijn server gaat namelijk via dezelfde switch... Ook kreeg ik er op ten duur ook last van via WiFi. Dit was eerder niet zo. Maar aangezien WiFi de switch omzijlt, lijkt 't me geen kabel/switch-probleem.

Is er wellicht iemand die al eens eerder van dit vage probleem heeft gehoord en zou iemand wellicht ook een oplossing weten? :+

Ik ben vooral benieuwd naar een beter diagnose-middel: hoe kan ik zeker weten dat het m'n router is, zonder dat ik teveel €€€'s uit moet geven?

Verwijderd

packetloss, of fragmentatie? er is ook reconstructie mogenlijk ben even de correcte naam daarvoor kwijt. Verder zorgen dat je minimaal 10-20% upload bandbreedte vrijhoudt om je verbinding gesmeerd te houden.

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op maandag 12 maart 2007 @ 19:44:
packetloss, of fragmentatie? er is ook reconstructie mogenlijk ben even de correcte naam daarvoor kwijt. Verder zorgen dat je minimaal 10-20% upload bandbreedte vrijhoudt om je verbinding gesmeerd te houden.
Verbinding is voor de rest, op wat MSN-verkeer na et cetera, compleet vrij. (Lees: gemiddeld nog niet één byte per seconde op een pijp van 6-8 Mbit.)

En ja, d'r is dus één packet verloren, maar het is niet "packetloss" zoals je normaal zou verwachten, zoals bij pingen (ICMP) ofzo. Sowieso, sinds wanneer zorgt packetloss voor data-corruptie in pakketjes die wél doorkomen? :o

Verder is er niets gefragmenteerd, de CSS past blijkbaar netjes in één pakketje. Kan verder niet echt een 'fragmentation'-flag vinden bij TCP, maar bij 't IP-protocol staat niets wat aangeeft dat 't gefragmenteerd is. Dat zou WireShark ook wel aangeven overigens in het overzicht ;)

Verwijderd

iig maak eerst die netwerk configs van beide client computers gelijk. (mtu / full/half duplex etc)

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op maandag 12 maart 2007 @ 19:57:
iig maak eerst die netwerk configs van beide client computers gelijk. (mtu / full/half duplex etc)
Laptop
[b][red]flaptop[/][blue] ~ #[/][/] mii-diag 
Using the default interface 'eth0'.
Basic registers of MII PHY #31:  1100 786d 0000 8201 01e1 45e1 0001 0000.
 The autonegotiated capability is 01e0.
The autonegotiated media type is 100baseTx-FD.
 Basic mode control register 0x1100: Auto-negotiation enabled.
 You have link beat, and everything is working OK.
 Your link partner advertised 45e1: Flow-control 100baseTx-FD 100baseTx 10baseT-FD 10baseT, w/ 802.3X flow control.
   End of basic transceiver information.

[b][red]flaptop[/][blue] ~ #[/][/] ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:40:CA:C3:00:3C  
          inet addr:192.168.2.3  Bcast:192.168.255.255  Mask:255.255.0.0
          inet6 addr: niet relevant Scope:Global
          inet6 addr: fe80::240:caff:fec3:3c/64 Scope:Link
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:5935 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5779 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:3521073 (3.3 Mb)  TX bytes:802645 (783.8 Kb)
          Interrupt:5 Base address:0x2000 

[b][red]flaptop[/][blue] ~ #[/][/]


Server
[b][red]server[/][blue] ~ #[/][/] mii-diag 
Using the default interface 'eth0'.
Basic registers of MII PHY #24:  3000 782d 0041 6800 05e1 45e1 0007 2801.
 The autonegotiated capability is 01e0.
The autonegotiated media type is 100baseTx-FD.
 Basic mode control register 0x3000: Auto-negotiation enabled.
 You have link beat, and everything is working OK.
 Your link partner advertised 45e1: Flow-control 100baseTx-FD 100baseTx 10baseT-FD 10baseT, w/ 802.3X flow control.
   End of basic transceiver information.

[b][red]server[/][blue] ~ #[/][/] ifconfig eth0
eth0      Link encap:Ethernet  HWaddr 00:0A:5E:58:3C:97  
          inet addr:192.168.2.1  Bcast:192.168.255.255  Mask:255.255.0.0
          inet6 addr: niet relevant Scope:Global
          inet6 addr: fe80::20a:5eff:fe58:3c97/64 Scope:Link
          UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:51657281 errors:0 dropped:0 overruns:1 frame:0
          TX packets:52278582 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:2885825767 (2752.1 Mb)  TX bytes:3160029128 (3013.6 Mb)
          Interrupt:11 Base address:0x2000 

[b][red]server[/][blue] ~ #[/][/]


Staat dus allemaal vrij identiek ingesteld. Overigens had een lagere MTU kiezen niet echt het gewenste effect. Stelde ik de MTU lager in, terwijl een bepaalde site (dus een bepaald bestand wat niet correct door kwam), dan werkte die site opeens wel.
Ook had 't standaard kiezen van een lagere MTU niet echt 't gewenste effect. Volgens mij had 't pas echt nut bij een MTU lager dan 200 bytes. Bij de 'normalere' MTU's bleef het probleem.

[ Voor 3% gewijzigd door Osiris op 12-03-2007 20:18 ]


Verwijderd

Sja, wissel het modem met dat huis waar het nu wel werkt.
Irritante test omdat je alles moet reconfiggen, maar dat zou iig lokaliseren waar het probleem zit.

Of koop een nieuwe voor een paar tientjes.

  • Osiris
  • Registratie: Januari 2000
  • Niet online
Verwijderd schreef op maandag 12 maart 2007 @ 21:24:
Sja, wissel het modem met dat huis waar het nu wel werkt.
Irritante test omdat je alles moet reconfiggen, maar dat zou iig lokaliseren waar het probleem zit.
Da's niet echt een handige optie hè, dan 'verdoem' je iig één huishouden tot internet-loos, dat doe je je ergste vijand nog niet aan! :P
Of koop een nieuwe voor een paar tientjes.
Sja, een Sweex modem/routertje om te testen wellicht, maar als eind-oplossing heb ik liever een fatsoenlijke modem/router-combo. 't Is alleen zo dat deze Draytek ons toentertijd €300,- kostte en een nieuwe 2600-series Draytek nog steeds boven de €150,- is geloof ik.. En toevallig voldoet m'n Draytek perfect aan al m'n specifieke eisen. Beetje huiverig om over te stappen eerlijk gezegd.

't Liefst zie ik dus ook een oplossing met mn huidige modem/router, maarja, bij hardware-issues kan dat nogal moeilijk :(

Zelfs een Sweex modem/router-combo kost je al meer dan €34,- :/

[ Voor 7% gewijzigd door Osiris op 18-03-2007 20:24 ]

Pagina: 1