Сжатие TCP/IP-соединений при помощи ssh

Sebastian Schreiber

Перевод: Павел Гашев, ASPLinux


Содержание
Введение
Сжатие HTTP/FTP,...
Сжатие электронной почты
Быстродействие.
Благодарности
Авторские права

Введение

Раньше мы использовали сжатые файлы для того, чтобы освободить место на диске. Сегодня дисковое пространство стало довольно дешево, но ограничены пропускные способности каналов. Сжатием потоков данных, мы достигаем следующих целей:

1) Уменьшаем размер передаваемых данных (это важно, если мы платим за трафик, или если сеть перегружена).

2) Ускоряем передачу по медленным каналам (Модем, GSM, ISDN).

Это HOWTO рассказывает, как достигнуть этих целей, используя такие утилиты, как SSH1, SSH2, OpenSSH или LSH.


Сжатие HTTP/FTP,...

Мой офис подключен к Интернет через ISDN на скорости 64Кбит, так что максимальная скорость передачи является около 7Кб/сек. Можно повысить скорость соединения, путем сжатия передаваемой информации: теперь, когда я скачиваю файлы, Netscape показывает скорость до 40Кб/сек (файлы журналов сжимаются в 15 раз). SSH - это утилита, предназначенная для обеспечения безопасного соединения через небезопасные сети, при помощи шифрования данных. Но, кроме того, SSH способна сжимать информацию и осуществлять переадресацию портов (аналогично rinetd или redir). Так что она вполне подходит для сжатия простых TCP/IP соединений. "Простых" \- значит, что открывается только одно TCP-соединение. FTP-соединения или соединения между M$-Outlook и MS-Exchange не являются "простыми", т.к. открывается несколько соединений одновременно. SSH использует алгоритм сжатия LempleZiv (LZ77), обеспечивая такую же компрессию, как и в winzip/pkzip. Для того, чтобы сжимать все HTTP-соединения с Интернет, мне необходимо запустить одну команду на своей машине:

ssh -l <login ID> <hostname> -C -L8080:<proxy_;at_;ISP>:80 -f sleep 10000

<hostname> = машина моего провайдера, обеспечивающая доступ через SSH.

<login ID> = мое имя входа на <hostname>

<proxy_;at_;ISP> =веб-прокси-сервер моего провайдера

Обозреватель настроен на работу через прокси-сервер localhost:8080. Портативный компьютер настроен на этот же порт моей машины. Соединения сжимаются и переназначаются реальному прокси-серверу сервером SSH. Инфраструктура выглядит примерно так:

                      64KBit ISDN
Мой компьютер--------------------------------Компьютер (Unix/Linux/Win-NT)
SSH-клиент         сжато                     моего провайдера  
порт 8080                                    SSH-сервер, порт 22
 |                                            |
 |                                            |
 |                                            |
 |10МБит Ethernet                             |100МБит
 |не сжато                                    |не сжато
 |                                            |
 |                                            |
Мой второй компьютер                         WWW-прокси провайдера
с Netscape,...                               порт 80
(портативный)

 

Сжатие электронной почты

Входящая почта (POP3, IMAP4)

Большинство людей принимают электронную почту с почтового сервера при помощи POP3. POP3 - это протокол со многими недостатками.

  1. POP3 передает пароль, как обычный текст. (Хотя есть различные реализации SSL для POP/IMAP и аутентификация типа запрос/ответ, описанные в RFC-2095/2195).

  2. POP3 - избыточный протокол: сначала клиент запрашивает сообщение, затем сервер посылает его. После этого клиент может дать серверу команды удаления принятых сообщений. Сервер подтверждает удаление. Далее сервер дает понять, что он готов к следующей команде. Таким образом, необходимо 4 команды, чтобы принять каждое письмо.

  3. POP3 передает почту без сжатия, хотя она очень хорошо компрессируется (в 3.5 раза).

Возможно осуществить сжатие POP3, перенаправляя соединения с адреса localhost:110 через сжатое соединение к вашему провайдеру на порт POP3. Для этого необходимо в почтовой программе установить сервер входящей почты в localhost:110. Это безопасное и быстрое соединение, но оно все еще зависит от недостатков протокола POP3.

Имеет смысл заменить POP3 на более эффективный протокол. Идея заключается в том, чтобы перекачивать все содержимое почтового ящика, хранящегося на почтовом сервере, без какого-то ни было почтового протокола. SCP - хорошая утилита для выполнения этого. Вы можете скачать ваш почтовый ящик примерно так:

scp -C -l имя:/var/spool/mail/loginid /tmp/newmail

Но есть проблема: что произойдет, если во время передачи на сервер придет новая почта? Новая почта будет потеряна. Таким образом, лучше всего использовать следующие команды:

