Czy można uzyskać uszkodzone pobieranie za pomocą protokołu http?

11

Przez długi czas zakładałem, że tak naprawdę nie jest możliwe pobranie uszkodzonego pliku przez http, o ile nie jest on uszkodzony na serwerze, a implementacja protokołu HTTP jest prawidłowa, co najprawdopodobniej dotyczy nowoczesnego oprogramowania głównego nurtu.

Więc zawsze zachichotałem, gdy zobaczyłem witrynę pobierania oferującą skrót md5 pliku, który udostępniają do pobrania. Nie widziałem wcześniej przypadku, w którym pobieram plik, jego rozmiar jest prawidłowy, ale treść nie.

Dzisiaj miałem pierwszy przypadek. Pobrałem plik ISO Ubuntu, próbowałem go zainstalować, nie powiodło się i po długich badaniach (po prostu nie mogłem uwierzyć, że przyczyną może być zepsute pobieranie) sprawdziłem MD5 i co wiesz, to było złe (rozmiar był poprawny). Więc ponownie go pobrałem i dostałem jeszcze jeden zły md5. Tylko przy moim trzecim pobraniu md5 było prawidłowe.

Więc moje pytanie brzmi: czy w zasadzie możliwe jest uzyskanie uszkodzonego pobierania przez HTTP, przy założeniu, że implementacja jest poprawna, transfer został zakończony pomyślnie i plik jest poprawny na serwerze. Jeśli to możliwe, to jak to się może stać?

Andrew Savinykh
źródło

Odpowiedzi:

9

Tak, jest to możliwe, szczególnie przy słabej jakości połączeniach internetowych - zwykle bezprzewodowych, ale niektóre połączenia przewodowe (takie jak to, które posiadam) mają również wysoki poziom błędów przy dużych prędkościach.

Protokół HTTP nie zawiera żadnych przepisów zapewniających integralność danych. W warstwie transportowej protokół TCP wykrywa błędy za pomocą sumy kontrolnej, ale nie jest bardzo niezawodny .


Istnieje inny powód, dla którego udostępnia się skróty lub podpisy cyfrowe. Często rzeczywiste pliki są dystrybuowane na wiele serwerów lustrzanych, co nie gwarantuje 100% bezpieczeństwa. Jeśli nie ma hasha ani podpisu do weryfikacji, ktoś z dostępem do kopii lustrzanej (niekoniecznie uzasadniony) mógłby zastąpić pliki i pozostać niewykrytym, bez konieczności włamania się na zupełnie inny serwer, na którym hostowana jest strona internetowa.


Możesz uzyskać automatyczną weryfikację plików, jeśli pobierasz Ubuntu przez BitTorrent zamiast HTTP. (Każdy element jest weryfikowany w czasie pobierania, więc nigdy nie musisz ponownie pobierać całego.)

użytkownik1686
źródło
1
Dobra odpowiedź. Chciałbym jednak nieco bardziej zgłębić ten temat, jeśli nie masz nic przeciwko. Część „wysokiej prędkości” okazała się bardzo istotna. Nigdy nie miałem żadnych problemów w domu, ale pliki do pobrania Ubuntu ISO, które zrobiłem, działały, a prędkość wynosiła około 5 Mb / s. Trudno mi zaakceptować, że TCP nie jest niezawodny, ponieważ prawie wszystko wokół jest oparte na TCP. Czy jest coś innego niż ten wikipediowy artykuł o niewiarygodności TCP? Czy wiesz dokładnie, jak duża prędkość wpływa na problem? Z góry dziękuję.
Andrew Savinykh
1
@zespri: TCP ma być niezawodny, ale suma kontrolna nie może wychwycić 100% wszystkich błędów. Wysoka prędkość jest tylko czynnikiem w przypadku niektórych typów połączeń lub w przypadku niewiarygodnych łączy ... Co niestety może wystąpić w dowolnym miejscu między tobą a serwerem, niekoniecznie natychmiast po twoim zakończeniu. (Testowałbym pobieranie z serwerów lustrzanych znajdujących się w różnych krajach.) Oczywiście istnieje również możliwość, że plik został już uszkodzony w systemie plików serwera ...
user1686
1
jeśli istnieje małe prawdopodobieństwo uszkodzenia, to zwiększenie liczby przeskoków między tobą a serwerem zwiększy ryzyko uszkodzenia ???
Trevor Boyd Smith
1
@ Trevor: Zależy od jakości łącza. Dziesięć przeskoków przez Ethernet jest znacznie bardziej niezawodnych niż pojedynczy przeskok przez Wi-Fi. (Same routery / przełączniki same prawie nigdy nie uszkadzają danych; zwykle robi to połączenie.)
user1686 14.09.11
Czy to nie znaczy, że sam HTTP jest zepsuty i powinien zostać naprawiony?
still_dreaming_1
1

Jak powiedział Grawity, jest to możliwe, ale dodatkowo zauważyłem:

Nawet przy stabilnych połączeniach internetowych pobieranie może zakończyć się wcześniej bez jakiegokolwiek uzasadnionego powodu - może się tak zdarzyć.

A co najważniejsze, jeśli masz złą pamięć, możliwe jest, że pobieranie buforuje się w pamięci przed zapisaniem na dysk, a ponieważ pamięć jest zła, zapisuje plik niepoprawnie. Jeśli ciągle masz złe pliki do pobrania, jest to bardzo prawdopodobne.

William Hilsum
źródło
Och, nienawidzę serwerów sieciowych, które losowo odcinają pobieranie o ~ 50% bez wsparcia dla wznawiania ...
user1686
1
Wil: Tak, odcięcia są często i dlatego właśnie wykluczyłem je z mojego pytania, mówiąc, że zakładam, że rozmiary są dokładnie odpowiednie. Dziękuję za twój komentarz.
Andrew Savinykh
Tak, to jest kluczowe stwierdzenie tego pytania: „rozmiary są dokładnie właściwe”
Trevor Boyd Smith