Laden...

Wie übertrage ich daten sicher?

Erstellt von Tosek vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.651 Views
T
Tosek Themenstarter:in
38 Beiträge seit 2006
vor 17 Jahren
Wie übertrage ich daten sicher?

Hallo,

ich möchte Dateien beliebiger Größe per TCP/IP sockets übertragen.
Wie kann ich sicherstellen, dass die Daten beim senden auch wirklich komplett ankommen?

Bei den bisherigen Samples ist es mr immer wieder passiert, dass bei größeren Datenmengen, nicht alles auf der gegenseite ankommt.

ich habe mir ein Sample angesehen, welches ein Filesharing Tool darstellt. Jedoch wird dort anscheinen auch kein zusätzlicher Mechanismus implementiert um die Vollständigkeit zu prüfen. Müsste man ein Resend oder sonstetwas (sliding Window) implementieren, oder übernehmen das eigentlich die Socket Klassen? Wenn ja, warum bekomme ich dann die Übertragungsfehler?

Gruß
Torsten

There are 10 diffent types of people in this world: Those who understand binary and those who don't....

4.506 Beiträge seit 2004
vor 17 Jahren

Hallo Tosek,

das TC-Protokoll (TCP) sorgt schon selbst dafür, dass alle Pakete beim Empfänger ankommen. Sollte ein Paket nicht ankommen, so sendet der Empfänger entsprechende Fehlermeldung, und das Paket wird nochmals verschickt.

Das geschieht alles auf Betriebssystem/Netzwerkkartenebene, so dass Du nie zu diesem Problem kommen solltest, solange Du keine Exception erhälst. Sollte mehrfache Versendung nicht möglich sein, so meldet die Netzwerkkarte einen Fehler, den Du als Exception während der Laufzeit feststellen kannst.

Wenn jetzt nicht alle Daten ankommen, dann liegt es an etwas anderem, und Du musst schauen, ob die Clientseite den richtigen Datenstrom empfängt, ob der Inhalt im Richtigen Format vorliegt, etc...

Gruß
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

2.082 Beiträge seit 2005
vor 17 Jahren

Hallo,

sowas nennt man auch Checksumme 😁

Es ist toll jemand zu sein, der nichts von der persönlichen Meinung Anderer hält. - frisch-live.de

T
Tosek Themenstarter:in
38 Beiträge seit 2006
vor 17 Jahren
...

Das heißt aber auch, dass die Daten u.U. auch doch nicht richtig ankommen könnten, wenn ich den Datenstrom erst wieder per CRC testen muss?

