DataLife Engine > Настройка > Реактивный SSH (HPN-SSH)

Реактивный SSH (HPN-SSH)


16-02-2012. Разместил: synergix Среди новшеств, которые принес выход FreeBSD 9.0, значится высокопроизводительный SSH. Сопутствующие опции были добавлены в /etc/ssh/sshd_config.
Эта статья является вольным переводом данного документа.

Сетевая производительность OpenSSH ограничена за счет статически определённых внутренних буферов потока. Они зачастую исчерпываются и создают узкое место для SCP-потока, особенно на широкополосных и протяженных линиях. HPN-SSH добавляет поддержку динамически изменяемых размеров буферов, так, чтобы можно было задействовать целиком толстые и протяжённые каналы, такие как 100Mbps и более быстрые трансатлантические и трансконтинентальные линии. Задержки передачи на широкополосных каналах вплоть до 64Mb также допустимы. Данная реализация включает в себя мультипоточное шифрование, что обеспечивает эффективную обработку данных процессором для такой широкой полосы пропускания.

Также добавлена поддержка (не включенная по умолчанию) отключения шифрования (None cypher). Оно может быть отключено только для неинтерактивных сессий, и может использовано как в виде директив конфигурационного файла сервера и клиента, так в режиме командной строки. Отключение шифрования возможно только в случае успешной аутентификации. Для включения данной поддержки добавьте -DNONE_CIPHER_ENABLED в CFLAGS через командную строку или в /etc/make.conf

Примечания.

Отключение шифрования:
Для использования опции None значение NoneEnabled должен быть установлено на сервере в "ON", а также опции NoneEnabled и NoneSwitch на стороне клиента в "YES". Данная функция работает со всеми подсистемами SSH (насколько нам известно) до тех пор, пока нет сессий tty. В случае, если пользователь использует флаг -T шифрование будет активировано.

Производительность:
Производительность будет увеличена в случае наличия хорошего (высокоскоростного) соединения и оптимизированного TCP-стека на принимающей стороне. Как правило, необходима полоса пропускания не менее 10Mb/s с временем отклика не более 100ms для удвоения производительности.

Реактивный SSH (HPN-SSH)


Размеры буферов:
- если HPN выключен, размер принимающего буфера установится в обычное для OpenSSH значение - 64kb.
- если система с HPN соединяется с системой, не поддерживающей HPN, то принимающий буфер принимает значение HPNBufferSize. Обычно это 2MB, но может изменяться пользователем.
- если соединяются две системы с поддержкой HPN, то размеры буферов устанавливаются согласно описываемым пользователем правилам и условиям.

Пример: HPNBufferSize не установлен, TCPRcvBufPoll включен, TCPRcvBuf не установлен.
Результат: HPN Buffer Size = до 64MB
Размер HPN buffer может увеличится максимум до 64 Mb по мере увеличения входящих буферов TCP. Максимальное значение в 64Mb предназначено для трансконтинентальных линков 10GigE.

Пример: HPNBufferSize не установлен, TCPRcvBufPoll выключен, TCPRcvBuf не установлен.
Результат: Размер HPN Buffer будет равен значению принимающего буфера TCP. Пользователи на системах, не поддерживающие автонастройку смогут выключить TCPRcvBufPoll в конфиге ssh_cofig и sshd_config.

Пример: HPNBufferSize установлен, TCPRcvBufPoll выключен, TCPRcvBuf не установлен
Результат: Размер HPN Buffer будет равен минимальному значению принимающего буфера TCP и HPNBufferSize.
То есть оно будет равно размеру буфера, в котором накапливается содержимое области данных (MSS) нескольких полученных пакетов, прежде чем передается дальше.

Пример: HPNBufferSize установлен, TCPRcvBufPoll выключен, TCPRcvBuf установлен.
Результат: Размер HPN Buffer равен минимальному значению TCPRcvBuf и HPNBufferSize. Обычно нет необходимости в выставлении.

Пример: HPNBufferSize установлен, TCPRcvBufPoll включен, TCPRcvBuf не установлен.
Результат: Размер HPN Buffer будет увеличиваться согласно HPNBufferSize до максимально значения.

Пример: HPNBufferSize установлен, TCPRcvBufPoll включен, TCPRcvBuf установлен
Результат: Размер HPN Buffer будет равен минимальному значению TCPRcvBuf и HPNBufferSize. Обычно нет необходимости в настройке.

Пример: HPNBufferSize не установлен, TCPRcvBufPoll включен, TCPRcvBuf установлен.
Результат: Размер HPN Buffer = TCPRcvBuf.


Теперь рассмотрим опции в конфигурационных файлах.

HPNDisabled=[yes/no]


В некоторых случаях, таких как передача данных по локальной сети, наблюдается снижение производительности. В этом случае необходимо выключить HPN. По умолчанию HPNDisabled="no". Может быть определено как на сервере, так и на клиенте.


HPNBufferSize=[int]KB


В данной опции задается целочисленное значение размера буфера HPN, которое используется при соединении с SSH, не поддерживающих функциональность HPN. Концептуально оно похоже на TcpRcvBuf применительно к внутреннему контролю потока SSH. Может принимать значения от 1 КБ до 64 МБ (1-65536). Использование слишком большого или слишком маленького данного значения может привести к проблемам с производительностью в зависимости от протяженности сетевого маршрута. По умолчанию размер буфера 2М. (2048KB) Может быть определено как на сервере, так и на клиенте.

TcpRcvBufPoll=[yes/no]

Включает или отключает поллинг принимающих буферов TCP на протяжении активности соединения. Для использования необходимо убедиться, что ваше ядро поддерживает данную опцию (linux 2.4.24+, 2.6, MS Vista и выше, FreeBSD 7.x и выше). По умолчанию TcpRcvBufPoll=yes. Может быть определено как на сервере, так и на клиенте.

TcpRcvBuf=[int]KB

В данной опции задается целочисленное значение принимающего буфера TCP, по умолчанию использует системное значение. Минимальный размер буфера равен 1KB. Можно использовать для ограничения скорости передачи данных, используя n/RTT, где n-размер буфера, RTT - двухсторонняя задержка. Задается на клиенте.

NoneEnabled=[yes/no]

Включает или отключает поддержку шифрования. При отключении шифрования данные передаются в открытом виде. Тем не менее, проверка подлинности (аутентификация) остается зашифрованной даже если шифрование отключено. По умолчанию установлено в "NO". Может быть определено как на сервере, так и на клиенте.

NoneSwitch=[yes/no]

Переключает режим шифрования после аутентификации. Опция NoneEnabled должна быть включена на стороне клиента. Когда отключается шифрование соединения, предупреждение посылается в STDERR, оказываясь, таким образом на экране терминала. Попытка переключения не будет выполнена, если клиент запросит NoneSwitch при выставленном значении NoneEnabled="no" на сервере. По умолчанию равно "NO". Задается на клиенте.

Примечание: Отключение шифрования не будет работать при интерактивной сессии (шелл) и попытка переключения не удастся, не выводя никаких предупреждений.


Если Вы заметили неточность в описании или переводе - напишите мне и мы оперативно поправим данную статью.
Вернуться назад