marvin42 hat geschrieben:Alles was ich beim Lesen des Codes gesehen habe, deutete darauf hin, daß es die ganze Zeit ein ausstehendes echo reply war, das zum Schliessen der Verbindung geführt hat.
im endeffekt war natürlich das der grund (allerdings lcp echo replies, nicht pptp echo replies), aber (im ersten fehlerfall dieses threads) war die eigentliche ursache eine andere: der pptp-client in der standardversion schenkt den sequence numbers der gre-encapsulation zu viel beachtung.
beispiel: pptp-client empfängt paket mit seqnum 10. somit erwartet er als nächstes ein paket mit der nummer 11. dieses geht nun aber verloren, und der pptp-client empfängt statt dessen nur das übernächste paket mit der nummer 12. der pptp-client geht nun davon aus, daß das paket mit der nummer 11 irgendwann später eintrifft, puffert das paket 12 und leitet es (erstmal) nicht an die oberen layers (pppd) weiter. ebenso behandelt er die weiteren pakete 13, 14 usw. erst wenn er das fehlende paket 11 bekommen würde oder ein timeout der puffers zuschlägt, würde er die gepufferten pakete allesammt an die oberen layers weiterleiten.
ebenso, und teilweise mit gravierenderen auswirkungen, behandelt der pptp-client andere situation, in denen die sequence numbers nicht regelmäßig ansteigend eintreffen. im endeffekt erhält der pppd keine lcp echo requests (oder sonstigen pakete) mehr für längere zeit, wodurch er irgendann die connection beendet.
aber die pptp rfc sagt ausdrücklich, daß die sequence numbers
nur zur "congestion control" verwendet werden dürfen und u.u. zum reordering der pakete, ein peer aber
nie verlorene gre-pakete neu verschickt (wie zb tcp es macht). somit ist diese ganze pufferung von paketen zwar ganz nett, wenn dauerhaft genau 0.0% packet loss existieren; sie wirkt sich aber teilw. katastrophal aus, wenn pakete verlorengehen (was automatisch der fall ist, sobald die leitung belastet ist, wie zb bei downloads oder uploads).