Ця частина RFC стосується передачі відповідальності перед операційною системою або будь-яким наступним етапом процесу. Це принципово стосується поділу шарів.
Підтвердження TCP не гарантує передачу даних кінцевому користувачеві, а лише те, що приймаючий TCP взяв на себе відповідальність за це.
Я завжди думав про це так:
- ОС може бути збоєм між відправленням ACK і даними, що надходять до клієнтського процесу (тут "клієнт" означає клієнта ОС, а не "мережевого клієнта")
- Клієнтський процес може бути помилковим або збоєм або просто набагато повільніше, ніж передбачалося, щоб вирішити справу з його вхідними даними, або навіть читати їх лише за неочевидних обставин
- Якщо клієнт надсилає дані далі, можливо, на файл диска, файл, можливо, ще не був записаний або пропущений
- Якщо клієнт надсилає дані далі за допомогою TCP, далекобійний TCP, можливо, не передав дані, отримав ACK або далекий процес успішно спожив дані
Все, про що йдеться, - це підтвердження рівня 3 ("Я чую ваші байти"), а не підтвердження вищого рівня . Розглянемо, наприклад, різницю між TCP ACK, SMTP 250 OK
після того, як шлюз наступного переходу приймає повідомлення, повідомлення про отримання повідомлення (наприклад, за RFC 3798 ), піксель відстеження, відкритий повідомленням, подяку від ПА, і відповідь "Так, я це зроблю".
Іншим конкретним прикладом може бути принтер:
- Він повинен обробляти дані раніше, перш ніж він дізнається, що його кінець містить (може бути файл Postscript, що починається з включеної бібліотеки, більшою за вікно передачі TCP)
- Він може містити запит про стан ("у вас є папір?", Який він, очевидно, може виконувати)
- Він може містити команду друку ("будь-ласка, надрукуйте це", що може бути невдалим, якщо немає паперу)
Я б припустив, що якщо користувачі бачать і надсилають ACK, але все ще відчувають проблеми з підключенням, це на порядок більше, ніж є перевантаженість, проблеми з ОС або додатками, ніж щось, що суворо пов'язане з мережею.
Для діагностики я пропоную шукати повторні повідомлення, а не конкретно АКК.