文件下載器如何知道文件從哪裡開始?

文件下載器如何知道文件從哪裡開始?

假設我正在透過 HTTP 協定下載檔案。包含文件片段的資料包可以任何順序到達。那麼,下載器如何知道哪個資料包是順序中的第一個資料包呢?我正在查看 HTTP 資料包的字段這裡並且沒有找到任何“序號”欄位。

經過稍微思考這個問題,我得出的結論是HTTP是第7層協議,並且依賴底層協議。 TCP 作為第 4 層協議,為 HTTP 提供了對資料進行排序的服務,因為 TCP 標頭確實具有序號(在這裡找到的)。

但是,我不確定這個理論是否正確,所以想向專家請教。有沒有其他機制來解決這個問題?

答案1

所以實際上,如果沒有中斷,檔案是透過單一 TCP 連線下載的。所以你的下載器甚至不知道它是碎片的。

你可以使用wireshark看看這個例子在這裡

在此輸入影像描述

例如,如果連接斷開或下載管理器想要拆分下載以便可以使用 4 個連接,則必須設定範圍標頭:

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 在 Internet 或其他網路上的任何其他協定之上實作。HTTP 僅假定可靠的傳輸;可以使用提供此類保證的任何協議; HTTP/1.1 請求和回應結構到相關協定的傳輸資料單元的對應超出了本規範的範圍。

「可靠傳輸」是網路術語,意思是「無遺失(除非發出訊號)、重複/重播、更改或亂序地傳送資料」。

類似地,HTTPS 運行在TLS(以前稱為SSL)之上,TLS 建立在TCP 之上並提供本質上相同的服務(可靠的位元組流傳輸),但增加了機密性和完整性屬性(除非發出訊號錯誤),甚至可以針對智慧攻擊者而不僅僅是自然攻擊者錯誤和故障。存在性能差異,但據我所知,唯一的服務差異是TLS 不提供TCP 的“緊急”指針(即帶外),或者像TCP 的“半關閉”狀態那樣按方向單獨關閉,而HTTP/HTTPS 則不提供不需要那些。

相關內容