Надійний потік байтів — поширена парадигма сервісу в комп'ютерних мережах; вона стосується потоку байтів, у якому байти, що виходять із каналу зв'язку на стороні отримувача, є точно такими самими й у точно такому самому порядку, як і тоді, коли відправник вставив їх у канал.
Класичним прикладом комунікаційного протоколу з надійним потоком байтів є TCP, один із основних будівельних блоків Інтернету. TCP надає застосункам надійний сервіс потоку байтів зі збереженням порядку.
Однак надійний потік байтів не є єдиною парадигмою надійного сервісу, яку забезпечують протоколи зв'язку комп'ютерних мереж; інші протоколи, такі як SCTP, забезпечують надійний потік повідомлень, у якому дані поділяються на окремі одиниці та доставляються споживачеві даних як дискретні об'єкти.
Механізм Протоколи зв'язку, які реалізують надійні потоки байтів, зазвичай поверх деякого ненадійного нижчого рівня, використовують такі механізми, як нумерація послідовності, підтвердження отримання, повторна передача, таймери та виявлення помилок для забезпечення надійності. Протоколи автоматичного запиту на повторення (ARQ) відіграють важливу роль у досягненні надійності.
Елементи даних ідентифікуються за допомогою номера послідовності, який використовується як для забезпечення доставки даних сутності на іншому кінці в правильному порядку, так і для виявлення втрачених елементів даних. Отримувач надсилає назад підтвердження для елементів даних, які було успішно отримано; таймер на стороні відправника спричинить тайм-аут, якщо підтвердження не буде отримано протягом прийнятного часу проходження в обидва боки, після чого дані, які, ймовірно, було втрачено, буде передано повторно. Для перевірки того, що жоден елемент даних не пошкоджено, використовується контрольна сума; відправник обчислює її для кожного блока даних перед його надсиланням, а отримувач перевіряє. Про помилкові або відсутні дані повідомляється відправнику, щоб він міг передати їх повторно. Будь-які дубльовані елементи даних відкидаються.
Блокування початку черги Блокування початку черги може виникати в надійних потоках байтів: якщо пакети перевпорядковано або втрачено й вони потребують повторного передавання (і тому надходять не в порядку), дані з послідовно пізніших частин потоку можуть бути отримані раніше за послідовно раніші частини потоку; однак пізніші дані зазвичай не можуть бути використані, доки не буде отримано раніші дані, що спричиняє мережеву затримку. Якщо кілька незалежних повідомлень вищого рівня інкапсулюються та мультиплексуються в один надійний потік байтів, тоді блокування початку черги може призвести до того, що обробка повністю отриманого повідомлення, яке було надіслано пізніше, очікуватиме доставки повідомлення, яке було надіслано раніше. Це впливає, наприклад, на HTTP/2, який розбиває на кадри кілька пар запит–відповідь в одному потоці; HTTP/3, який має конструкцію фреймінгу на рівні застосунків і використовує дейтаграми, а не потоковий транспорт, уникає цієї проблеми. Погіршення затримки через блокування початку черги залежить від базового рівня втрат пакетів та часу проходження в обидва боки, причому більша кількість втрат спричиняє гіршу затримку. Без зміни абстракції потоку зменшення втрат пакетів може зменшити шкоду від блокування початку черги; альтернативним підходом є реалізація надійного потоку байтів за допомогою корекції помилок вперед, щоб надсилати надлишкові дані, завдяки чому певний рівень втрат можна витримати без необхідності повторного передавання.
Див. також Автоматичний запит повторної передачі
Примітки