Người nhận không mở được tệp đã tải lên thường nghe rằng VPN đã làm hỏng nó. Đó là một giả thuyết, không phải quan sát, và có thể kiểm chứng. Trước khi chạm vào đường hầm, hãy xác định xem đối tượng hiện được lưu ở đích có khác với đối tượng lẽ ra phải gửi hay không. Mọi thứ còn lại đều theo sau câu trả lời đó.

Bắt đầu từ các byte dự định, không phải từ lời phàn nàn

Chọn một tệp vô hại tái hiện vấn đề, hoặc tệp thật nếu chính sách cho phép nó rời khỏi môi trường nguồn. Ghi lại hai điều trước khi truyền: kích thước chính xác tính bằng byte và một hash nội dung hiện đại. Tên tệp, dấu thời gian và bản xem trước là siêu dữ liệu, và không thứ nào trong đó nhận dạng nội dung.

Tính hash bằng một thuật toán mà cả hai đầu có thể chạy, và ghi lại bạn đã dùng thuật toán nào. So sánh giữa SHA-256 và MD5 không phải là so sánh, và so sánh giữa hai tệp khác nhau tình cờ trùng tên cũng không phải.

PS> Get-FileHash -LiteralPath "C:\uploads\report.csv" -Algorithm SHA256
Hash                                                        Path
----                                                        ----
9F2C...                                                      C:\uploads\report.csv

Tài liệu tham chiếu Get-FileHash của Microsoft ghi lại lệnh và tham số thuật toán của nó, đúng phần mà người ta bỏ qua khi một phép so sánh tạo ra sự không khớp vô nghĩa.

Một hash cho mỗi giai đoạn, cùng một thuật toán

Bây giờ hãy tính cùng thuật toán đó trên đối tượng đã lưu tại nơi nó cuối cùng nằm, bằng một phương pháp được cho phép thay vì một bản sao đã đi qua công cụ khác. Lưu tệp nhận được ở máy cục bộ và băm bản sao đó thêm một bước bạn chưa kiểm tra.

Nếu dịch vụ công bố giá trị toàn vẹn của riêng nó, hãy coi đó là một quan sát riêng. Tổng kiểm tra do nhà cung cấp báo cáo có thể cho bạn biết nhà cung cấp nghĩ mình đã lưu gì, và đó không phải cùng một khẳng định với những gì ứng dụng khách của bạn đã gửi.

Có ba kết quả, và chúng chỉ về các hướng khác nhau. Hash bằng nhau nghĩa là các byte đến nguyên vẹn. Hash khác nhau với một chuyển đổi đã biết nghĩa là dịch vụ cố ý tạo ra một đối tượng mới. Hash khác nhau mà không có chuyển đổi nghĩa là có gì đó giữa hai điểm đã thay đổi nội dung, và bước tiếp theo là tìm ranh giới sớm nhất nơi điều đó xảy ra.

Tách lỗi truyền khỏi biến đổi

Một lần tải lên một phần và một lần tải lên bị hỏng trông giống nhau trong trình duyệt tệp và là những lỗi khác nhau. Kiểm tra xem quá trình truyền đã hoàn tất chưa: nhật ký ứng dụng cho thấy một yêu cầu bị hủy, một tệp đã lưu có kích thước là tiền tố của nguồn, hoặc một đối tượng thực ra là trang lỗi được lưu dưới phần mở rộng mong đợi, tất cả đều cho thấy một lần truyền chưa hoàn tất chứ không phải byte bị thay đổi.

Biến đổi là cách giải thích phổ biến còn lại. Một dịch vụ nén lại ảnh, viết lại cuối dòng của CSV hoặc chuyển đổi tài liệu sẽ tạo ra một hash khác nguồn một cách hợp lệ, và đó không phải là hỏng. Hãy so sánh giai đoạn tự nhận là bản sao trung thực, không phải định dạng trình bày cuối cùng.

Độ trễ và mất mát thuộc nhóm thứ ba. Chúng có thể khiến ứng dụng khách hết thời gian, thử lại hoặc bỏ cuộc, và không điều nào trong đó ngụ ý rằng các byte được máy chủ chấp nhận đã bị thay đổi âm thầm. Hãy xem kết quả truyền trước khi quy bất cứ điều gì cho đường hầm.

Thử một đường thứ hai mà không đổi mọi thứ

Nếu hash thực sự khác nhau và không có chuyển đổi, hãy lặp lại cùng tệp, ứng dụng khách, giao thức và đích qua một đường khác được hỗ trợ, chẳng hạn mạng cục bộ thay vì VPN. Chỉ đổi một biến. Đổi ứng dụng khách, điểm cuối và công cụ cùng lúc cho bạn một kết quả mà bạn không thể quy cho đâu.

Giữ phép so sánh trung thực theo cả hai hướng. Một hash cho bạn biết hai điểm không đồng ý hoặc đồng ý về nội dung; nó không cho biết bên nào đáng tin, nên hãy giữ giá trị mong đợi và việc kiểm chứng bên trong mô hình tin cậy mà bạn thực sự dựa vào.

Kết thúc bằng một câu cụ thể trong phiếu: quá trình truyền dừng sớm, ứng dụng đã biến đổi đối tượng, kho lưu trữ đã thay đổi nó, hoặc các byte khớp nhau và việc đọc chúng chính là lỗi. Mỗi trường hợp trong số đó có một người chủ khác nhau, và không trường hợp nào mặc định là VPN.

Bài viết liên quan