Хибна контрольна сума в записі VPN — це не пошкодження файлу
Запис може побачити пакет раніше, ніж адаптер його завершить. Відокремте вердикт аналізатора від отриманого файлу й доведіть цілісність хешем.
Аналізатор позначає пакет як такий, що має хибну контрольну суму, а завантажений файл виглядає неправильно, тому два спостереження зливаються в одну історію про пошкодження на VPN. Це різні вимірювання, зроблені в різних точках. Одне описує те, що побачив механізм запису до того, як мережевий адаптер завершив свою роботу; друге описує байти, які зберегла програма. Встановити, котре з них справді змінилося, — це і є весь діагноз.
Де запис розташований щодо адаптера
Запис пакетів — це знімок в одній точці шляху, що містить кілька перетворень. Між стеком хоста й дротом розташовані сегментація, обчислення контрольної суми та, під час приймання, об'єднання. Точка запису показує стан у цей момент, який рідко збігається з остаточним кадром на дроті. Читати його так, ніби це сам дріт, — саме так поле-заповнювач перетворюється на звинувачення.
Тому корисне питання про будь-яке підозріле поле — не чи воно виглядає неправильно, а де його спостерігали. Запишіть поруч із знахідкою інтерфейс запису, версію аналізатора й рівень пакета; без цих трьох мітку контрольної суми взагалі неможливо витлумачити.
Що вивантаження під час передавання робить зі слідом
Коли вивантаження контрольної суми під час передавання ввімкнене, адаптер обчислює контрольну суму й заповнює поле після того, як хост поставив пакет у чергу. Тому запис на боці хоста фіксує заповнювач, і аналізатор повідомляє про контрольну суму, яку дріт ніколи не ніс. Вивантаження сегментації створює подібний артефакт, адже хост може передати адаптеру один великий буфер, який пізніше стає кількома кадрами.
Довідка Wireshark про вивантаження описує обидва ефекти й зауважує, що розпізнавання часткових контрольних сум залежить від версії аналізатора та типу пакета. Тому старіший інструмент запису й новіший можуть розходитися в думках про той самий слід, хоча обидва читають його правильно.
Інкапсуляція додає другий об'єкт
VPN вставляє в картину другий пакет. Інтерфейс тунелю показує внутрішній пакет, який програма справді надіслала, а фізичний інтерфейс показує зовнішнє інкапсульоване з'єднання, що його несе. Контрольна сума або довжина, взяті з внутрішнього пакета, не належать зовнішньому кадру, і порівняння їх так, ніби вони описують один об'єкт, дає безглуздя.
Коли треба порівнювати, порівнюйте подібне з подібним: внутрішнє з внутрішнім, зовнішнє із зовнішнім, у тій самій точці шляху. Неузгоджена пара полів доводить лише те, що виміряно два різні об'єкти. Зауважте, з якого інтерфейсу походить кожен слід, бо чистий на вигляд запис тунелю нічого не каже про те, що видав адаптер.
Доведіть цілісність файлу хешами
Для самого файлу обчисліть хеш вмісту з відтворюваного джерела й зі збереженого результату, а потім порівняйте дайджести. Це відповідає на інше питання, ніж будь-яка мітка за пакетом, і відповідає на нього щодо об'єкта, який справді важливий користувачеві.
sha256sum payload.bin
sha256sum /srv/transfer/payload.bin
cmp -l payload.bin /srv/transfer/payload.bin | head
Рівні дайджести закривають питання пошкодження для цього передавання. Різні дайджести відкривають вужче: знайдіть найраніший етап, де байти розходяться, і перевірте, чи не перетворило щось файл навмисно. Часткове збереження, перекодоване вкладення й сторінка помилки, збережена під очікуваним ім'ям файлу, змінюють байти без жодного мережевого дефекту.
Локалізуйте шлях адаптера, не роблячи його постійним
Для відтворюваної проблеми, пов'язаної з одним доком або адаптером, тримайте профіль VPN, програму, тестовий об'єкт і призначення фіксованими, а потім повторіть передавання через підтримуваний альтернативний інтерфейс. Результат, що змінюється разом з адаптером, локалізує несправність на цьому шляху; він ще не визначає налаштування драйвера й не доводить дефект усієї моделі.
Глобальне вимкнення вивантаження — спокусливий тест і погане значення за замовчуванням. Налаштування для всього хоста впливає на трафік далеко за межами експерименту й може нести реальні витрати продуктивності, тому ставтеся до будь-якої такої зміни як до тимчасової, записуйте її та повертайте назад. Використовуйте підтримувану виробником діагностику, перш ніж залишити обхідне рішення, позичене з іншої машини.
У звіті має бути зазначено, який із трьох результатів змінився: інтерпретація пакета аналізатором, завершені байти програми або відтворюваність одного шляху адаптера. Вони ведуть до трьох різних наступних дій, і лише одна з них стосується шифрування.