Gast
2006-07-21, 15:24:15
Hallo,
ich entwickle gerade etwas mit TCP/IP über Sockets.
Es stehen hier zwei Rechner (ich nenne sie mal A und B). Diese sind miteinander verbunden. Zwischen ihnen liegt ein Router (Spekulation: dann wird alles zu einem zentralen Server geleitet und wandert zum anderen Rechner, es ist ein großes Firmennetzwerk).
A sendet nun an B Daten. Ziehe ich bei B den Netzwerkstecker, erlischt bei B die Verbindung, der Socket (also send() oder recv()) liefert -1. So soll es auch sein. A hingegen sendet munter weiter. Ich habe den Zustand 30 Minuten so gelassen, send() gab keinen Fehler zurück.
Wie kann das sein? Muss nicht TCP verschiedene "ACKs" verlangen und mit einem Timeout abbrechen? Oder können die "ACKs" von einem Zwischenpunkt her gesendet worden sein (das müßte dann ein Zwischenpunkt im Firmennetz sein) sodass A denkt, B wäre immernoch aktiv? Oder Flutet A das Netz mit Wiederholungsanfragen für die "ACKs" von B? Fragen über Fragen...
Ich habe dann etwas rumgegoogelt und traf auf folgendes: In IPv6 gibt es ein so genanntes "Neighbor Unreachability Detection". Dazu heißt es:
Neighbor Unreachability Detection ist ein Feature von IPv6, mit dem ein Knoten feststellen kann, ob ein Nachbarknoten erreichbar ist. Als erreichbar gilt ein Nachbarknoten dann, wenn dieser bestätigt hat, dass er an ihn gesendete IPv6-Pakete erhalten hat (über unicast Neighbor-Solicitation- und Neighbor-Advertisement-Nachrichten oder über Protokolle weiter oben liegender Schichten). Mit der Neighbor Unreachability Detection kann ein IPv6-Knoten feststellen, dass ein Nachbarknoten nicht mehr erreichbar ist, und dies anderen Komponenten und Anwendungen mitteilen.
Ist das das Problem, oder liege ich da komplett falsch? Weiß jemand damit was anzufangen?
Danke schon mal im Voraus.
ich entwickle gerade etwas mit TCP/IP über Sockets.
Es stehen hier zwei Rechner (ich nenne sie mal A und B). Diese sind miteinander verbunden. Zwischen ihnen liegt ein Router (Spekulation: dann wird alles zu einem zentralen Server geleitet und wandert zum anderen Rechner, es ist ein großes Firmennetzwerk).
A sendet nun an B Daten. Ziehe ich bei B den Netzwerkstecker, erlischt bei B die Verbindung, der Socket (also send() oder recv()) liefert -1. So soll es auch sein. A hingegen sendet munter weiter. Ich habe den Zustand 30 Minuten so gelassen, send() gab keinen Fehler zurück.
Wie kann das sein? Muss nicht TCP verschiedene "ACKs" verlangen und mit einem Timeout abbrechen? Oder können die "ACKs" von einem Zwischenpunkt her gesendet worden sein (das müßte dann ein Zwischenpunkt im Firmennetz sein) sodass A denkt, B wäre immernoch aktiv? Oder Flutet A das Netz mit Wiederholungsanfragen für die "ACKs" von B? Fragen über Fragen...
Ich habe dann etwas rumgegoogelt und traf auf folgendes: In IPv6 gibt es ein so genanntes "Neighbor Unreachability Detection". Dazu heißt es:
Neighbor Unreachability Detection ist ein Feature von IPv6, mit dem ein Knoten feststellen kann, ob ein Nachbarknoten erreichbar ist. Als erreichbar gilt ein Nachbarknoten dann, wenn dieser bestätigt hat, dass er an ihn gesendete IPv6-Pakete erhalten hat (über unicast Neighbor-Solicitation- und Neighbor-Advertisement-Nachrichten oder über Protokolle weiter oben liegender Schichten). Mit der Neighbor Unreachability Detection kann ein IPv6-Knoten feststellen, dass ein Nachbarknoten nicht mehr erreichbar ist, und dies anderen Komponenten und Anwendungen mitteilen.
Ist das das Problem, oder liege ich da komplett falsch? Weiß jemand damit was anzufangen?
Danke schon mal im Voraus.