У этого термина существуют и другие значения, см. IRC (значения).
- Об IRC в Википедии смотрите страницу Википедия:IRC.
IRC | |
---|---|
Название | Internet Relay Chat |
Уровень (по модели OSI) | Прикладной |
Семейство | TCP/IP |
Создан в | 1988 |
Порт/ID | 194/TCP, 6667/TCP |
Назначение протокола | Доступ к чат-серверам |
Спецификация | RFC 1459, RFC 2810, RFC 2811, RFC 2812, RFC 2813 |
Основные реализации (клиенты) | irssi, KVIrc, mIRC, X-Chat, WeeChat, Miranda IM, x3irc, Pidgin |
Основные реализации (серверы) | UnrealIRCd, ircnet-ircd, hybrid-ircd, Hyperion |
Медиафайлы на Викискладе |
IRC (англ. Internet Relay Chat) — протокол прикладного уровня для обмена сообщениями в режиме реального времени.
Разработан в основном для группового общения, также позволяет общаться через личные сообщения и обмениваться данными, в том числе файлами.
IRC использует транспортный протокол TCP и криптографический TLS (опционально).
IRC начало завоевывать особенную популярность после операции «Буря в пустыне» (1991), когда сообщения со всего мира собирались в одном месте и в режиме «on-line» транслировались в IRC.[1]
Ввиду технической простоты реализации протокол IRC в последнее время стал использоваться при организации ботнетов в качестве средства передачи управляющих команд компьютерам-участникам ботнета от владельца.
История и спецификации
IRC был разработан в 1988 в качестве замены программы MultiUser Talk.Основная спецификация — RFC 1459 (1993).Её дополняют несколько спецификаций 2000 года:
- RFC 2810 — Internet Relay Chat: Architecture
- RFC 2811 — Internet Relay Chat: Channel Management
- RFC 2812 — Internet Relay Chat: Client Protocol
- RFC 2813 — Internet Relay Chat: Server Protocol
IRC-сеть
Файл:Irc example.gif Пример IRC-сети (буквами обозначены серверы, цифрами — клиенты)
Согласно спецификациям протокола, IRC-сеть — это группа серверов, соединённых между собой. Простейшей сетью является одиночный сервер.
Сеть должна иметь вид связного дерева, в котором каждый сервер является центральным узлом для остальной части сети.
Клиентом называется всё, что подключено к серверу, кроме других серверов. Различают два типа клиентов:
- пользовательские;
- сервисные.
Пересылка сообщений в IRC-сети
IRC предоставляет возможность как группового, так и приватного общения.Для группового общения существует несколько возможностей.Пользователь может отправить сообщение списку пользователей, при этом серверу отправляется список, сервер выделяет из него отдельных пользователей и отправляет копию сообщения каждому из них.Более эффективным является использование каналов. В этом случае сообщение отправляется непосредственно серверу, а сервер отправляет его всем пользователям в канале.Как при групповом, так и при приватном общении сообщения отправляются клиентам по кратчайшему пути и видимы только отправителю, получателю и входящим в кратчайший путь серверам.
Например, если клиенты 1, 2 и 3 (в примере) находятся в одном канале, то сообщение от клиента 1 будет отправлено на сервер A, затем клиенту 2 и на сервер B, который отправит его клиенту 3. Серверы C, D и E этого сообщения не увидят.
Кроме того, возможна отправка широковещательного сообщения. Сообщения клиентов, касающиеся изменения состояния сети (например, режима канала или статуса пользователя), должны отправляться всем серверам, входящим в сеть. Все сообщения, исходящие от сервера, также должны быть отправлены всем остальным серверам.
Пользовательские режимы
- i — невидимый пользователь
- s — получать извещения сервера
- w — получать широковещательные сообщения
- o — оператор сервера
Состояния каналов
Оператор канала может менять его состояние с помощью команды, добавляя/удаляя различные флаги как каналу, так и отдельным пользователям в канале.
Пользовательские флаги
- O user — обозначает создателя канала (вручную изменить невозможно)
- o user — обозначает оператора канала
- h user — обозначает полуоператора канала
- v user — даёт пользователю право отправлять сообщения в модерируемый канал
Флаги канала
- a — анонимный канал (имена всех пользователей скрываются)
- i — доступ в канал только по приглашению
- m — модерируемый канал (только пользователи с флагами +o, +h, или +v могут посылать в этот канал сообщения)
- n — только находящиеся в канале пользователи могут посылать в него сообщения
- q — «тихий» канал (ограничение на отправку серверных сообщений)
- p/s — приватный/секретный канал (не отображается в общем списке каналов, в него можно попасть только зная имя канала)
- r — если в канале в течение определенного времени отсутствуют все операторы, сервер сам назначает операторов из числа пользователей в канале
- t — тема канала может быть изменена только оператором канала
- k — пароль канала
- l — лимит пользователей в канале
- b mask — запрет на доступ к каналу пользователей, совпадающих с маской mask
- e mask — разрешает пользователям, попадающих под маску mask, заходить на канал вне зависимости от флага b
- i mask — разрешает пользователям, попадающих под маску mask, заходить на канал вне зависимости от режима i
Команды
Регистрация и подключение
Рекомендуется использовать команды в следующем порядке:PASS -> SERVICEлибоPASS -> NICK -> USER
PASS
Параметры: <password>
Устанавливает пароль соединения.
Возможные отклики сервера:
- ERR_NEEDMOREPARAMS
- ERR_ALREADYREGISTRED
NICK
Параметры: <nickname>
Изменение ника.
Возможные отклики сервера:
- ERR_NONICKNAMEGIVEN
- ERR_ERRONEUSNICKNAME
- ERR_NICKNAMEINUSE
- ERR_NICKCOLLISION
- ERR_UNAVAILRESOURCE
- ERR_RESTRICTED
SERVICE
Параметры: <nickname> <reserved> <distribution> <type> <reserved> <info>
Регистрация нового клиента-сервиса.
Возможные отклики сервера:
- ERR_ALREADYREGISTRED
- ERR_NEEDMOREPARAMS
- ERR_ERRONEUSNICKNAME
- RPL_YOURESERVICE
- RPL_YOURHOST
- RPL_MYINFO
USER
Параметры: <user> <mode> <unused> <realname>
Используется в начале соединения для определения нового пользователя.
Возможные отклики сервера:
- ERR_NEEDMOREPARAMS
- ERR_ALREADYREGISTRED
OPER
Параметры: <name> <password>
Получение статуса оператора.
Возможные отклики сервера:
- ERR_NEEDMOREPARAMS
- RPL_YOUREOPER
- ERR_NOOPERHOST
- ERR_PASSWDMISMATCH
MODE
Параметры: <nickname> *(<«+» / «-»> <flag>)
Изменение состояния пользователя — добавление/удаление флагов; команда доступна только операторам.
Возможные отклики сервера:
- ERR_NEEDMOREPARAMS
- ERR_USERSDONTMATCH
- ERR_UMODEUNKNOWNFLAG
- RPL_UMODEIS
QUIT
Параметры: [ <Quit Message> ]
Выход пользователя из сети.
Возможные отклики сервера: отсутствуют.
SQUIT
Параметры: <server> <comment>
Выход сервера из сети; команда доступна только оператору сервера либо серверу при возникновении ошибки.
Возможные отклики сервера:
- ERR_NOPRIVILEGES
- ERR_NOSUCHSERVER
- ERR_NEEDMOREPARAMS
Работа с каналами
JOIN
Параметры: <channel> *(«, » <channel>) [ <key> *(«, » <key>) ])
Вход в канал.
Возможные отклики сервера:
- ERR_NEEDMOREPARAMS
- ERR_BANNEDFROMCHAN
- ERR_INVITEONLYCHAN
- ERR_BADCHANNELKEY
- ERR_CHANNELISFULL
- ERR_BADCHANMASK
- ERR_NOSUCHCHANNEL
- ERR_TOOMANYCHANNELS
- ERR_TOOMANYTARGETS
- ERR_UNAVAILRESOURCE
- RPL_TOPIC
PART
Параметры: <channel> *(«, « <channel>) [ <Part Message> ]
Выход из канала.
Возможные отклики сервера:
- ERR_NEEDMOREPARAMS
- ERR_NOSUCHCHANNEL
- ERR_NOTONCHANNEL
MODE
Параметры: <channel> *((„-“ / „+“) *<modes> *<modeparams>)
Изменение режима канала; в команде допускается не более трех режимов с параметрами.
Возможные отклики сервера:
- ERR_NEEDMOREPARAMS
- ERR_KEYSET
- ERR_NOCHANMODES
- ERR_CHANOPRIVSNEEDED
- ERR_USERNOTINCHANNEL
- ERR_UNKNOWNMODE
- RPL_CHANNELMODEIS
- RPL_BANLIST
- RPL_ENDOFBANLIST
- RPL_EXCEPTLIST
- RPL_ENDOFEXCEPTLIST
- RPL_INVITELIST
- RPL_ENDOFINVITELIST
- RPL_UNIQOPIS
TOPIC
Параметры: <channel> [»: » <topic> ]
Изменение или просмотр темы канала.
Возможные отклики сервера:
- ERR_NEEDMOREPARAMS
- ERR_NOTONCHANNEL
- RPL_NOTOPIC
- RPL_TOPIC
- ERR_CHANOPRIVSNEEDED
- ERR_NOCHANMODES
NAMES
Параметры: [ <channel> *(«, » <channel>) [ <target> ] ]
Просмотреть список имен пользователей, подключенных к серверу target и присутствующих в канале channel.
Возможные отклики сервера:
- ERR_TOOMANYMATCHES
- ERR_NOSUCHSERVER
- RPL_NAMREPLY
- RPL_ENDOFNAMES
LIST
Параметры: [ <channel> *(«, » <channel>) [ <target> ] ]
Просмотр списка каналов/статуса указанных каналов.
Возможные отклики сервера:
- ERR_TOOMANYMATCHES
- ERR_NOSUCHSERVER
- RPL_LIST
- RPL_LISTEND
INVITE
Параметры: <nickname> <channel>
Пригласить пользователя в канал.
Возможные отклики сервера:
- ERR_NEEDMOREPARAMS
- ERR_NOSUCHNICK
- ERR_NOTONCHANNEL
- ERR_USERONCHANNEL
- ERR_CHANOPRIVSNEEDED
- RPL_INVITING
- RPL_AWAY
KICK
Параметры: <channel> *(«, » <channel>) <user> *(«, » <user>) [<comment>]
Удаление пользователя из канала.
Возможные отклики сервера:
- ERR_NEEDMOREPARAMS
- ERR_NOSUCHCHANNEL
- ERR_BADCHANMASK
- ERR_CHANOPRIVSNEEDED
- ERR_USERNOTINCHANNEL
- ERR_NOTONCHANNEL
Отправка сообщений
PRIVMSG
Параметры: <msgtarget> <text to be sent>
Отправка личного (приватного) сообщения.
Возможные отклики сервера:
- ERR_NORECIPIENT
- ERR_NOTEXTTOSEND
- ERR_CANNOTSENDTOCHAN
- ERR_NOTOPLEVEL
- ERR_WILDTOPLEVEL
- ERR_TOOMANYTARGETS
- ERR_NOSUCHNICK
- RPL_AWAY
NOTICE
Параметры: <msgtarget> <text>
Команда используется аналогично PRIVMSG, но без получения автоматического ответа.
Работа с серверами
MOTD
Параметры: [ <target> ]
Установка т.наз. «сообщения дня».
Возможные отклики сервера:
- RPL_MOTDSTART
- RPL_MOTD
- RPL_ENDOFMOTD
- ERR_NOMOTD
LUSERS
Параметры: [ <mask> [ <target> ] ]
Сведения о пользователях, подключенных к сети/подсети, соответствующей указанной маске/серверу.
Возможные отклики сервера:
- RPL_LUSERCLIENT
- RPL_LUSEROP
- RPL_LUSERUNKOWN
- RPL_LUSERCHANNELS
- RPL_LUSERME
- ERR_NOSUCHSERVER
VERSION
Параметры: [ <target> ]
Версия программы-сервера.
Возможные отклики сервера:
- ERR_NOSUCHSERVER
- RPL_VERSION
STATS
Параметры: [ <query> [ <target> ] ]
Статистика по серверу.
Возможные отклики сервера:
- ERR_NOSUCHSERVER
- RPL_STATSLINKINFO
- RPL_STATSUPTIME
- RPL_STATSCOMMANDS
- RPL_STATSOLINE
- RPL_ENDOFSTATS
LINKS
Параметры: [ [ <remote server> ] <server mask> ]
Имена серверов, подключенных к указанному/текущему.
Возможные отклики сервера:
- ERR_NOSUCHSERVER
- RPL_LINKS
- RPL_ENDOFLINKS
TIME
Параметры: [ <target> ]
Локальное время сервера.
Возможные отклики сервера:
- ERR_NOSUCHSERVER
- RPL_TIME
CONNECT
Параметры: <target server> <port> [ <remote server> ]
Попытка подключить текущий сервер к указанному через указанный порт.
Возможные отклики сервера:
- ERR_NOSUCHSERVER
- ERR_NOPRIVILEGES
- ERR_NEEDMOREPARAMS
TRACE
Параметры: [ <target> ]
Путь к указанному серверу.
Возможные отклики:
- ERR_NOSUCHSERVER
- RPL_TRACELINK
- RPL_TRACECONNECTING
- RPL_TRACEHANDSHAKE
- RPL_TRACEUNKNOWN
- RPL_TRACEOPERATOR
- RPL_TRACEUSER
- RPL_TRACESERVER
- RPL_TRACESERVICE
- RPL_TRACENEWTYPE
- RPL_TRACECLASS
- RPL_TRACELOG
- RPL_TRACEEND
ADMIN
Параметры: [ <target> ]
Информация об администраторе указанного/текущего сервера.
Возможные отклики сервера:
- ERR_NOSUCHSERVER
- RPL_ADMINME
- RPL_ADMINLOC1
- RPL_ADMINLOC2
- RPL_ADMINEMAIL
INFO
Параметры: [ <target> ]
Информация о сервере.
Возможные отклики сервера:
- ERR_NOSUCHSERVER
- RPL_INFO
- RPL_ENDOFINFO
Работа с клиентами-сервисами
SERVLIST
Параметры: [ <mask> [ <type> ] ]
Список доступных сервисов.
Возможные отклики сервера:
- RPL_SERVLIST
- RPL_SERVLISTEND
SQUERY
Параметры: <servicename> <text>
Аналогично PRIVMSG.
Работа с данными пользователей
WHO
Параметры: [ <mask> [ «o» ] ]
Данные пользователей, ники которых соответствуют указанной маске.
Возможные отклики сервера:
- ERR_NOSUCHSERVER
- RPL_WHOREPLY
- RPL_ENDOFWHO
WHOIS
Параметры: [ <target> ] <mask> *(«, » <mask>)
Данные об определенном пользователе.
Возможные отклики сервера:
- ERR_NOSUCHSERVER
- ERR_NONICKNAMEGIVEN
- RPL_WHOISUSER
- RPL_WHOISCHANNELS
- RPL_WHOISCHANNELS
- RPL_WHOISSERVER
- RPL_AWAY
- RPL_WHOISOPERATOR
- RPL_WHOISIDLE
- ERR_NOSUCHNICK
- RPL_ENDOFWHOIS
WHOWAS
Параметры: <nickname> *(«, » <nickname>) [ <count> [ <target> ] ]
Данные пользователя, отсутствующего в сети, то есть уже не существующего.
Возможные отклики сервера:
- ERR_NONICKNAMEGIVEN
- ERR_WASNOSUCHNICK
- RPL_WHOWASUSER
- RPL_WHOISSERVER
- RPL_ENDOFWHOWAS
Прочие команды
KILL
Параметры: <nickname> <comment>
Разрыв соединения с указанным пользователем со стороны сервера.
Возможные отклики сервера:
- ERR_NOPRIVILEGES
- ERR_NEEDMOREPARAMS
- ERR_NOSUCHNICK
- ERR_CANTKILLSERVER
PING
Параметры: <server1> [ <server2> ]
Проверка активности клиента/сервера на другой стороне соединения.
Возможные отклики:
- ERR_NOORIGIN
- ERR_NOSUCHSERVER
PONG
Параметры: <server> [ <server2> ]
Ответ на сообщение PING от сервера server серверу server2.
Возможные отклики:
- ERR_NOORIGIN
- ERR_NOSUCHSERVER
ERROR
Параметры: <error message>
Используется сервером для сообщения об ошибке.
Клиентские приложения для IRC-сетей
Наиболее популярные приложения для различных ОС:
Windows:
Unix и Linux:
Mac OS X:
AmigaOS:
Android:
Специфика русскоязычного IRC
В этом разделе не хватает ссылок на источники информации.Информация должна быть проверяема, иначе она может быть поставлена под сомнение и удалена. Вы можете отредактировать эту статью, добавив ссылки на авторитетные источники. Эта отметка установлена 11 мая 2011 года. |
Использование русского языка в IRC не опирается ни на какой стандарт.Однако, имеется ряд обычаев и соглашений, возникших в процессе эволюции различных русскоязычных IRC-сообществ.
История вопроса
Первые русскоговорящие каналы возникли ещё в 1990-х годах в международных сетях, таких как DALnet и IRCNet. Первоначально, под влиянием UNIX-культуры, было принято кодировать буквы русского алфавита в KOI-8.Примерно с 1995 года начался приток пользователей Windows, которые зачастую вообще не имели понятия, что такое кодовая страница и не знали различия между кириллицей и Windows-1251.Данное противоречие вызвало много конфликтов.
Стихийно возникшее в те времена соглашение помещало вопрос о кодировках в ве́дение конкретных каналов.Это было очень неудобно для пользователей, однако на тот момент иного выхода не было.Отчасти именно эта проблема стимулировала примерно с 2000 года усиленное формирование отдельных русскоязычных сетей, где вопросы кодировки могли бы решаться централизованно.
Обычаи современных русскоязычных сетей
Традиционно, в международных IRC-сетях клиенты посылают и принимают сообщения, состоящие из байтов; при этом вопрос об интерпретации не ASCII-байтов оставляется на усмотрение клиентов.Все сколь-нибудь развитые русскоязычные сети, при всех их различиях, придерживаются иного принципа: клиенты посылают и принимают сообщения, состоящие из символов.То есть, если правильно настроенный клиент отправляет на канал букву «Ы», то все подключенные к каналу правильно настроенные клиенты будут принимать тоже букву «Ы», независимо от того, как каждый из них предпочитает её кодировать.
На практике это обычно реализуется наличием на сервере нескольких TCP-портов, на каждом из которых используется определённая кодировка. Список этих портов принято помещать в MOTD (приветствие сервера).Таким образом, вопрос о «правильной настройке» клиента сохраняется, однако для пользователя выбрать порт подключения несравненно проще, нежели заниматься установкой таблиц перекодировок символов, возможность чего, кстати, и не во всяком клиенте предусмотрена.Иногда (хотя и не обязательно), серверное ПО позволяет переключить кодировку без отсоединения от сервера — хотя по ряду причин такое изменение кодировки работает неаккуратно.
Как правило, каждая сеть использует свою внутреннюю кодировку (чаще всего это Windows-1251 и почти никогда UTF-8; почему — см. ниже), при этом данные, передаваемые или принимаемые клиентами, с кодировками отличными от внутренней, подвергаются перекодировке (немедленной при приёме, проводимой в момент формирования входящего сообщения — при передаче).
Ники
Исторически использование букв кириллицы в никах было невозможно.Однако самая большая русскоязычная IRC-сеть RusNet позволяет пользоваться кириллическими никами и регистрировать их.
UTF-8 — за и против
Сторонники интернационализации обычно считают UTF-8 перспективной кодировкой для всех языков, включая русский.Следует однако отметить, что одна буква кириллицы в UTF-8 занимает два байта, что создаёт некоторую дополнительную нагрузку на сети и ограничивает максимальную длину одного сообщения.По стандарту, сообщение IRC не может иметь длину больше 510 байтов, из которых собственно на текст приходится никак не больше 499 (по нереалистично завышенной оценке).Следовательно, отправить в одном сообщении больше 249 русских букв оказывается невозможно.Ограничение размера сообщений вызывает ещё одну неприятность: при попытке превысить установленный предел сервер обрезает сообщения.Если срез пройдёт посередине русской буквы (то есть будет передан первый её байт, но отброшен второй), то получившаяся последовательность байтов перестанет, с точки зрения UTF-8, быть правильной строкой.Ряд клиентов (например, Xchat или mIRC) отобразят такое сообщение как 8-битное (например, в Latin-1 или Windows-1251), что сделает его полностью нечитаемым и занимающим к тому же много места на экране.
Единственным несомненным преимуществом использования UTF-8 для кодировки русского языка является возможность свободно цитировать тексты на других языках, а также использовать экзотические символы наподобие «→» и «☺».К тому же, являясь клиентом IRC-сети, в которой UTF-8 принят повсеместно, можно будет общаться сразу на многих языках, не заботясь о техническом представлении букв.Пока, однако, неизвестны многоязычные сети, явно оговаривающие необходимость использования только UTF-8, использующие UTF-8 в качестве внутренней кодировки, или каким-либо иным образом упорядочивающие кодировку символов клиентами. За исключением IRC сервера внутри сети I2P.
См. также
Примечания
Ссылки
- Актуальные авторские статьи по установке и настройке IRC-софта
- irchelp.org (англ.) — документация по IRC
- ircnet.su — помощь и статьи об IRC
- rus-net.org — всё о русском IRC
- Статистическая информация по различным IRC-сетям (англ.)
- Статистическая информация по различным IRC-сетям (англ.)
- Юрий Меркулов. Путеводитель по IRC-клиентам (неопр.). iXBT.com (18 июля 2006). Дата обращения 25 апреля 2008. Архивировано 21 августа 2011 года. — Путеводитель по IRC-клиентам