новости
статьи
.интернет-технологии

Обзор RFC: попытка взглянуть на будущее IRC

Сейчас абсолютно никого не удивишь управлением фирмой через Интернет, когда руководство находится в одной стране, сотрудники - в другой, а заказчики - в третьей. Многие минские фирмы для срочных коммуникаций используют интернет-пейджер ICQ. Однако задолго до его появления существовал еще один способ общения в режиме реального времени - IRC (Internet Relay Chat).

Первая реализация IRC была написана Jarkko Oikarinen в 1988 году в Финляндии как замена программе talk - любой, кто работал с unix'ами и linux'ами, меня поймет. IRC - это многопользовательская система чата, в которой можно общаться как в группах (channels - виртуальное место, обычно с определенной темой для общения), так и один на один. Для общения в IRC можно использовать и специально предназначенную для этого программу (наиболее популярными являются mIRC и Pirch), и обычный telnet.

Меня затронуть этот вопрос подвиг выход в свет новых RFC - возможного будущего IRC.

Однако для более полного понимания IRC необходимо рассмотреть, какие изменения были внесены, и поэтому я обратился к первой попытке его стандартизировать - RFC 1459.

Request for Comments: 1459

Internet Relay Chat Protocol

D. Reed and J. Oikarinen

May 1993

Status: Experimental Protocol

Этот документ послужил основой для многочисленных публикаций на тему "Как воспользоваться IRC, не имея специального IRC-клиента?". Как правило, все сводилось к использованию telnet'а или netcat'а, хотя можно использовать любую программу, способную работать с сокетами. Это стало возможным благодаря тому, что IRC - это протокол, основанный на использовании чистого текста (text-based protocol). Сама концепция IRC предполагает три вида взаимодействия - каждый к каждому (one-to-one), один ко многим (one-to-many) и один ко всем (one-to-all). В свою очередь, эти взаимодействия подразделяются на более мелкие: один ко многим - к списку (to a list), к группе (to a group (channel)), по маске (to a host/server mask); один ко всем - Client-to-Client, Client-to-Server и Server-to-Server. RFC 1459 устанавливает несколько ограничений на название группы (канала): в названии не может содержаться символов пробела, ^G (ASCII 7) и "," (используется как разделитель в списке), плюс к этому перед названием должен стоять префикс канала. Предусматривается два префикса канала: & и #. Далее RFC описывает те команды, которые должны быть реализованы в IRC-сервере и IRC-клиентах для взаимодействия. Т.к. основные можно узнать и без чтения RFC, просто заглянув в хэлп, то перечислю те, которыми пользуются далеко не многие (или попросту не умеют пользоваться) и/или которые в хэлпе найти нельзя, а между тем они могут быть весьма полезны: STATS, NOTIFY, NOTICE, ISON, USERHOST, MOTD, ADMIN, INFO, LIST. В своем большинстве современные IRC-сети основаны именно на данной RFC, хотя, разумеется, есть и некоторые отступления (в основном незначительные). Данный документ следует прочитать всякому, кто хочет написать свой собственный сервер для чата - как во избежание многих будущих проблем с безопасностью, так и в смысле удобства в использовании.

Request for Comments: 2810

Internet Relay Chat: Architecture

C. Kalt

April 2000

Updates: 1459

Category: Informational

Первая часть дополнений к RFC 1459. Что изменилось? Во-первых, формулировки стали более "жесткими" - сразу указывается, что можно, а чего быть не должно (стало очень похоже на четкие инструкции). Во-вторых, обозначены текущие проблемы IRC (в данном документе речь идет только об архитектуре самого протокола): расширяемость и надежность, перегруженность сетей передачи данных и пр. Переработаны и дополнены многие понятия - в общем-то, как и во всяком дополнении к теоретической работе.

Request for Comments: 2811

Internet Relay Chat: Channel Management

C. Kalt

April 2000

Updates: 1459

Category: Informational

