Frage

Ich baue meine eigenen Webserver basiert auf einem Tutorial. Ich habe eine einfache Art und Weise fand eine TCP-Verbindung zu initiieren und ein Segment von http-Daten (der Webserver auf einem Mikrocontroller läuft, so ist es sehr klein sein wird) senden

Wie auch immer, ist die folgende die Folge ich brauche zu durchlaufen:

  1. erhalten SYN

  2. SYN senden, ACK

  3. empfängt ACK (die Verbindung wird nun aufgebaut)

  4. empfangen ACK mit HTTP-GET-Befehl

  5. send ACK

  6. senden FIN, ACK mit HTTP-Daten (zum Beispiel 200 OK)

  7. erhalten FIN, ACK

  8. send ACK

Alles funktioniert gut, bis ich meine Bestätigung senden und HTTP 200 OK-Meldung. Der Kunde wird keine Bestätigung für diese beiden Pakete senden und damit keine Webseite angezeigt wird. Ich habe eine pcap-Datei der Sequenz hinzugefügt, wie ich es mit wireshark aufgezeichnet.

Pcap Datei: http://cl.ly/5f5/httpdump2.pcap

Alle Sequenz und Bestätigungsnummern korrekt sind, sind Prüfsumme ok. Flaggen sind auch richtig. Ich habe keine Ahnung, was nicht in Ordnung ist.

War es hilfreich?

Lösung 3

Das IP-Längenfeld folglich rechnet 8 Bits zu viel. Ich habe einen Fehler in meinen Berechnungen. Every wirkt wie ein Zauber jetzt!

Andere Tipps

ich denke, dass Schritt 6 sollte nur FIN sein, ohne ACK. Welches Paket von dem Client Acking Sie an dieser Stelle? Ich sehe auch nicht, warum 4. ein ACK statt nur einem normalen Datenpaket sein sollte -. Der Client ACKed die Verbindung bei 3

Dieses Diagramm auf TCP heißt es könnte helfen.

sagt Wireshark (des FIN-Paket):

  

Gebrochene TCP: Das acknowledge Feld ist   Nicht-Null, während der ACK-Flag nicht gesetzt

Ich weiß es nicht genau das ist, was Ihr Problem verursacht, aber wenn Wireshark nicht wie dieses Paket, vielleicht der Kunde tut es auch nicht. So sollte es FIN + ACK sein, oder sollten Sie das acknowledge Feld auf 0 gesetzt.

Wenn das es nicht lösen, könnte man auch versuchen, zuerst die Daten zu senden, dann ein separates FIN-Paket. Es ist gültige Daten mit dem FIN zu zählen, aber es ist üblich, die FIN selbst zu senden (wie in der anderen pcap Spur gesehen, wie du früher geschrieben).

Außerdem sollten Sie wahrscheinlich den PUSH-Flag mit dem 200 OK in dem Paket werden Einstellung

Schließlich habe ich keine Neuübertragung Versuche für das FIN-Paket sehen - ist, dass, weil Sie die Einnahme gestoppt sofort

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top