Транспорт надійності TCP
Ми всі знайомі з протоколом TCP як надійного протоколу транспорту, але як він забезпечує надійність транспорту?
Для досягнення надійної передачі потрібно враховувати багато факторів, таких як корупція даних, втрата, дублювання та осколки поза замовленням. Якщо ці проблеми неможливо вирішити, достовірну передачу неможливо досягти.
Тому TCP використовує такі механізми, як номер послідовності, відповідь підтвердження, контроль надсилання, управління з'єднанням та контроль вікон для досягнення надійної передачі.
У цій роботі ми зосередимось на вікні ковзання, контролі потоку та контролі заторів TCP. Механізм повторної передачі висвітлюється окремо в наступному розділі.
Управління потоком мережі
Контроль потоку мережі або знайте, як управління мережевим трафіком насправді є проявом тонкого взаємозв'язку між виробниками та споживачами. Ви, мабуть, натрапили на цей сценарій багато на роботі або в інтерв'ю. Якщо здатність виробника виробляти значно перевищує спроможність споживача споживати, це призведе до зростання черги на невизначений термін. У більш серйозному випадку ви можете знати, що коли повідомлення RabbitMQ накопичуються занадто сильно, це може спричинити зниження продуктивності всього сервера MQ. Те саме стосується TCP; Якщо його не перевірити, занадто багато повідомлень будуть розміщені в мережу, і споживачі перевищить свою здатність, тоді як виробники продовжуватимуть надсилати повторювані повідомлення, що значно вплине на продуктивність мережі.
Для вирішення цього явища TCP надає механізм відправника для контролю кількості даних, що надсилаються на основі фактичної приймальника приймача, яка відома як управління потоком. Приймач підтримує вікно прийому, а відправник підтримує вікно відправки. Слід зазначити, що ці вікна призначені лише для одного з'єднання TCP, і не всі з'єднання поділяють вікно.
TCP забезпечує управління потоком за допомогою змінної для вікна прийому. Вікно прийому дає відправнику вказівку на те, скільки місця кешу ще доступно. Відправник контролює кількість даних, що надсилаються відповідно до фактичної ємності прийняття одержувача.
Хост приймача повідомляє відправника розміру даних, які він може отримати, і відправник надсилає до цього ліміт. Ця межа - розмір вікна, пам’ятаєте заголовок TCP? Існує поле для прийому, яке використовується для позначення кількості байтів, які приймач здатний або готовий отримати.
Хост відправника періодично надсилатиме пакет зонду вікна, який використовується для виявлення, чи може хост приймача приймати дані. Коли буфер приймача загрожує переповненням, розмір вікна встановлюється на менше значення, щоб доручити відправнику контролювати кількість надісланих даних.
Ось схема управління потоком мережі:
Мережевий контроль заторів
Перш ніж впровадити контроль заторів, ми повинні зрозуміти, що крім вікна прийому та вікна відправки, є також вікно заторів, яке в основному використовується для вирішення проблеми з якою швидкістю відправник починає надсилати дані у вікно прийому. Тому вікно заторів також підтримується відправником TCP. Нам потрібен алгоритм, щоб вирішити, скільки даних доцільно надсилати, оскільки надсилання занадто мало або занадто багато даних не є ідеальним, отже, концепція вікна заторів.
У попередньому контролі потоку мережі, чого ми уникали, - це відправник, який заповнює кеш приймача даними, але ми не знали, що відбувається в мережі. Зазвичай комп'ютерні мережі знаходяться в спільному середовищі. Як результат, може бути затори мережі через зв'язок між іншими хостами.
Коли мережа перевантажена, якщо продовжується велика кількість пакетів, це може спричинити такі проблеми, як затримка та втрата пакетів. На даний момент TCP переказує дані, але повторна передача збільшить навантаження на мережу, що призведе до більших затримок та більшої кількості втрат пакетів. Це може потрапити в порочний цикл і продовжувати збільшуватися.
Таким чином, TCP не може ігнорувати те, що відбувається в мережі. Коли мережа перевантажена, TCP жертвує собою за рахунок зменшення кількості даних, які він надсилає.
Тому пропонується контроль заторів, що має на меті уникнути заповнення всієї мережі даними від відправника. Для регулювання кількості даних, які повинен відправити відправник, TCP визначає концепцію, що називається вікном перевантаженості. Алгоритм контролю заторів регулюватиме розмір вікна заторів відповідно до ступеня перевантаженості мережі, щоб контролювати кількість даних, що надсилаються відправником.
Що таке вікно заторів? Що це стосується вікна надсилання?
Вікно заторів - це змінна стану, яку підтримує відправник, яка визначає кількість даних, які відправник може надіслати. Вікно заторів динамічно змінюється відповідно до рівня заторів мережі.
Вікно відправлення - це узгоджений розмір вікна між відправником та приймачем, що вказує на суму даних, які може отримати одержувач. Вікно заторів та вікно відправки пов'язані; Вікно відправлення зазвичай дорівнює мінімуму перевантаженості та прийому вікон, тобто SWND = Min (CWND, RWND).
Вікно заторів CWND змінюється наступним чином:
Якщо в мережі немає заторів, тобто, тайм -аут повторної передачі не відбувається, вікно перевантаженості збільшується.
Якщо в мережі є затори, вікно заторів зменшується.
Відправник визначає, чи перевантажена мережа, спостерігаючи, чи отримується пакет підтвердження ACK протягом зазначеного часу. Якщо відправник не отримує пакет підтвердження ACK протягом зазначеного часу, вважається, що мережа перевантажена.
Окрім вікна заторів, настав час обговорити алгоритм контролю заторів TCP. Алгоритм контролю заторів TCP складається з трьох основних частин:
Повільний старт:Спочатку вікно заторів CWND порівняно невелике, а відправник збільшує вікно заторів експоненціально, щоб швидко адаптуватися до ємності мережі.
Уникнення заторів:Після того, як вікно заторів перевищує певний поріг, відправник лінійним чином збільшує вікно заторів, щоб уповільнити швидкість зростання вікна заторів та уникнути перевантаження мережі.
Швидке відновлення:Якщо трапляється затори, відправник вдвічі зменшує вікно заторів і переходить у стан швидкого відновлення, щоб визначити розташування відновлення мережі через отримані дублікат ACK, а потім продовжує збільшувати вікно заторів.
Повільний старт
Коли встановлено з'єднання TCP, вікно заторів CWND спочатку встановлюється на мінімальне значення MSS (максимальний розмір сегмента). Таким чином, початкова швидкість відправки стосується MSS/RTT -байт/секунду. Фактична доступна пропускна здатність зазвичай набагато більша, ніж MSS/RTT, тому TCP хоче знайти оптимальну швидкість відправки, яку можна досягти за допомогою повільного запуску.
У процесі повільного запуску значення CWND вікна заторів буде ініціалізовано до 1 MSS, і кожного разу, коли передається сегмент пакетного пакету, значення CWND буде збільшено на одну MSS, тобто значення CWND стане 2 мс. Після цього значення CWND збільшується подвоєння для кожної успішної передачі сегмента пакетів тощо. Конкретний процес росту показаний на наступному малюнку.
Однак швидкість відправки не завжди може зростати; Зростання повинно колись закінчитися. Отже, коли закінчується збільшення швидкості відправлення? Повільний початок, як правило, закінчує збільшення швидкості відправки одним із кількох способів:
Перший спосіб - це випадок втрати пакетів під час процесу надсилання повільного запуску. Коли відбудеться втрата пакету, TCP встановлює вікно заторів відправника CWND до 1 і перезапускає процес повільного запуску. На даний момент вводиться концепція повільного порігу SSThresh, початкове значення якого є половиною значення CWND, що генерує втрату пакетів. Тобто при виявленні заторів значення SSThresh становить половину значення вікна.
Другий спосіб-безпосередньо співвідноситись із значенням повільного порогу SSThresh. Оскільки значення SSThresh становить половину значення вікна при виявленні заторів, втрата пакетів може відбуватися з кожним подвоєнням, коли CWND більший за SSThresh. Тому найкраще встановити CWND на SSThresh, що призведе до переходу TCP на режим управління перевантаженими та закінчуючи повільним запуском.
Останній спосіб, коли повільний старт може закінчитися, - якщо виявлено три надлишкові акки, TCP виконує швидку повторну передачу та входить у стан відновлення. (Якщо не зрозуміло, чому є три пакети ACK, це буде пояснено окремо в механізмі повторної передачі.)
Ухилення від заторів
Коли TCP потрапляє в стан контролю заторів, CWND встановлюється на половину порігу заторів SSThresh. Це означає, що значення CWND не може бути подвоєним щоразу, коли надходить сегмент пакетів. Натомість приймається відносно консервативний підхід, в якому значення CWND збільшується лише на один MSS (максимальна довжина сегмента пакетів) після завершення кожної передачі. Наприклад, навіть якщо 10 сегментів пакетів будуть визнані, значення CWND збільшиться лише на один MSS. Це лінійна модель росту, і вона також має верхню межу зростання. Коли відбувається втрата пакетів, значення CWND змінюється на MSS, а значення SSThresh встановлюється на половину CWND. Або це також зупинить зростання МСС, коли отримають 3 надлишкові відповіді ACK. Якщо три надлишкові ACK все ще отримані після вдвічі зменшення значення CWND, значення SSThresh реєструється як половина значення CWND і вводиться стан швидкості відновлення.
Швидке відновлення
У швидкому стані відновлення значення CWND вікна заторів збільшується на один MSS для кожного отриманого надлишкового ACK, тобто ACK, який не надходить послідовно. Це для використання сегментів пакетів, які успішно передаються в мережі, щоб максимально підвищити ефективність передачі.
Коли надходить ACK сегмента втраченого пакету, TCP зменшує значення CWND, а потім надходить у стан уникнення заторів. Це для контролю розміру вікна заторів та уникнення подальшого збільшення перевантаженості мережі.
Якщо тайм-аут відбувається після стану контролю заторів, стан мережі стає більш серйозним, а TCP мігрує зі стану уникнення заторів у стан повільного запуску. У цьому випадку значення CWND вікна заторів встановлюється на 1 мс, максимальну довжину сегмента пакетів та значення порогу повільного запуску SSThresh встановлюється на половину CWND. Мета цього-переоцінка збільшити розмір вікна заторів після того, як мережа відновлює, щоб збалансувати швидкість передачі та ступінь перевантаженості мережі.
Резюме
Як надійний протокол транспорту, TCP реалізує надійний транспорт за номером послідовності, підтвердженням, контролем повторної передачі, управлінням підключенням та контролем вікна. Серед них механізм управління потоком контролює кількість даних, надісланих відправником відповідно до фактичної здатності приймача, що дозволяє уникнути проблем перевантаженості мережі та деградації продуктивності. Механізм контролю заторів уникає виникнення перевантаженості мережі, коригуючи кількість даних, надісланих відправником. Поняття вікна заторів та вікна, що надсилають, пов'язані один з одним, а кількість даних у відправника керується динамічно регулюванням розміру вікна заторів. Повільний старт, уникнення заторів та швидке відновлення - це три основні частини алгоритму контролю заторів TCP, які регулюють розмір вікна перевантаженості за допомогою різних стратегій для адаптації до потенціалу та ступеня перевантаження мережі.
У наступному розділі ми детально розглянемо механізм повторної передачі TCP. Механізм повторної передачі є важливою частиною TCP для досягнення надійної передачі. Це забезпечує надійну передачу даних шляхом повторного переказу втрачених, пошкоджених або затриманих даних. Принцип впровадження та стратегія механізму повторної передачі будуть введені та проаналізовані детально в наступному розділі. Залишайтеся в курсі!
Час посади: лютого-24-2025