Frage an die Spezialisten...

17/10/2010 - 12:30 von Holger Hessling | Report spam
Hallo NG,

wer kann mir bitte folgendes erklàren:

Der inetd wartet auf eine erste Anfrage auf den konfiguríerten Ports, um
dann den konfigurierten Dienst zu starten.
Geschieht diese erste Anfrage bereits beim connect() seitens des clients
oder erst mit dem ersten gesendeten Byte vom client?

Ich frage deshalb, weil ich bei mir daheim folgendes beobachtet habe:

Auf einem Linux-Server ist rrdtool als Dienst konfiguriert; es existiert
ein entsprechender Eintrag in /etc/services und in /etc/inetd.conf.
Auf einem Microcontroller làuft eine Datenerfassung, welche die
empfangenen Daten via TCP an RRDtool auf dem Server schickt. Dazu hat
der client

- einen socket angefordert mit opensocket()
- sich mit dem Server via connect() verbunden

Daraufhin befindet sich der client in einer Endlosschleife in die
Datenerhebung und das Senden an den Server wiederholt stattfindet.

Wird der Server jetzt neu gestartet, ist die TCP Verbindung ja
unterbrochen. Sobald der Server wieder einsatzfàhig ist, startet der
inetd auch wieder RRDTOOL und die Datenerfassung geht weiter.

Mich wundert dieses Verhalten, weil doch kein erneutes opensocket() und
connect() stattfindet. Einzig ein wiederholtes send().

Danke für Eure Erklàrungen :-)

Gruß
Holger
 

Lesen sie die antworten

#1 Juergen P. Meier
17/10/2010 - 15:20 | Warnen spam
Holger Hessling :
Der inetd wartet auf eine erste Anfrage auf den konfiguríerten Ports, um
dann den konfigurierten Dienst zu starten.
Geschieht diese erste Anfrage bereits beim connect() seitens des clients
oder erst mit dem ersten gesendeten Byte vom client?



Bei TCP startet der inetd nach erfolgtem 3-Wege Handshake vor der
ersten Datenuebertragung (*) den Service.

Bei UDP enthaelt das eine UDP-Paket bereits alle Daten. Die Daten
jedes UDP Paket werden an den Dienst uebergeben.

Ich frage deshalb, weil ich bei mir daheim folgendes beobachtet habe:

Auf einem Linux-Server ist rrdtool als Dienst konfiguriert; es existiert
ein entsprechender Eintrag in /etc/services und in /etc/inetd.conf.
Auf einem Microcontroller làuft eine Datenerfassung, welche die
empfangenen Daten via TCP an RRDtool auf dem Server schickt. Dazu hat
der client

- einen socket angefordert mit opensocket()
- sich mit dem Server via connect() verbunden



Was fuer ein Socket-Typ?

Daraufhin befindet sich der client in einer Endlosschleife in die
Datenerhebung und das Senden an den Server wiederholt stattfindet.

Wird der Server jetzt neu gestartet, ist die TCP Verbindung ja
unterbrochen. Sobald der Server wieder einsatzfàhig ist, startet der
inetd auch wieder RRDTOOL und die Datenerfassung geht weiter.

Mich wundert dieses Verhalten, weil doch kein erneutes opensocket() und
connect() stattfindet. Einzig ein wiederholtes send().

Danke für Eure Erklàrungen :-)



UDP kennt keine Verbindung. Wenn das (wie zu vermuten) UDP ist, dann
gibts keine Verbindung, statdessen sieht der inetd jedes UDP Pakete
individuell und schiebt es an den rdd-Daemon weiter.

Bei TCP wuerde die Verbindug abbrechen und der Sender wuerde beim
naechsten send() einen Fehler gemeldet bekommen und muesste den Socket
neu oeffnen und verbinden.

Juergen P. Meier - "This World is about to be Destroyed!"
end
If you think technology can solve your problems you don't understand
technology and you don't understand your problems. (Bruce Schneier)

Ähnliche fragen