Ich habe das Beispiel aus diesem Forum (http://www.mycsharp.de/wbb2/thread.php?threadid=19670&hilight=sockets)
getestet und das Versenden des "großen" Paketes (etwa 2MB groß) klappt höchstens alle 10 mal und dies auf dem gleichen Rechner (127.0.0.1). Danach ist dann sogar das Sample hängengeblieben und muss per taskmanager abgeschossen werden. Kleine Texte scheinen immer anzukommen.

Woran kann dies liegen?

Grüsse
Torsten

There are 10 diffent types of people in this world: Those who understand binary and those who don't....

S
8.746 Beiträge seit 2005
vor 17 Jahren

TCP nimmt die Frage nach der Sicherheit ab, weil es jedes Datenpaket bestätigt. Das ist praktisch, aber natürlich nicht die schnellste Implementierung eines Transferprotokolls.

Eine nachträgliche Checksummenprüfung ist trotzdem sinnvoll. TCP sichert die Integrität eines Paketes zwar auch über eine Checksumme, aber durch die Größe der Pakete (relativ klein) und bei hoher Zahl von Paketen (großes File) ist die Wahrscheinlichkeit eines Fehler nicht mehr astronomisch klein (Fehlerwahrscheinlichkeiten addieren sich).

T
Tosek Themenstarter:in
38 Beiträge seit 2006
vor 17 Jahren
.

Aber wiederspricht sich das denn nicht?

Müsste dann nicht ein Datenstrom entweder nicht ankommen (da Kommunikation nicht verfügbar), oder korrekt ankommen (da TCP die korrekte Übertragung übernimmt)?

Wenn ich aber nun selbst im lokal loop so viele Fehler wie beschrieben bekomme, dann müsste ich ja 20-30 mal ein größeres File neu transferieren bis es endlich einmal korrekt und vollständig ankommt.

Wie löse ich das? (File evtl. in Stücken senden und am Client die Stücke wieder zusammenbauen?)

Gruß
Torsten

There are 10 diffent types of people in this world: Those who understand binary and those who don't....

S
8.746 Beiträge seit 2005
vor 17 Jahren

Korrekt oder nicht korrekt ist eine Frage der Checksummenprüfung. Auch Checksummen bergen die Wahrscheinlichkeit, dass ein Fehler nicht bemerkt wird, da er zu einer gleichen Checksumme wie die Originaldaten führt.

Die Ursache der Fehler, von denen du redest, liegt mit hoher Wahrscheinlichkeit in deinen Programm und sind nicht durch die Übertragung bedingt. Eventuell besteht ein Bug in der Socket-Implementierung bei großen Blöcken. Davon würde ich aber nicht ausgehen.

Dass ein File mit TCP nicht korrekt (aber vollständig) übertragen wird ist eher SEHR gering (< Promille).

S
1.047 Beiträge seit 2005
vor 17 Jahren

Müsste dann nicht ein Datenstrom entweder nicht ankommen (da Kommunikation nicht verfügbar), oder korrekt ankommen (da TCP die korrekte Übertragung übernimmt)?

wie gesagt können sich die fehler auch summieren... d.h. du hast mehrere fehler drin, so das eine prüfsumme trotzdem wieder korrekt ist... kommt halt drauf an wie die prüfsumme ermittelt wird

simples beispiel: prüfen über die quersumme
daten die rein gehen: 1234
quersumme: 1+2+3+4=10
daten die ankommen: 2125
quersumme:2+1+2+5=10

obwohl was ganz anderes an daten ankommt scheinen sie laut quersumme ok zu sein... und nu?

die implementierten prüfsummenalgorithmen für die datenübertragen benutzen natürlich etwas viel komplizierteres wo die warscheinlichkeit sehr gering ist das sowas passiert

Wenn ich aber nun selbst im lokal loop so viele Fehler wie beschrieben bekomme, dann müsste ich ja 20-30 mal ein größeres File neu transferieren bis es endlich einmal korrekt und vollständig ankommt.

Wenn du lokal soviele Fehler bekommst dann is irgendwas am Programm faul. Lokal solltest du garkeine Fehler bekommen, es sei denn die Hardware o.ä. spinnt bei dir.

T
Tosek Themenstarter:in
38 Beiträge seit 2006
vor 17 Jahren
..

Hallo,

das mit den Checksummen ist mir klar.

Ich frage mich, was dies für eine Phänomen auf meinem Rechner ist. Ich habe das Beispiel jetzt auf dem Rechner eines Kollegen ausprobiert. Dort kann ich auch immer per lokal loop die große datei ohne Übertragungsfehler transferieren. Auf meinem Rechner gibt es fast immer einen Fehler. Woran kann sowas liegen?

Ich habe eigentlich kein Problem mit irgendwelches Netztwerkthemen bislang festtsellen können und mein Rechner ist immer und kommuniziert immer mit dem Netzwerk. Ohne Probleme.

Wie kann ich das wohl analysiere bzw. dem Problem auf die Spur kommen?

There are 10 diffent types of people in this world: Those who understand binary and those who don't....

S
1.047 Beiträge seit 2005
vor 17 Jahren

Ganz ehrlich?

Keine Ahnung 🙁

Ich würd folgendes machen: Google benutzen und schaun ob ich was im Netz zu dem Thema finde... Fehler Loopback z.B.

4.506 Beiträge seit 2004
vor 17 Jahren

Hallo Tosek,

einzige Möglichkeit ist zu überprüfen, was für Pakete endgültig geschickt werden. Das müssen auch nicht alle Pakete sein, nur so viele, bis ein Fehler bemerkt wird.

Das kann man mit Ethereal, also einem Sniffer machen, bedeutet aber sehr sehr viel Arbeit.

Die gesammelten Daten vergleicht man dann mit den Daten, die bei dem funktionierenden Rechner anfallen.

Sind beide Datenströme gleich (bis auf IP-Adresse oder dergleichen), dann liegt der Fehler definitiv im Programm und nicht an der Hardware, oder im Protokoll.

Eventuell kannst Du den Sniffer auf Deinem Rechner mal allgemein laufen lassen. Sollten viele Checksummenfehler in Deinen TCP-Paketen auftreten, so ist eine hohe Wahrscheinlichkeit gegeben, dass Deine Hardware spinnt. (Ethereal erkennt und zeigt fehlerhafte Pakete an).

Du darfst bei dieser Arbeit wahrscheinlich aber mit Tagen rechnen, da werden Stunden wohl nicht ausreichen.

Gruß
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

T
Tosek Themenstarter:in
38 Beiträge seit 2006
vor 17 Jahren
neu aufsetzen

hallo,

ich werde jetzt erstmal die Radikalkur probieren und meinen Rechner neu aufsetzen lassen. Die Fehlersuche ist mir an dieser Stelle zu aufwändig. Wenn das auch nicht hilft, dann muss ich mal weitersehen.

Gruß
Torsten

There are 10 diffent types of people in this world: Those who understand binary and those who don't....