AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke TCP Connection - ACK der Gegenseite abwarten

TCP Connection - ACK der Gegenseite abwarten

Ein Thema von mentaltec · begonnen am 5. Nov 2012 · letzter Beitrag vom 7. Nov 2012
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#11

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 16:56
Dann bleibt dir als einzige Möglichkeit nur noch dich auf die Antwort vom Server zu verlassen. Wenn du der Ausführungsroutine bzw. deren Geschwindigkeit nicht traust, solltest du das lokal auf Serverseite messen. Dann bringt dir das ganze Ping Pong Spiel nämlich nicht viel. Wenn es dir gezielt um die Netzwerklatenz geht, arbeite nach dem Request / Response Prinzip und implementiere ein einfaches Ping System, über das du die Latenz messen kannst.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#12

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 17:44
Es würde auch ungemein helfen, wenn du konkret sagst, worum es genau geht und was du genau machen willst / musst.

Wenn du non-blocking verwenden "musst", wurden dir die Möglichkeiten ja schon genannt. Also bleibt dir fasst nur die Möglichkeit, dein Protokoll um ein ACK vom Server zu erweitern, oder wie Zacherl sagte: Ein Request<>Response-Prinzip. Deswegen auch der Vorschlag, dir mal ICS anzuschauen, eben weil du da etliche Beispiele hast, die genau das machen - entweder direkt oder indirekt.

Das WENN und OB hebt sich somit auch gegenseitig auf.

Genauso auch wenn du dein Framework auf Blocking umschreibst.

  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#13

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 18:19
Hallo,
kennt jemand eine Möglichkeit, bei einer nonblocking TCP-Verbindung zu bestimmen, welche Pakete von der Gegenseite ge'akt' wurden

Gegenseite heisst dabei natürlichh "der Kernel der Gegenseite", also deren TCP Stack.

Es bedeutet aber nicht, dass die serverseitige Anwendung die Pakete komplett erhalten hat, denn das kann über ACK nicht festgestellt werden.

How can I explicitly wait for a TCP ACK before proceeding?
Michael Justin

Geändert von mjustin ( 6. Nov 2012 um 18:22 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#14

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 22:13
es geht mehr oder weniger darum, Timingprobleme zu erkennen / fixen
sobald ich das Ack vom Server hab, ist jede weitere Verzögerung sein Problem
ich muss nur nachweisen, ob/wann der Server das Packet bekommen hat
Ist das dein eigentliches Problem?
Festzustellen, ob der Server schnell genug arbeitet oder ob er trödelt?
Nun, eine Erweiterung im Protokoll auf Anwendungsebene wurde ja schon vorgeschlagen.
Dazu müsste jede Message an den Server eine fortlaufende Nummer bekommen.
Der Server könnte dann eine Quittung mit dieser Nummer an den Client senden und zwar zu 2 verschiedenen Zeitpunkten:
1.) Message vollständig empfangen
2.) Message verarbeitet

Aber es gibt auch noch eine einfachere Lösung:
Der Server schreibt beim Empfang einer Message in eine Logdatei und ebenfalls nach Verarbeitung der Message.
Auch hier wäre eine Durchnummerierung der Messages sinnvoll.
Oder man zählt die Bytes mit:
Code:
Zeit        | Client           |Byte    |Info
=====================================================
10:13:50.950 | 192.168.1.26:5078 | 0       | Received
10:13:51.120 | 192.168.1.26:5078 | 0       | Done
10:13:56.230 | 192.168.1.26:5078 | 178     | Received
10:13:56.305 | 192.168.1.67:4088 | 2301    | Received
10:13:56.980 | 192.168.1.26:5078 | 178     | Done
10:13:58.675 | 192.168.1.67:4088 | 2301    | Done
In dem Beispiel hat der Server 3 Messages von 2 Clients empfangen und verarbeitet.
Mit so einer Logdatei (sollte abschaltbar sein) kann man Performanceprobleme gut feststellen.
  Mit Zitat antworten Zitat
mentaltec

Registriert seit: 28. Sep 2012
60 Beiträge
 
#15

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 7. Nov 2012, 11:16
ich befürchte, der Serverbetreiber wird sein Protokoll nicht wegen mir umstellen,
nur damit ich beweisen kann, dass er zeitweise inakzeptable Latenzen hat

aber ich sehe schon, das läuft auf einen RAW Socket hinaus - kann ich den eigentlich parallel zum existierenden TCP-Socket betreiben (so als LauschSocket) oder muss ich den ganzen Datentranfer darüber ziehen?
ich hab gelesen, dass MS die Fähigkeiten von RAW Sockets "limitiert" hat -- hat da jemand Erfahrung
mein Client MUSS mit allen Win Versionen ab Vista laufen - da muss ich mich also auf das kleinste gemeinsame Übel einrichten
Win/PCap kann ich nicht installieren
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#16

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 7. Nov 2012, 16:54
Da hast du Recht, ab XP SP1 meine ich, wurden die RAW Sockets limitiert. Ich befürchte die kannst du nicht mehr verwenden um eigene Pakete zu verschicken. Hintergrund davon war es, IP Spoofing und SYN Flood von Windows Systemen aus schwieriger zu gestalten. Unabhängig davon würde dir ein ACK Paket aber auch nicht viel mehr sagen, als ein einfaches ICMP Echo PING Paket an den Server.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#17

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 7. Nov 2012, 17:56
Abgesehen davon, dass eine eigene TCP-Implementierung fast sicher langsamer und sicher fehlerhafter als eine Fertige ist.
Das könnte dein Programm mehr bremsen als der lahme Dienstanbieter.

Die Latenzen, die dich interessieren, sind eigentlich die auf Anwendungsebene (dh. Zeit zwischen deiner Aktion und gewünschter Reaktion).
Vielleicht noch abzüglich der mit einem Ping gemessenen Round-Trip-Time.
Das sollte doch mit clientseitigem Logging zu messen sein.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz