Der Aufbau eines Web-Server, Client nicht anerkennt HTTP 200 OK-Rahmen
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:
-
erhalten SYN
-
SYN senden, ACK
-
empfängt ACK (die Verbindung wird nun aufgebaut)
-
empfangen ACK mit HTTP-GET-Befehl
-
send ACK
-
senden FIN, ACK mit HTTP-Daten (zum Beispiel 200 OK)
-
erhalten FIN, ACK
-
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.
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