ssh -l имя почтовый_сервер -f mv /var/spool/mail/имя /tmp/имя_fetchme

scp -C -l имя:/tmp/my_;new_;mail /tmp/имя_fetchme

mv - это простая операция, мгновенно переносящая файл в другое место, так что у вас не будет проблем, если придет новая почта. Но если каталоги /tmp/ и /var/spool/mail находятся на разных дисках/разделах, у вас все-таки могут возникнуть некоторые трудности. Решение - это создать файл блокировки на сервере перед тем, как перекачивать почту: touch /var/spool/mail/имя.lock. Вы должны убрать его после того, как закончите перекачку. А еще лучше, переименовать почтовый ящик внутри этого же каталога:

ssh -l имя почтовый_сервер -f mv /var/spool/mail/имя /var/spool/mail/имя_fetchme

Затем обработайте полученный почтовый ящик /tmp/newmail, при помощи команд formail и procmail: formail -s procmail < /tmp/newmail


Исходящая почта (SMTP)

Передача электронной почты через сжатое и шифрованное SSH-соединение обеспечивает:

  • Уменьшение трафика сети

  • Безопасность (впрочем, это не имеет смысла, если далее почта идет по незащищенным сетям)

  • Аутентификация посылающего. Большинство почтовых серверов не принимают почту с других машин, предназначенную для внешней доставки (relay). Если вы посылаете почту через SSH-соединение, почтовый сервер (sendmail или MS-exchange) думает, что она посылается с локальной программы...

Если на почтовом сервере установлен доступ SSH, используйте следующую команду:

ssh -C -l имя почтовый_сервер -L2525:почтовый_сервер:25

Если у вас нет SSH-доступа к почтовому серверу, но есть сервер с SSH, которому разрешена связь с другими машинами, вы можете использовать его:

ssh -C -l имя другой_сервер -L2525:почтовый_сервер:25

После этого вы можете настроить свою почтовую программу (или почтовый сервер: см. "smarthost") так, чтобы она посылала исходящую почту через localhost:2525.


Быстродействие.

Конечно же, сжатие/шифрование занимает процессорное время. Например старый Пентиум-133 может сжимать и шифровать около 1Гб в час, а это достаточно много. Чтобы увеличить скорость, вы можете скомпилировать SSH с опцией "-with-none", и он не будет шифровать информацию. Следующая таблица дает сравнение между различными методами загрузки (файл 6МБ передавался с Pentium-133 на Pentium-233 через сеть 10Мбит).

+-------------------+--------+----------+-----------+------------------------+
|                   |  FTP   |шифрованый|   сжатый  |сжатый   &   шифрованный|
+-------------------+--------+----------+-----------+------------------------+
+-------------------+--------+----------+-----------+------------------------+
|       Время       |  7.6с  |   26с    |    9с     |          23с           |
+-------------------+--------+----------+-----------+------------------------+
|      Скорость     | 790K/с |  232K/с  |  320K/с   |        264K/с          |
+-------------------+--------+----------+-----------+------------------------+
|       Сжатие      |   1    |    1     |    3.8    |          3.8           |
+-------------------+--------+----------+-----------+------------------------+
 

Благодарности

Выражаю благодарность Harald Koenig , который дал идею использования rcp при перекачке почтового ящика. Последняя версия этого документа находится на http://www.syss.de/howto.


Авторские права

Авторские права на русский перевод этого текста принадлежат ╘ 2000 ASPLinux Все права зарезервированы.

Этот документ является частью проекта Linux HOWTO.

Авторские права на документы Linux HOWTO принадлежат их авторам, если явно не указано иное. Документы Linux HOWTO, а также их переводы, могут быть воспроизведены и распространены полностью или частично на любом носителе, физическом или электронном, при условии сохранения этой заметки об авторских правах на всех копиях. Коммерческое распространение разрешается и поощряется; но, так или иначе, автор текста и автор перевода желали бы знать о таких дистрибутивах.

Все переводы и производные работы, выполненные по документам Linux HOWTO, должны сопровождаться этой заметкой об авторских правах. Это делается в целях предотвращения случаев наложения дополнительных ограничений на распространение документов HOWTO. Исключения могут составить случаи получения специального разрешения у координатора Linux HOWTO, с которым можно связаться по адресу приведенному ниже.

Мы бы хотели распространить эту информацию по всем возможным каналам. Но при этом сохранить авторские права и быть уведомленными о всех планах распространения HOWTO. Если у вас возникли вопросы, пожалуйста, обратитесь к координатору проекта Linux HOWTO по электронной почте: или к координатору русского перевода Linux HOWTO компании ASPLinux по адресу