Woher weiß ein Datei-Downloader, wo die Datei beginnt?

Woher weiß ein Datei-Downloader, wo die Datei beginnt?

Angenommen, ich lade eine Datei über das HTTP-Protokoll herunter. Die Pakete, die die Fragmente der Datei enthalten, können in beliebiger Reihenfolge eintreffen. Woher weiß der Downloader dann, welches Paket das erste in der Reihenfolge ist? Ich habe mir die Felder eines HTTP-Pakets angesehenHierund habe kein Feld „Sequenznummer“ gefunden.

Nachdem ich ein wenig über die Frage nachgedacht hatte, kam ich zu dem Schluss, dass HTTP ein Layer-7-Protokoll ist und von den Protokollen der darunterliegenden Schichten abhängt. TCP, ein Layer-4-Protokoll, stellt HTTP diesen Dienst der Datensequenzierung zur Verfügung, da der TCP-Header eine Sequenznummer hat (Habe es hier gefunden).

Ich bin mir jedoch nicht sicher, ob diese Theorie zutrifft, und möchte daher die Experten dazu befragen. Gibt es einen anderen Mechanismus, um mit diesem Problem umzugehen?

Antwort1

Wenn also keine Unterbrechung auftritt, wird die Datei tatsächlich über eine einzelne TCP-Verbindung heruntergeladen. Ihr Downloader merkt also nicht einmal, dass die Datei fragmentiert ist.

Sie können Wireshark verwenden und sehendieses Beispiel hier

Bildbeschreibung hier eingeben

Wenn die Verbindung abbricht oder der Download-Manager den Download aufteilen möchte, um beispielsweise 4 Verbindungen zu nutzen, muss er dieRANGE-Header:

GET /z4d4kWk.jpg HTTP/1.1
Host: i.imgur.com
Range: bytes=0-1023

In diesem Fall wäre die Antwort

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1023/146515
Content-Length: 1024

Antwort2

Du hast es erraten.Aus RFC 2616 Abschnitt 1.4 Gesamtbetrieb, Betonung hinzugefügt:

HTTP-Kommunikationerfolgt üblicherweise über TCP/IP-Verbindungen.Der Standardport ist TCP 80 [19], es können aber auch andere Ports verwendet werden. Dies schließt nicht aus, dass HTTP über jedem anderen Protokoll im Internet oder in anderen Netzwerken implementiert wird.HTTP setzt lediglich einen zuverlässigen Transport voraus;Es kann jedes Protokoll verwendet werden, das solche Garantien bietet. Die Abbildung der Anforderungs- und Antwortstrukturen von HTTP/1.1 auf die Transportdateneinheiten des betreffenden Protokolls liegt außerhalb des Geltungsbereichs dieser Spezifikation.

„Zuverlässiger Transport“ ist ein Fachbegriff aus der Netzwerktechnik und bedeutet „übermittelt die Daten ohne Verlust (sofern nicht anders angegeben), Duplizierung/Wiedergabe, Änderung oder falsche Anordnung“.

Und ähnlich läuft HTTPS über TLS (früher SSL), das auf TCP aufbaut und im Wesentlichen denselben Dienst (zuverlässigen Byte-Stream-Transport) bietet, aber mit den zusätzlichen Eigenschaften Vertraulichkeit und Integrität (sofern kein Fehler gemeldet wird), sogar gegen intelligente Angreifer und nicht nur gegen natürliche Fehler und Störungen. Es gibt Leistungsunterschiede, aber meines Wissens nach bestehen die einzigen Dienstunterschiede darin, dass TLS weder den „dringenden“ Zeiger von TCP, auch Out-of-Band genannt, noch separate Schließungen pro Richtung wie die „halbgeschlossenen“ Zustände von TCP bietet, und HTTP/HTTPS diese nicht benötigt.

verwandte Informationen