Вторая часть теоретической доработки RFC 1459. В целом это попытка структурировать IRC, однако есть и некоторые дополнения. В качестве примера могу привести появление нового вида каналов - "safe channels", - для входа на них требуется специальная команда, причем пользователь при создании канала выбирает лишь часть названия канала (short name), а затем сервер дополняет это название еще пятью символами, в результате чего получается уникальное название канала. Зачем это надо? В общем-то, по мнению разработчиков, это должно предотвратить проблемы, возникающие при разрывах связи между серверами (network splits). Теперь предусмотрены 4 префикса каналов: &, #, +,! (на практике я еще не видел серверов, которые бы их использовали). Кроме того, как и следовало ожидать, добавились различные установки каналов (channel flags): Anonymous flag, Quiet flag и Server Reop flag, причем для каналов с разными префиксами есть свои особенности для каждого флага: на некоторых определенные флаги можно устанавливать, на некоторых нельзя - никаких четких правил, из которых можно было бы увидеть логику, я не нашел - запутаться можно элементарно (IMHO). Введены некоторые изменения в применение банов (ban) + введены исключения (exception). Насколько нововведения эффективны, покажет время.

Request for Comments: 2812

Internet Relay Chat: Client Protocol

C. Kalt

April 2000

Updates: 1459

Category: Informational

Самый интересный, на мой взгляд, документ. В нем как раз и содержится вся необходимая информация для написания собственных клиентов (в том числе и ботов (bots)).

Из внесенных изменений хотелось бы отметить изменение в командах и переработку синтаксиса.

Пример: команда STATS - по RFC 1459 она имела кучу параметров, в полезности нескольких из них я сильно сомневался (m, o и k - раздел 4.3.2 в RFC 1459, если кому интересно). В данном дополнении все стало на свои места, и остались лишь действительно нужные параметры (опять же на мой взгляд). Кроме того, теперь команда JOIN с параметром 0 (ноль) позволяет покинуть сразу все каналы.

Наконец-то появилось ограничение на максимальную длину сообщения - 510 байт + CR+LF = 512 байт;)

Описано использование выражений с wildcard - перевести на русский не возьмусь, не звучит. Символы {}|^ были приравнены к заглавным от []\~ - уж не знаю, как это будет воплощаться в сетях типа DALnet'а. Ну и в конце RFC можно найти все возможные reply, посылаемые серверами, и их синтаксис.

Request for Comments: 2813

Internet Relay Chat: Server Protocol

C. Kalt

April 2000

Updates: 1459

Category: Informational

Последнее из дополнений к RFC 1459 - здесь можно найти практически все сведения, нужные для написания своего собственного IRC-сервера и дальнейшего внедрения его в сеть. Если вы способны это сделать, то обратите внимание на данный документ, но с оговоркой, что это еще не стандарт. Изменения/дополнения: предусматривается возможность передачи сжатых данных (compressed server to server links) - на мой взгляд, действительно важное нововведение, которое следовало бы ввести значительно раньше. Несколько изменений в командах и много-много дополнений в определениях. В общем-то, как и предполагалось.

Обобщение: все документы (RFC 2810-2813) есть не что иное, как попытка доработать IRC. Что сделано хорошо: появилось несколько действительно стоящих дополнений. Кроме того, строгость определений несколько приближает данные документы к тому этапу, когда можно говорить о стандарте. Что плохо: многие изменения носят так называемый "рабочий" характер - еще не известно, приживутся ли. Много информации (где-то треть) в каждом документе пересекается с остальными - на мой взгляд, необходимо все свести в один документ.

Итого: работы еще предстоит куча. Если есть желающие в ней поучаствовать, то вам сюда:

Mailing lists for IRC related discussion:

General discussion: ircd-users@irc.org

Protocol development: ircd-dev@irc.org

Если же вы интересуетесь данной темой, но у вас нет времени, чтобы принимать участие в разработке, то существует newsgroup: alt.irc

Учитывая, что с Интернетом в Unibel'е в последнее время творится нечто неладное, я выложил все RFC'шки по адресу: http://rayon.promedia.minsk.by/

irc/misc.htm

Там же можно найти документацию по сервисам сети DALnet (уже полностью завершенный вариант, отражающий текущее состояние сети DALnet) и справочник по командам (еще некоторых команд нет, но скоро будут) - все на русском языке.

Пользуйтесь на здоровье.

В настоящее время я работаю над созданием ресурса с действительно полной документацией по IRC на русском языке. Если кто хочет присоединиться, - пишите.

Александр Иванюкович ivanyukovich@yahoo.com
обсудить статью
© сетевые решения
.
.