Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 29 мая 2018 года; проверки требуют 34 правки.
Текущая версия страницы пока не проверялась опытными участниками и может значительно отличаться от версии, проверенной 29 мая 2018 года; проверки требуют 34 правки.
IRC
У этого термина существуют и другие значения, см. IRC (значения).
IRC (англ.Internet Relay Chat) — протокол прикладного уровня для обмена сообщениями в режиме реального времени.
Разработан в основном для группового общения, также позволяет общаться через личные сообщения и обмениваться данными, в том числе файлами.
IRC использует транспортный протокол TCP и криптографический TLS (опционально).
IRC начал завоёвывать особенную популярность после операции «Буря в пустыне» (1991), когда сообщения со всего мира собирались в одном месте и в режиме «on-line» транслировались в IRC[1].
Ввиду технической простоты реализации протокол IRC в свое время стал использоваться при организации ботнетов в качестве средства передачи управляющих команд компьютерам — участникам ботнета, — от владельца.
IRC предоставляет возможность как группового, так и приватного общения.
Для группового общения существует несколько возможностей.
Пользователь может отправить сообщение списку пользователей, при этом серверу отправляется список, сервер выделяет из него отдельных пользователей и отправляет копию сообщения каждому из них.
Более эффективным является использование каналов. В этом случае сообщение отправляется непосредственно серверу, а сервер отправляет его всем пользователям в канале.
Как при групповом, так и при приватном общении сообщения отправляются клиентам по кратчайшему пути и видимы только отправителю, получателю и входящим в кратчайший путь серверам.
Кроме того, возможна отправка широковещательного сообщения. Сообщения клиентов, касающиеся изменения состояния сети (например, режима канала или статуса пользователя), должны отправляться всем серверам, входящим в сеть. Все сообщения, исходящие от сервера, также должны быть отправлены всем остальным серверам.
Первые русскоговорящие каналы возникли ещё в 1990-х годах в международных сетях, таких как DALnet и IRCnet. Первоначально, под влиянием UNIX-культуры, было принято кодировать буквы русского алфавита в KOI-8.
Примерно с 1995 года начался приток пользователей Windows, которые зачастую вообще не имели понятия, что такое кодовая страница и не знали различия между кириллицей и Windows-1251.
Данное противоречие вызвало много конфликтов.
Стихийно возникшее в те времена соглашение помещало вопрос о кодировках в ве́дение конкретных каналов.
Это было очень неудобно для пользователей, однако на тот момент иного выхода не было.
Отчасти именно эта проблема стимулировала примерно с 2000 года усиленное формирование отдельных русскоязычных сетей, где вопросы кодировки могли бы решаться централизованно.
Традиционно, в международных IRC-сетях клиенты посылают и принимают сообщения, состоящие из байтов; при этом вопрос об интерпретации не ASCII-байтов оставляется на усмотрение клиентов.
Все сколь-нибудь развитые русскоязычные сети, при всех их различиях, придерживаются иного принципа: клиенты посылают и принимают сообщения, состоящие из символов.
То есть, если правильно настроенный клиент отправляет на канал букву «Ы», то все подключённые к каналу правильно настроенные клиенты будут принимать тоже букву «Ы», независимо от того, как каждый из них предпочитает её кодировать.
На практике это обычно реализуется наличием на сервере нескольких TCP-портов, на каждом из которых используется определённая кодировка. Список этих портов принято помещать в MOTD (приветствие сервера).
Таким образом, вопрос о «правильной настройке» клиента сохраняется, однако для пользователя выбрать порт подключения несравненно проще, нежели заниматься установкой таблиц перекодировок символов, возможность которой поддерживается не во всяком клиенте.
В некоторых случаях серверное ПО позволяет переключить кодировку без отсоединения от сервера, хотя по ряду причин такое изменение кодировки работает некорректно.
Как правило, каждая сеть использует свою внутреннюю кодировку (чаще всего это Windows-1251 и почти никогда 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).