Багато адміністраторів продовжують продовжувати - як на ServerFault, так і в інших місцях - наскільки погана ідея TCP-over-TCP, наприклад, у VPN. Якщо навіть найменша втрата пакета змусить страждати від принаймні сильної деградації пропускної здатності, якщо не зриву TCP, і тому TCP-над-TCP суворо уникати. І це, мабуть, колись все було правдою, наприклад 2001 р., Коли ця стаття була написана, про яку й досі йдеться.
Але відтоді ми спостерігаємо значні досягнення в галузі технологій та протоколів. На сьогоднішній день у нас «Селективний ACK» впроваджений майже скрізь, і закон Мура дав нам набагато більше пам’яті, і разом з ним з'явилися великі буфери TCP, оптимізовані для Gbit-посилань. Також втрата пакетів набагато менша проблема в ці дні на нерадіоканалах. Все це повинно суттєво полегшити проблему TCP-over-TCP, чи не так?
Зауважте, що існують сценарії в реальному світі, де, наприклад, VPN на основі TCP легше реалізувати та працювати, ніж такі, які базуються на UDP / ESP (див. Докладніше нижче). Тому моє запитання:
За яких обставин (втрата та затримка пакетів зв’язків) TCP-над-TCP працює значно гірше, ніж сам TCP, припускаючи підтримку SACK та пристойні розміри буферів TCP з обох кінців?
Було б чудово, тому подивіться деякі вимірювання, які показують кореляцію між (зовнішнім з'єднанням) втратою / затримкою пакету та (внутрішнім з'єднанням) пропускною здатністю / тремтінням - для TCP-над-TCP і лише для TCP. Я знайшов цю цікаву статтю , але, здається, вона стурбована лише затримкою, а не адресовані (зовнішні) втрати пакетів.
Також: Чи є рекомендовані параметри (наприклад, параметри TCP, настройки буфера, зменшення MTU / MSS тощо), щоб зменшити розрив у продуктивності між TCP та TCP-над-TCP?
Оновлення: Наше обгрунтування.
Це питання все ще є дуже актуальним у деяких реальних сценаріях. Наприклад, ми розміщуємо вбудовані пристрої у великих будівлях, які збирають дані сенсорів і передають їх на нашу платформу через VPN. Проблема, з якою ми стикаємося, - це брандмауери та неправильно налаштовані посилання, які не знаходяться під нашим контролем, у поєднанні з неохоче ІТ-відділами. Дивіться детальний приклад, обговорений тут .
У багатьох таких випадках перехід від не-TCP до VPN на основі TCP (дуже просто, якщо ви використовуєте OpenVPN, як ми) - це швидке виправлення, яке дозволяє нам ухилятися від боїв, що вказують пальцями вгору. Наприклад, часто TCP-порт 443 дозволений (принаймні, через проксі), або ми можемо подолати проблеми Path-MTU, просто зменшивши MSS-параметр TCP.
Було б добре знати, за яких обставин VPN на основі TCP можна вважати життєздатною альтернативою, тому ми можемо приймати обгрунтоване рішення, що переважає плюси та мінуси будь-якого варіанту. Наприклад, ми знаємо, що TCP-VPN добре для нас на нерадіопосиланнях, але у нас є велика частка віддалених клієнтів у 3G посиланнях зі значними втратами пакетів та високою затримкою - як би тут працював TCP-VPN?
Я намагався відповідно вдосконалити назву та центральне питання; Сподіваюся, це має сенс.