TCP усередині SSTP: чому повторне передавання відбувається двічі
SSTP несе тунель у потоці TCP поверх TLS. Коли шлях втрачає пакети, зовнішнє й внутрішнє відновлення відступають одночасно.
Поговір приходить раніше за протокол. Запитайте навколо, і SSTP виявиться повільним, варіантом, якого уникають, якщо щось не змусить. Ця репутація описує один режим відмови на одному типі шляху.
Механізм реальний. Він також умовний, про що репутація ніколи не згадує.
Два надійні потоки на одному шляху
SSTP загортає свій тунель у сеанс HTTPS. HTTPS працює поверх TCP, і цей зовнішній потік гарантує впорядковане доставляння. Тому один відсутній сегмент затримує все, що стоїть у черзі за ним. Пізніші байти, що належать іншим внутрішнім розмовам, усе одно чекають.
Внутрішні потоки TCP зберігають власний порядок і керування перевантаженням. Вони не бачать зовнішнього відновлення, тож єдине, що спостерігають, — це зупинка. Зупинка — це сигнал, який каже їм, що шлях перевантажений.
Тепер обидва рівні відступають одночасно. Це вся взаємодія, і одного втраченого сегмента достатньо, щоб її запустити.
Де ефект з'являється, а де ні
На чистому шляху зовнішній потік рідко щось відновлює. Взаємодія ніколи не запускається, і SSTP чудово несе інтерактивний трафік. Загальне твердження зазнає краху саме в цій точці.
Ефект з'являється, коли втрати або перевпорядкування доходять до базового шляху. Перевантажене Wi-Fi-з'єднання або мобільне з'єднання зі змінною затримкою створюють умови. Заблокована зовнішня черга тоді перетворюється на помітну затримку всередині тунелю.
Він також зростає з робочим навантаженням. Багато паралельних потоків заповнюють чергу й погіршують блокування на чолі черги. Один інтерактивний сеанс на тому самому шляху може здаватися прийнятним.
Чим симптом зазвичай не є
Не кожен повільний сеанс — ця проблема. Рівномірно низька швидкість від першого пакета вказує на пропускну здатність, формування або обмеження сервера. Паузи, що збігаються з локальним перевантаженням, вказують на черги на каналі доступу.
Засоби різняться, тому діагноз іде першим. Налаштування буферів нічого не дає для сформованого каналу. Зміна протоколів нічого не дає серверу, у якого закінчилася пропускна здатність. Повторні скидання вказують зовсім в інше місце.
# outer path quality to the SSTP endpoint
ping -c 50 203.0.113.44 | tail -3
mtr -rwc 50 203.0.113.44
# is the local link saturated while the session stalls?
sar -n DEV 2 5
# retransmissions on the outer connection
ss -tin dst 203.0.113.44
Виконуйте вимірювання, поки проблема відбувається. Запис, зроблений у здорову хвилину, нічого не доводить про цикл, що працює в погану.
Порівняння, якому варто довіряти
Якщо інший транспорт справді доступний, порівняйте його в контрольованих умовах. Той самий хост, та сама мережа, те саме призначення й те саме завдання. Обидва запуски мають укластися в ті самі десять хвилин, щоб умови шляху збігалися.
Зміна порту не змінює протокол. Імпорт стороннього профілю в клієнт SSTP не створює альтернативного транспорту. Порівняння має сенс лише тоді, коли сервер пропонує другий варіант.
Тримайте перевірку TLS увімкненою весь час. Робота над продуктивністю не є причиною приймати неперевірений сертифікат. Якщо зупинки з'являються переважно тоді, коли висхідний канал насичений, подивіться на черги, перш ніж звинувачувати рівні.