PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : TCP/IP-Packet-Resend via C#


RattuS
2011-12-06, 12:29:53
Hallo,

meine Anwendung hört einen ausgewählten Netzwerkadapter ab, filtert nach einer bestimmten Ziel-Adresse (bis hierhin funktioniert alles einwandfrei) und soll dann die jeweiligen Pakete x-Mal erneut (an die selbe Ziel-Adresse) senden. Das Senden ansich funktioniert (laut WireShark), es gibt also keine Problem, was die Sockets bzw. Windows 7 angeht. Allerdings scheinen die Pakete entweder beim Ziel nicht anzukommen oder verworfen zu werden. Ich vermute, dass ich etwas auf dem Schlauch stehe, was den Paketaufbau betrifft. Derzeit kopiere ich den IP-Header und Datenbereich 1:1 in die neu zu sendenen Pakete. Wer sieht einen Fehler? :(

Markus89
2011-12-06, 13:15:41
TCP ist so aufgebaut, dass ein Segment nur einmal ankommt. IP hingegen ist unzuverlässig: Pakete können verloren gehen, in falscher Reihenfolge oder eben mehrfach ankommen. TCP will genau das eben nicht und verwirft doppelte Segmente einfach.

Gast
2011-12-06, 16:13:25
Du solltest dir TCP kurz anschauen, ist auch nicht sonderlich kompliziert - vielleicht kümmerst du dich nicht korrekt um die Sequenznummern der TCP-Pakete.

RattuS
2011-12-06, 22:23:54
Hm ja, mir ist aufgefallen, dass ich nichts am TCP-Part verändere. Sozusagen habe ich nur eine Retransmission mit der selben SEQ - kein Wunder, dass das Paket beim Ziel nur einmal verarbeitet wird. Ich müsste also nur die SEQ inkrementieren, die Checksumme neu berechnen und dann abschicken oder? Die nachfolgenden Pakete, um die ich mich nicht weiter kümmere, dürften durch das ACK vom Ziel ja die "manipulierte" neue SEQ wissen oder?