ファイル ダウンローダーは、ファイルの開始位置をどのようにして知るのでしょうか?

ファイル ダウンローダーは、ファイルの開始位置をどのようにして知るのでしょうか?

HTTPプロトコルでファイルをダウンロードしているとします。ファイルの断片を含むパケットは、任意の順序で到着する可能性があります。では、ダウンローダーはどのパケットが順序の最初であるかをどうやって知るのでしょうか? HTTPパケットのフィールドを調べていました。ここ「シーケンス番号」フィールドが見つかりませんでした。

この質問について少し考えた後、HTTPはレイヤー7のプロトコルであり、下位層のプロトコルに依存するという結論に達しました。レイヤー4のプロトコルであるTCPは、TCPヘッダーにシーケンス番号があるため、HTTPにデータの順序付けサービスを提供します(ここで見つけた)。

しかし、この理論が正しいかどうかはわかりませんので、専門家に質問したいと思います。この問題に対処するための他のメカニズムはありますか?

答え1

つまり、実際には、中断がなければ、ファイルは単一の TCP 接続でダウンロードされます。そのため、ダウンローダーはファイルが断片化されていることさえ認識しません。

Wiresharkを使って確認してみましょうこの例はこちら

ここに画像の説明を入力してください

接続が切断された場合、またはダウンロードマネージャがダウンロードを分割して4つの接続を使用する場合など、RANGE ヘッダー:

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

この場合の答えは

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

答え2

ご想像の通り。RFC 2616 セクション 1.4 全体的操作より、強調追加:

HTTP通信通常は TCP/IP 接続を介して行われます。デフォルトのポートはTCP 80 [19]ですが、他のポートも使用できます。これは、インターネットや他のネットワーク上の他のプロトコルの上にHTTPを実装することを妨げるものではありません。HTTP は信頼性の高いトランスポートのみを前提としています。このような保証を提供する任意のプロトコルを使用できます。HTTP/1.1 要求および応答構造を当該プロトコルのトランスポート データ ユニットにマッピングすることは、この仕様の範囲外です。

「信頼性の高いトランスポート」とは、「(信号が送られない限り)損失、重複/再生、変更、または順序の誤りなくデータを配信する」という意味のネットワーク用語です。

同様に、HTTPS は TLS (旧 SSL) 上で実行されます。TLS は TCP を基盤とし、基本的に同じサービス (信頼性の高いバイト ストリーム トランスポート) を提供しますが、単なる自然なエラーや障害ではなく、インテリジェントな攻撃者に対しても機密性と整合性 (エラーが通知されない限り) という特性が追加されています。パフォーマンスの違いはありますが、私の知る限り、サービスの違いは、TLS では TCP の「緊急」ポインタ (アウトオブバンドとも呼ばれます) や、TCP の「半クローズ」状態のような方向ごとの個別のクローズが提供されず、HTTP/HTTPS ではそれらが必要ないことだけです。

関連情報