diff --git a/docs/readme.md b/docs/readme.md index 712f968..d4c7255 100644 --- a/docs/readme.md +++ b/docs/readme.md @@ -812,6 +812,7 @@ tpws - это transparent proxy. --skip-nodelay ; не устанавливать в исходящих соединения TCP_NODELAY. несовместимо со split. --local-tcp-user-timeout= ; таймаут соединений client-proxy (по умолчанию : 10 сек, 0 = оставить системное значение) --remote-tcp-user-timeout= ; таймаут соединений proxy-target (по умолчанию : 20 сек, 0 = оставить системное значение) +--fix-seg ; исправлять неудачи tcp сегментации ценой задержек для всех клиентов и замедления --split-pos=N|-N|marker+N|marker-N ; список через запятую маркеров для tcp сегментации --split-any-protocol ; применять сегментацию к любым пакетам. по умолчанию - только к известным протоколам (http, TLS) @@ -877,6 +878,15 @@ tpws, как и nfqws, поддерживает множественную се указанным сплит позициям. Другие ОС в этом вопросе ведут себя более предсказуемо. Спонтанного обьединения замечено не было. Поэтому не стоит злоупотреблять сплитами и в особенности мелкими соседними пакетами. +Как показывается практика, проблемы могут начаться , если количество сплит позиций превышает 8. +При неудаче сегментации будет выводиться сообщение `WARNING ! segmentation failed`. +Если вы его видите, это повод снизить количество сплит позиций. +Если это не вариант, есть параметр `--fix-seg`. Он позволяет подождать завершение отсылки перед отправкой следующей части. +Но этот вариант ломает модель асинхронной обработки событий. Пока идет ожидание, все остальные соединения не обрабатываются +и кратковременно подвисают. На практике это может быть совсем небольшое ожидание - менее 10 мс. +И производится оно только , если происходит split, и в ожидании есть реальная необходимость. +В высоконагруженных системах данный вариант не рекомендуется. Но для домашнего использования может подойти, и вы эти задержки даже не заметите. + tpws работает на уровне сокетов, поэтому длинный запрос, не вмещающийся в 1 пакет (TLS с kyber), он получает целым блоком. На каждую сплит часть он делает отдельный вызов `send()`. Но ОС не сможет отослать данные в одном пакете, если размер превысит MTU. В случае слишком большого сегмента ОС дополнительно его порежет на более мелкие. Результат должен быть аналогичен nfqws.