AGB  ·  Datenschutz  ·  Impressum  







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

TCP Connection - ACK der Gegenseite abwarten

Ein Thema von mentaltec · begonnen am 5. Nov 2012 · letzter Beitrag vom 7. Nov 2012
Antwort Antwort
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.784 Beiträge
 
Delphi 10.4 Sydney
 
#1

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 5. Nov 2012, 15:59
Hallo,

ACKs/NACKs werden auf der TCP Schicht behandelt.
Wenn Du auf diese zugreifen willst kommst Du um ein RawSocket nicht herum.
Ein TCP Stack lässt Dir nur die Möglichkeit Daten in das TCP Packet zu stecken.
Wie das dann auf dem Transport gehandhabt wird bleibt dem User des Stack verborgen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 08:59
Benötigst du zwingend non-blocking Sockets? Die Verwendung der blocking Variante dürfte am Einfachsten die Funktionalität ermöglichen, die du benötigst.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
mentaltec

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

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 10:59
wenn Du so fragst -> ich müsste das ganze Framwork umschreiben

deshalb frag ich vorher lieber nach :
wie genau kann das mit blocking gehen und
ist das gesicherte Erkenntnis oder nur Vermutung

weil MS sagt :
The successful completion of a send function does not indicate that the data was successfully delivered and received to the recipient. This function only indicates the data was successfully sent.

http://msdn.microsoft.com/en-us/libr...=vs.85%29.aspx

mfg
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

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

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 11:23
So richtig sichergehen kannst du nur mit Bestätigungen auf Anwendungsebene.
Denn was nützt es dir, wenn TCP bestätigt, aber die Anwendung nicht genug Speicher hat, um die Nachricht zu verarbeiten.

Ich glaube kaum, dass du was finden wirst, das ohne Treiber bzw. RAW-Sockets auskommt.
Also entweder TCP selbst implementieren (~> bestehende Implementierung ändern) oder den Datenstrom abhören (WinCap).

Da klingt Protokoll auf Anwendungsebene ändern gar nicht mehr so kompliziert, oder?

Im "schlimmsten" Fall ist TCP gar nicht im System implementiert, sondern läuft auf der Netzwerkkarte.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 12:16
Kannst du deine Anforderungen noch etwas konkretisieren? Musst genau wissen, ob ein Paket angekommen UND korrekt verarbeitet wurde, oder reicht es evtl. das du dir sicher sein kannst, dass Paket A gesendet wurde bevor du Paket B losschickst? Im Normalfall gehe ich davon aus, dass mein blocking Request nach Funktionsaustritt korrekt behandelt bzw. zumindest korrekt gesendet wurde.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
mentaltec

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

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 13:05
@Zacherl
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 und dem kommt imho das Ack am Nächsten
dabei iss mir Wurscht, ob die ServerNIC das Ack bildet oder die Treibersoftware

@BUG
jaja neenee, der Server antwortet ja - ich hab aber die Vermutung, dass er sich dafür manchmal zu lange Zeit lässt; in der Entwicklungsumgebung kann ich das ja auch mit Wireshark prüfen, ich wollt das aber auch in das Endprodukt integrieren und dort haben wir keine Möglichkeit, zusätzliche Treiber zu installieren o.ä.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 15: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
Benutzerbild von sx2008
sx2008

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

AW: TCP Connection - ACK der Gegenseite abwarten

  Alt 6. Nov 2012, 21: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
Antwort Antwort

 

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 15:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz