الرفع يبدو تالفًا: قارن التجزئات في الطرفين
فشل الرفع ليس دليلًا على أن النفق غيّر البايتات. قارن الملف المقصود بالنتيجة المخزنة، ثم حدّد أول حدّ تختلف عنده.
كثيرًا ما يسمع المستلمون الذين لا يستطيعون فتح ملف مرفوع أن VPN أفسده. هذه فرضية لا مشاهدة، وهي قابلة للاختبار. قبل أن تلمس النفق، حدّد ما إذا كان الكائن المخزَّن الآن في الوجهة يختلف عن الكائن الذي كان يُفترض إرساله. كل شيء آخر يتبع تلك الإجابة.
ابدأ بالبايتات المقصودة، لا بالشكوى
اختر ملفًا غير ضار يعيد إنتاج المشكلة، أو الملف الفعلي إن كانت السياسة تسمح له بمغادرة بيئة المصدر. سجّل شيئين قبل النقل: الحجم الدقيق بالبايتات وتجزئة محتوى حديثة. أسماء الملفات والطوابع الزمنية والمعاينات كلها بيانات وصفية، ولا يحدد أي منها المحتوى.
احسب التجزئة بخوارزمية يستطيع الطرفان تشغيلها، واكتب أيّها استخدمت. المقارنة بين SHA-256 وMD5 ليست مقارنة، وكذلك المقارنة بين ملفين مختلفين يتشاركان الاسم نفسه.
PS> Get-FileHash -LiteralPath "C:\uploads\report.csv" -Algorithm SHA256
Hash Path
---- ----
9F2C... C:\uploads\report.csv
مرجع Get-FileHash من Microsoft يوثّق الأمر ومعامل الخوارزمية الخاص به، وهو الجزء الذي يتخطاه الناس عندما تنتج المقارنة عدم تطابق بلا معنى.
تجزئة واحدة لكل مرحلة، والخوارزمية نفسها
احسب الآن الخوارزمية نفسها على الكائن المخزَّن حيث يقيم في النهاية، بطريقة مصرَّح بها لا بنسخة مرّت عبر أداة أخرى. حفظ الملف المستلَم محليًا وتجزئة تلك النسخة يضيف خطوة لم تختبرها.
إن كشفت الخدمة عن قيمة سلامة خاصة بها، فتعامل معها كمشاهدة منفصلة. مجموع التحقق الذي يبلغ عنه المزوّد يمكن أن يخبرك بما يعتقد المزوّد أنه خزّنه، وهو ليس الادعاء نفسه بما أرسله عميلك.
ثلاث نتائج ممكنة، وهي تشير في اتجاهات مختلفة. التجزئات المتساوية تعني أن البايتات وصلت دون تغيير. التجزئات المختلفة مع تحويل معروف تعني أن الخدمة أنتجت كائنًا جديدًا عن قصد. التجزئات المختلفة دون تحويل تعني أن شيئًا بين النقطتين غيّر المحتوى، والخطوة التالية هي العثور على أول حدّ حدث فيه ذلك.
افصل فشل النقل عن التحويل
الرفع الجزئي والرفع التالف يبدوان متطابقين في متصفح الملفات وهما عطلان مختلفان. تحقق مما إذا كان النقل قد اكتمل: سجل تطبيق يظهر طلبًا مقطوعًا، أو ملف مخزَّن حجمه بادئة من المصدر، أو كائن هو في الحقيقة صفحة خطأ حُفظت تحت الامتداد المتوقع، وكلها تدل على نقل غير مكتمل لا على بايتات مغيّرة.
التحويل هو التفسير الشائع الآخر. الخدمة التي تعيد ضغط الصور أو تعيد كتابة نهايات أسطر CSV أو تحوّل مستندًا ستنتج بشكل مشروع تجزئة تختلف عن المصدر، وذلك ليس تلفًا. قارن المرحلة التي تدّعي أنها النسخة الأمينة، لا صيغة العرض النهائية.
التأخير والفقد ينتميان إلى فئة ثالثة. يمكنهما أن يجعلا العميل ينتهي وقته أو يعيد المحاولة أو يستسلم، ولا شيء من ذلك يعني أن البايتات التي قبلها الخادم قد غُيّرت بصمت. انظر إلى نتيجة النقل قبل أن تنسب أي شيء إلى النفق.
جرّب مسارًا ثانيًا دون تغيير كل شيء
إن اختلفت التجزئات فعلًا ولم يكن هناك تحويل، فأعد الملف نفسه والعميل نفسه والبروتوكول نفسه والوجهة نفسها عبر مسار مدعوم آخر، مثل شبكة محلية بدلًا من VPN. غيّر متغيرًا واحدًا. تغيير العميل ونقطة النهاية والأداة في آن واحد يعطيك نتيجة لا يمكنك نسبتها.
أبقِ المقارنة أمينة في الاتجاهين. التجزئة تخبرك أن نقطتين تختلفان أو تتفقان حول المحتوى؛ ولا تخبرك أي جانب موثوق، لذا أبقِ القيمة المتوقعة والتحقق داخل نموذج الثقة الذي تعتمد عليه فعلًا.
اختم بجملة محددة في التذكرة: توقف النقل مبكرًا، أو حوّلت التطبيقات الكائن، أو غيّره التخزين، أو أن البايتات متطابقة والقراءة هي الفشل. لكل من ذلك مالك مختلف، ولا شيء منها هو VPN افتراضيًا.