Интернет-чат с ретрансляцией - Internet Relay Chat

Первый IRC-сервер, tolsun.oulu.fi, сервер Sun-3, выставленный рядом с компьютерным центром Университета Оулу . (2001)

Internet Relay Chat (IRC) - это система текстового чата ( обмена мгновенными сообщениями ). Это позволяет проводить дискуссии между любым количеством участников в так называемых каналах разговора, а также дискуссии только между двумя партнерами - например, в диалогах вопросов и ответов. Любой участник может открыть новый канал разговора, и один пользователь компьютера также может принимать участие в нескольких таких одновременных каналах.

Чтобы установить чат или присоединиться к нему, требуется сетевая программа, называемая IRC-клиентом, для доступа к каналу путем подключения к серверу. Клиент IRC может быть либо независимой программой на локальном компьютере (например, mIRC, XChat), либо иметь форму специального пользовательского интерфейса внутри более крупной программы, такой как Интернет-браузер; Opera браузер, например, включает в себя клиент IRC, и клиенты , такие как Mibbit и IRCCloud или с открытым исходным кодом KiwiIRC и MIT «s The Lounge Chat может работать в связи со многими популярными браузерами.

Сеть IRC, состоящая из взаимосвязанных серверов, работающих как ретрансляционные станции, используется для передачи вызовов в IRC. Существенной особенностью этой сети является топология связи BITNET, которая допускает только один канал связи между любыми двумя участниками. Исторически это обеспечивало эффективную связь, потому что на заре IRC межконтинентальные линии передачи данных имели очень ограниченную пропускную способность. Топология позволяла отправлять сообщение от клиента на одном континенте не индивидуально для каждого клиента на другом континенте, а только один раз на локальный сервер, который затем распространял его среди клиентов. Несмотря на ограниченные возможности управления, были возможны очень большие «чаты». Недостатком является отсутствие избыточности, которая проявляется в так называемых сетевых разделениях: при выходе из строя какого-либо сервера сеть автоматически разбивается на отдельные части, пока между ними не будет установлено новое соединение.

Крупнейшие сети IRC состоят из нескольких десятков серверов IRC, которые одновременно подключают более 100 000 пользователей и управляют десятками тысяч каналов, на каждом из которых могут одновременно участвовать несколько тысяч человек. Несмотря на эти огромные размеры, задержка отправляемого текста обычно составляет порядка десятых долей секунды и редко превышает время одной секунды.

Использование IRC неуклонно снижается с 2003 года, потеряв 60 процентов своих пользователей (с 1 миллиона до примерно 400 000 в 2021 году) и половину своих каналов (с полумиллиона в 2003 году до менее 200 000 в 2021 году). В апреле 2011 года 100 крупнейших сетей IRC обслуживали более полумиллиона пользователей одновременно, размещая сотни тысяч каналов, работающих в общей сложности примерно на 1 500 серверах из примерно 3 200 серверов IRC по всему миру. По состоянию на июнь 2021 года известно о действующей 481 различных IRC-сетях, из которых наибольшее количество пользователей имеет чат Libera Chat с открытым исходным кодом , основанный в мае 2021 года, с 20 374 каналами на 26 серверах; Между ними 100 крупнейших IRC-сетей имеют более 100 тысяч каналов, работающих примерно на тысячах серверов.

С технической точки зрения Internet Relay Chat реализован как протокол прикладного уровня для облегчения связи в текстовой форме. Процесс чата работает по сетевой модели клиент-сервер . Как уже говорилось, клиенты IRC могут быть автономными компьютерными программами или веб-приложениями, работающими локально в браузере или на стороннем сервере. Эти клиенты связываются с серверами чата для передачи сообщений другим клиентам. IRC в основном предназначен для группового общения на дискуссионных форумах, называемых каналами , но также позволяет общаться один на один через личные сообщения, а также через чат и передачу данных , включая совместное использование файлов .

Клиентское программное обеспечение доступно для всех основных операционных систем, поддерживающих доступ в Интернет.

История

IRC был создан Яркко Оикариненом в августе 1988 года, чтобы заменить программу под названием MUT (MultiUser Talk) на BBS под названием OuluBox в Университете Оулу в Финляндии , где он работал в Департаменте науки обработки информации. Яркко намеревался расширить администрируемое им программное обеспечение BBS, чтобы можно было получать новости в стиле Usenet , обсуждения в реальном времени и аналогичные функции BBS. Первой частью, которую он реализовал, была часть чата, которую он сделал с помощью заимствованных частей, написанных его друзьями Юрки Куоппала и Юкка Пил. Первая сеть IRC работала на одном сервере с именем tolsun.oulu.fi. Оикаринен нашел вдохновение в системе чата, известной как Bitnet Relay , которая работала в BITNET .

Юрки Куоппала подтолкнул Оикаринена попросить университет Оулу освободить код IRC, чтобы его можно было запускать за пределами Оулу, и после того, как они, наконец, выпустили его, Юрки Куоппала немедленно установил другой сервер. Это была первая «IRC-сеть». У Оикаринена были друзья из Хельсинкского университета и Университета Тампере, которые начали использовать серверы IRC, когда число его пользователей увеличилось, а вскоре последовали и другие университеты. В это время Оикаринен понял, что остальные функции BBS, вероятно, не впишутся в его программу.

Оикаринен связался с людьми из Денверского университета и Университета штата Орегон . У них была собственная сеть IRC, и они хотели подключиться к финской сети. Они получили программу от одного из друзей Оикаринена, Виджая Субраманиама - первого человека не из Финляндии, который использовал IRC. Затем IRC разросся и стал использоваться во всей финской национальной сети Funet, а затем подключился к Nordunet , скандинавскому ответвлению Интернета. В ноябре 1988 г. IRC распространился по Интернету, а к середине 1989 г. во всем мире насчитывалось около 40 серверов.

EFnet

В августе 1990 года в мире IRC произошли первые серьезные разногласия. «A-net» (сеть анархии) включает сервер с именем eris.berkeley.edu. Он был открыт, не требовал паролей и не имел ограничений на количество подключений. Как объясняет Грег «wumpus» Линдал: «у него была линия серверов с подстановочными знаками, поэтому люди подключали серверы и сталкивались с ником всех». «Eris Free Network», EFnet , сделала машину eris первой, получившей Q-lined (Q для карантина) от IRC. И снова словами wumpus: «Эрис отказалась удалить эту линию, поэтому я сформировал EFnet. Это не было серьезной борьбой; я заставил все хабы присоединиться, и почти все остальные были унесены». Сеть A-net была создана с серверами eris, а EFnet - с серверами, отличными от eris. История показывает, что большинство серверов и пользователей используют EFnet. После расформирования A-net название EFnet стало бессмысленным, и снова это была единственная IRC-сеть.

Примерно в то же время IRC использовался для репортажей о попытке советского государственного переворота 1991 года во время отключения СМИ . Ранее он использовался аналогичным образом во время войны в Персидском заливе . Журналы чатов этих и других событий хранятся в архиве ibiblio .

Вилка Undernet

Еще одна попытка форка, первая, которая действительно имела большое и продолжительное значение, была инициирована Wildthang в США в октябре 1992 года (она была разветвлена ​​на базе EFnet ircd версии 2.8.10). Это должно было быть просто тестовой сетью для разработки ботов, но она быстро превратилась в сеть «для друзей и их друзей». В Европе и Канаде велась работа над отдельной новой сетью, и в декабре французские серверы подключились к канадским, а к концу месяца французская и канадская сети были подключены к американской, образуя сеть, которая позже появилась. называться " Ундернет ".

«Сторонники нижнего уровня» хотели развить ircd дальше, пытаясь уменьшить нагрузку на полосу пропускания и попытаться разобраться в хаосе каналов ( расщепления и поглощения ), от которого начал страдать EFnet. Для последней цели Undernet реализовал временные метки, новую маршрутизацию и предложил CService - программу, которая позволяла пользователям регистрировать каналы, а затем пыталась защитить их от нарушителей спокойствия. Первый представленный список серверов от 15 февраля 1993 года включает серверы из США, Канады, Франции, Хорватии и Японии. 15 августа был установлен новый рекорд по количеству пользователей - 57 пользователей.

В мае 1993 года был опубликован RFC 1459, в котором подробно описывается простой протокол для работы клиент / сервер, каналов, разговоров «один-к-одному» и «один-ко-многим». Примечательно, что значительное количество расширений, таких как CTCP, цвета и форматы, не включены в спецификации протокола, равно как и кодировка символов, что привело к расхождению в различных реализациях серверов и клиентов. Фактически, реализация программного обеспечения значительно варьировалась от одной сети к другой, каждая сеть реализовывала свои собственные политики и стандарты в своей собственной кодовой базе.

Вилка DALnet

Летом 1994 года Undernet была разветвлена. Новая сеть получила название DALnet (названная в честь ее основателя: dalvenjah), созданная для лучшего обслуживания пользователей и большей защиты пользователей и каналов. Одним из наиболее значительных изменений в DALnet стало использование более длинных псевдонимов (исходное ограничение ircd составляло 9 букв). Модификации DALnet ircd выполнил Алексей "Lefler" Косут. Таким образом, DALnet был основан на ircd-сервере Undernet, хотя пионеры DALnet отказались от EFnet. По словам Джеймса Нга, первые люди из DALnet были «операторы #StarTrek, больные из-за постоянных разделений / задержек / поглощений / и т. Д.».

DALnet быстро предложил глобальные WallOps (сообщения IRCop, которые могут видеть пользователи с + w (/ mode NickName + w)), более длинные псевдонимы, Q: линейные псевдонимы (псевдонимы, которые нельзя использовать, например, ChanServ, IRCop, NickServ и т. Д.) , global K: Lines (запрет одного человека или всего домена на сервере или во всей сети), связь только IRCop: GlobOps, режим + H, показывающий, что IRCop - это «помощник» и т. д. Многие из новых функций DALnet были написаны в начале 1995 года Брайаном «Морфер» Смитом и позволил пользователям владеть псевдонимами, управлять каналами, отправлять записки и многое другое.

Вилка IRCnet

В июле 1996 года, после месяцев пламенных войн и обсуждений в списке рассылки, произошел еще один раскол из-за разногласий в том, как должна развиваться разработка ircd. В частности, «европейская» сторона (большинство этих серверов находилось в Европе), которая позже назвала себя IRCnet, выступала за задержки по нику и каналу, тогда как сторона EFnet выступала за временные метки. Были также разногласия по поводу политики: европейская сторона начала устанавливать свод правил, определяющих, что IRCops могут и не могут делать, - точка зрения, против которой выступала американская сторона.

Большинство (не все) серверов IRCnet находились в Европе, в то время как большинство серверов EFnet находились в США. Это событие также известно как «Великий раскол» во многих сообществах IRC. EFnet с тех пор (по состоянию на август 1998 г.) вырос и превысил количество пользователей, которых у него было тогда. Осенью 2000 года (северной) у EFnet было около 50 000 пользователей, а у IRCnet - 70 000.

Современный IRC

IRC сильно изменился за свою жизнь в Интернете. Новое серверное программное обеспечение добавило множество новых функций.

  • Услуги : Сетевые боты для облегчения регистрации псевдонимов и каналов, отправки сообщений для автономных пользователей и функций оператора сети.
  • Дополнительные режимы: в то время как исходная система IRC использовала набор стандартных пользовательских и канальных режимов, новые серверы добавляют много новых режимов для таких функций, как удаление цветовых кодов из текста или скрытие маски хоста пользователя («маскировка») для защиты от отказа в доступе. -сервисные атаки .
  • Обнаружение прокси: большинство современных серверов поддерживают обнаружение пользователей, пытающихся подключиться через небезопасный (неправильно настроенный или эксплуатируемый) прокси-сервер , которому затем может быть отказано в подключении. Это программное обеспечение для обнаружения прокси-серверов используется несколькими сетями, хотя этот список прокси-серверов в реальном времени не функционирует с начала 2006 года.
  • Дополнительные команды: новые команды могут быть такими, как сокращенные команды для выдачи команд службам, команды только оператора сети для управления маской хоста пользователя.
  • Шифрование : для сегмента клиент-сервер соединения может использоваться TLS (сообщения перестают быть безопасными после того, как они передаются другим пользователям по стандартным соединениям, но это затрудняет перехват или прослушивание индивидуальных сеансов IRC). Для связи между клиентом можно использовать SDCC (Secure DCC).
  • Протокол подключения: к IRC можно подключиться через IPv4 , старую версию интернет-протокола , или через IPv6 , текущий стандарт протокола.

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

После золотой эры в 1990-х и начале 2000-х годов (240 000 пользователей QuakeNet в 2004 году) IRC пережил значительный спад, потеряв около 60% пользователей в период с 2003 по 2012 год, при этом пользователи переходят на новые платформы социальных сетей, такие как Facebook или Twitter , но также и для открытых платформ, таких как XMPP, который был разработан в 1999 году. Некоторые сети, такие как Freenode , не следовали общей тенденции и за тот же период увеличились в размере более чем в четыре раза. Однако Freenode, у которого в 2016 году было около 90000 пользователей, с тех пор сократился до 65000 пользователей.

Крупнейшие сети IRC традиционно относят к «большой четверке» - обозначению сетей, которые возглавляют статистику. Сети Большой четверки периодически меняются, но из-за того, что IRC является сообществом, пользователи могут выбирать из большого количества других сетей.

Исторически «большой четверкой» были:

IRC достиг 6 миллионов одновременных пользователей в 2001 году и 10 миллионов пользователей в 2003 году, упав до 371 тысячи в 2018 году.

По состоянию на сентябрь 2021 года крупнейшими IRC-сетями являются:

  • Libera Chat  - около 47 тыс. Пользователей в часы пик
  • IRCnet  - около 20 тыс. Пользователей в часы пик
  • Undernet  - около 15 тыс. Пользователей в часы пик
  • OFTC  - около 14 тыс. Пользователей в часы пик
  • EFnet  - около 12 тыс. Пользователей в часы пик
  • Rizon  - около 11 тыс. Пользователей в часы пик
  • QuakeNet  - около 10 тыс. Пользователей в часы пик
  • DALnet  - около 8 тыс. Пользователей в часы пик

К 100 ведущим сетям IRC подключено около 220 тыс. Пользователей в часы пик.

Лента новостей

Хронология основных серверов:

Техническая информация

Снимок экрана HexChat , IRC-клиента для сред GTK .
Xaric, текстовый IRC - клиент, используется на Mac OS X . Показаны два канала IRC и личная беседа с автором программного обеспечения.

IRC - это открытый протокол , использующий TCP и, опционально, TLS . Сервер IRC может подключаться к другим серверам IRC для расширения сети IRC. Пользователи получают доступ к сетям IRC, подключая клиента к серверу. Есть много реализаций клиента, такие как Mirc , HexChat и Irssi и реализации сервера, например оригинальный IRCd . Большинство серверов IRC не требуют, чтобы пользователи регистрировали учетную запись, но перед подключением требуется ник .

IRC был первоначально простой текстовый протокол (хотя позже расширен), который по запросу был назначен порт 194 / TCP от IANA . Однако де - факто стандартом всегда было запустить IRC на 6667 / TCP и соседних номеров портов (например , TCP порты 6660-6669, 7000) , чтобы избежать необходимости запускать IRCD программное обеспечение с привилегиями суперпользователя .

Протокол указывал, что символы были 8-битными, но не указывал кодировку символов, которую должен использовать текст. Это может вызвать проблемы, когда пользователи, использующие разные клиенты и / или разные платформы, хотят общаться.

Все используемые сегодня протоколы IRC между клиентом и сервером являются производными от протокола, реализованного в версии irc2.4.0 сервера IRC2, и задокументированы в RFC 1459. С момента публикации RFC 1459 новые функции в реализации irc2.10 привели к к публикации нескольких пересмотренных протокольных документов (RFC 2810, RFC 2811, RFC 2812 и RFC 2813); однако эти изменения протокола не получили широкого распространения среди других реализаций.

Хотя многие спецификации протокола IRC были опубликованы, официальной спецификации нет, поскольку протокол остается динамичным. Практически ни один клиент и очень мало серверов строго полагаются на приведенные выше RFC в качестве справочной информации.

Microsoft сделала расширение для IRC в 1998 году через проприетарный IRCX . Позже они прекратили распространение программного обеспечения, поддерживающего IRCX, вместо этого разработали проприетарный MSNP .

Стандартная структура сети IRC-серверов представляет собой дерево . Сообщения маршрутизируются только по необходимым ветвям дерева, но состояние сети отправляется на каждый сервер, и, как правило, между серверами существует высокая степень неявного доверия. Однако у этой архитектуры есть ряд проблем. Неправильно функционирующий или злонамеренный сервер может нанести серьезный ущерб сети, и любые изменения в структуре, будь то намеренные или вызванные условиями в базовой сети, требуют разделения сети и соединения сети. Это приводит к большому сетевому трафику и ложным сообщениям о выходе / присоединении для пользователей и временной потере связи с пользователями на разделяющих серверах. Добавление сервера в большую сеть означает большую фоновую нагрузку на полосу пропускания в сети и большую нагрузку на память на сервере. Однако после создания каждое сообщение нескольким получателям доставляется аналогично многоадресной рассылке , то есть каждое сообщение проходит по сетевому каналу ровно один раз. Это преимущество по сравнению с протоколами без многоадресной рассылки, такими как Simple Mail Transfer Protocol (SMTP) или Extensible Messaging and Presence Protocol (XMPP).

Демон IRC также может использоваться в локальной сети (LAN). Таким образом, IRC можно использовать для облегчения общения между людьми в локальной сети (внутреннее общение).

Команды и ответы

IRC имеет линейную структуру. Клиенты отправляют однострочные сообщения на сервер, получают ответы на эти сообщения и получают копии некоторых сообщений, отправленных другими клиентами. В большинстве клиентов пользователи могут вводить команды, добавляя к ним префикс '/'. В зависимости от команды, они могут либо полностью обрабатываться клиентом, либо (как правило, для команд, которые клиент не распознает) передаваться непосредственно на сервер, возможно, с некоторыми изменениями.

Из-за природы протокола автоматизированные системы не всегда могут правильно связать отправленную команду с ее ответом с полной надежностью и подвержены угадыванию.

каналы

Основным средством связи с группой пользователей в установленном сеансе IRC является канал . Каналы в сети могут быть отображены с помощью команды IRC LIST , которая перечисляет все доступные в настоящее время каналы, для которых не установлены режимы + s или + p, в этой конкретной сети.

Пользователи могут присоединиться к каналу с помощью команды JOIN в большинстве клиентов, доступных как / join #channelname . Сообщения, отправленные на присоединенные каналы, затем ретранслируются всем другим пользователям.

Каналы, доступные во всей IRC-сети, имеют префикс "#", в то время как для каналов, локальных по отношению к серверу, используется "&". К другим менее распространенным типам каналов относятся каналы со знаком «+» - «немодальные» каналы без операторов - и «!» каналы, форма канала с меткой времени в сетях, обычно не имеющих метки времени.

Режимы

Пользователи и каналы могут иметь режимы , которые представлены одиночными буквами с учетом регистра и устанавливаются с помощью команды MODE . Пользовательские режимы и режимы каналов разделены и могут использовать одну и ту же букву для обозначения разных вещей (например, пользовательский режим «i» является невидимым режимом, в то время как режим канала «i» доступен только для приглашения.) Режимы обычно устанавливаются и сбрасываются с помощью команды режима, которая принимает цель (пользователь или канал), набор режимов, которые нужно установить (+) или отключить (-), и любые параметры, необходимые для режимов.

Некоторые режимы каналов принимают параметры, а другие режимы каналов применяются к пользователю на канале или добавляют или удаляют маску (например, маску запрета) из списка, связанного с каналом, вместо применения ко всему каналу в целом. Режимы, которые применяются к пользователям на канале, имеют связанный символ, который используется для представления режима в ответах с именами (отправляются клиентам при первом подключении к каналу и использовании команды имен), а во многих клиентах также используется для представления этого режима в ответах клиента. отображать список пользователей в канале или отображать собственный индикатор для пользовательских режимов.

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

В IRC есть небольшая конструктивная ошибка в отношении режимов, которые применяются к пользователям на каналах: сообщение имен, используемое для установления начального состояния канала, может отправлять только один такой режим для каждого пользователя на канале, но несколько таких режимов могут быть установлены для одного пользователя. Например, если пользователь имеет статус оператора (+ o) и статус голоса (+ v) на канале, новый клиент не сможет видеть режим с меньшим приоритетом (например, голосовой). Обходные пути для этого возможны как на стороне клиента, так и на стороне сервера, но ни один из них не применяется широко.

Стандартные (RFC 1459) режимы

Пользовательские режимы
Письмо Условное обозначение Описание
я Невидимый - его нельзя увидеть без общего канала или без знания точного названия.
s Получает уведомления сервера
ш Получает удар
о Пользователь является оператором IRC (ircop)
Режимы каналов
Письмо Условное обозначение Параметр (ы) Описание
о @ Имя затронутого пользователя Оператор канала - может, помимо прочего, изменять режимы канала и выгружать пользователей с канала.
s Секретный канал - не отображается в списке каналов или в Whois пользователей, за исключением пользователей, уже находящихся на канале.
п Частный канал - указан в списке каналов как "prv" в соответствии с RFC 1459.
п Пользователи не могут отправлять сообщения на канал извне
м Канал модерируется (сообщения на него могут отправлять только те, кто имеет статус оператора канала или голосовой статус на канале)
я На канал могут войти только пользователи с приглашениями.
т Только операторы канала могут изменять тему канала.
л Ограничить количество Ограничивает количество пользователей, которые могут быть на канале (при заполнении новые пользователи не могут присоединиться)
б Маска бана (ник! Пользователь @ хост с разрешенными подстановочными знаками) Запрещает hostmasks от канала
v + Имя затронутого пользователя Предоставляет пользователю голосовой статус на канале (см. + M выше)
k Ключ нового канала Устанавливает ключ канала таким образом, что только пользователи, знающие ключ, могут вводить

Многие демоны и сети добавили дополнительные режимы или изменили поведение режимов в приведенном выше списке.

Операторы каналов

Оператор канала является клиентом на IRC канале , который управляет каналом. Операторов канала IRC можно легко увидеть по символу или значку рядом с их именем (зависит от реализации клиента, обычно это префикс символа «@», зеленый кружок или латинская буква «+ o» / «o»). В большинстве сетей оператор может:

  • Ударить пользователя
  • Забанить пользователя
  • Дайте другому пользователю статус оператора канала IRC или статус голоса канала IRC.
  • Измените тему канала IRC, когда установлен режим канала + t.
  • Измените блокировки режима IRC-канала.

Операторы IRC

Есть также пользователи, которые имеют повышенные права на своем локальном сервере или во всей сети; их называют операторами IRC, иногда сокращенно до IRCops или Opers (не путать с операторами каналов). Поскольку реализация IRCd меняется, меняются и привилегии оператора IRC на данном IRCd. RFC 1459 утверждает, что операторы IRC являются «необходимым злом» для поддержания чистого состояния сети, и поэтому они должны иметь возможность отключать и повторно подключать серверы. Кроме того, чтобы предотвратить проникновение злонамеренных пользователей или даже вредоносных автоматизированных программ в IRC, операторам IRC обычно разрешается отключать клиентов и полностью запрещать IP-адреса или целые подсети. Сети, предоставляющие услуги (NickServ и др.), Обычно позволяют своим операторам IRC также решать основные вопросы «владения». Дополнительные привилегированные права могут включать в себя отмену запретов каналов (возможность присоединяться к каналам, к которым они не могли бы присоединиться, если бы они не были задействованы), возможность использовать себя на каналах, где они не могли бы работать без управления, автоматическое включение по каналам всегда и пр.

Маски хоста

Маска хоста - это уникальный идентификатор клиента IRC, подключенного к серверу IRC . Серверы , службы и другие клиенты IRC , включая ботов , могут использовать его для идентификации определенного сеанса IRC.

Формат маски хоста nick!user@host. Маска хоста похожа на, но ее не следует путать с адресом электронной почты .

Часть псевдонима - это псевдоним, выбранный пользователем, который может быть изменен при подключении. Пользовательская часть - это имя пользователя, сообщаемое идентификатором на клиенте. Если идентификатор недоступен на клиенте, имя пользователя, указанное при подключении клиента, используется после префикса тильды .

Часть хоста - это имя хоста, с которого подключается клиент. Если IP-адрес клиента не может быть преобразован сервером в действительное имя хоста , он используется вместо имени хоста.

Из-за последствий для конфиденциальности раскрытия IP-адреса или имени хоста клиента некоторые демоны IRC также предоставляют функции конфиденциальности, такие как InspIRCd или режим UnrealIRCd «+ x». Это хеширует IP-адрес клиента или маскирует часть имени хоста клиента, делая его нечитаемым для пользователей, кроме IRCops . Пользователи также могут иметь возможность запросить «виртуальный хост» (или «vhost»), который будет отображаться в маске хоста, чтобы обеспечить дополнительную анонимность. Некоторые сети IRC, такие как Libera Chat или Freenode , используют их как «маскировку», чтобы указать, что пользователь связан с группой или проектом.

Схема URI

Есть три признанных унифицированный идентификатор ресурса (URI) схемы для Internet Relay Chat: irc, ircsи irc6. Когда они поддерживаются, они допускают гиперссылки различных форм, в том числе

irc://<host>[:<port>]/[<channel>[?<channel_keyword>]]
ircs://<host>[:<port>]/[<channel>[?<channel_keyword>]]
irc6://<host>[:<port>]/[<channel>[?<channel_keyword>]]

(где элементы, заключенные в квадратные скобки ([,]), являются необязательными) для использования (при необходимости) для подключения к указанному хосту (или сети, если это известно клиенту IRC) и присоединения к указанному каналу. (Это можно использовать в самом клиенте или из другого приложения, такого как веб-браузер). irc - это URI по умолчанию, irc6 указывает соединение, которое должно быть выполнено с использованием IPv6, а ircs указывает безопасное соединение.

Согласно спецификации, обычный символ решетки (#) будет добавлен к именам каналов, которые начинаются с буквенно - цифрового символа, что позволяет его опустить. Некоторые реализации (например, mIRC) будут делать это безоговорочно, приводя к (обычно непреднамеренному) дополнительному (например, каналу ##), если он включен в URL-адрес.

Некоторые реализации позволяют указывать несколько каналов через запятую.

Вызовы

Проблемы в первоначальном дизайне IRC заключались в том, что количество общих данных состояния, являющихся ограничением его масштабируемости, отсутствие уникальных идентификаторов пользователей, приводящих к проблеме коллизии псевдонимов, отсутствие защиты от расщеплений с помощью циклической маршрутизации, компромисс в масштабируемость ради информации о присутствии пользователя в реальном времени, недостатки протокола, обеспечивающие платформу для злоупотреблений, отсутствие прозрачной и оптимизируемой передачи сообщений и отсутствие шифрования. Некоторые из этих проблем были решены в Modern IRC .

Атаки

Поскольку соединения IRC могут быть незашифрованными и обычно охватывают длительные периоды времени, они являются привлекательной целью для атакующих DoS / DDoS и хакеров . Из-за этого необходима тщательная политика безопасности, чтобы гарантировать, что сеть IRC не восприимчива к атакам, таким как война захвата . Сети IRC также могут иметь пользователей K-line или G-line или серверы, которые оказывают вредное воздействие.

Некоторые серверы IRC поддерживают соединения SSL / TLS в целях безопасности. Это помогает остановить использование программ- снифферов пакетов для получения паролей пользователей IRC, но мало используется за пределами этой области из-за общедоступности каналов IRC. Для соединений SSL требуется поддержка как клиента, так и сервера (для этого может потребоваться установка двоичных файлов SSL и специальных исправлений или модулей IRC-клиента на свои компьютеры). Некоторые сети также используют SSL для межсерверных соединений и предоставляют специальный флаг канала (например, +S), чтобы разрешать использование на канале только пользователей, подключенных по протоколу SSL, при этом запрещая идентификацию оператора открытым текстом, чтобы лучше использовать преимущества, предоставляемые SSL. .

IRC служил первой лабораторией для многих видов интернет-атак, таких как использование поддельных сообщений о недоступности ICMP для разрыва IRC-соединений на основе TCP ( ядерное уничтожение ), чтобы раздражать пользователей или облегчить захват .

Предотвращение злоупотреблений

Один из наиболее спорных технических вопросов, связанных с реализациями IRC, который сохранился до сих пор, - это заслуга протоколов «Nick / Channel Delay» и «Timestamp». Оба метода существуют для решения проблемы атак типа «отказ в обслуживании», но используют очень разные подходы. Проблема с исходным протоколом IRC в том виде, в котором он был реализован, заключалась в том, что при разделении и воссоединении двух серверов две стороны сети просто объединяли свои каналы. Если бы пользователь мог присоединиться к «разделенному» серверу, где канал, который существовал на другой стороне сети, был пуст, и получить статус оператора, он стал бы оператором канала «комбинированного» канала после завершения netsplit ; если пользователь взял псевдоним, который существовал на другой стороне сети, сервер убил бы обоих пользователей при повторном присоединении (т. е. "столкновение ников"). Этим часто злоупотребляли для «массового уничтожения» всех пользователей на канале, создавая таким образом «бесполезные» каналы, на которых не было операторов, которые могли бы справиться со злоупотреблениями. Помимо возникновения проблем в IRC, это побуждало людей проводить атаки типа «отказ в обслуживании» против серверов IRC, чтобы вызвать расщепления сети , которыми они впоследствии могли бы злоупотреблять.

Задержка ник (НД) и канал задержка стратегия (CD) направлены на предотвращение злоупотреблений путем задержки переподключения и переименовывает. После того, как пользователь выйдет из системы и псевдоним станет доступным, или канал прекратит свое существование, потому что все его пользователи разошлись (как это часто бывает во время netsplit ), сервер не позволит никому из пользователей использовать этот псевдоним или присоединиться к этому каналу до тех пор, пока не наступит определенный период. период времени ( задержка ) прошел. Идея заключается в том, что даже если происходит расщепление сети , это бесполезно для злоумышленника, потому что он не может получить никнейм или статус оператора на канале, и, таким образом, не может произойти столкновение псевдонима или «слияние» канала. В некоторой степени это причиняет неудобства законным пользователям, которые могут быть вынуждены на короткое время использовать другое имя после повторного присоединения ( популярно добавление подчеркивания ).

Протокол отметок времени является альтернативой задержкам ников / каналов, которые разрешают конфликты с использованием приоритета с отметками времени. Каждому нику и каналу в сети присваивается временная метка - дата и время, когда он был создан. Когда происходит netsplit, два пользователя с каждой стороны могут использовать один и тот же псевдоним или канал, но когда две стороны объединяются, только один может выжить. В случае с никнеймами новый пользователь, согласно их TS, будет убит; когда канал конфликтует, участники (пользователи на канале) объединяются, но операторы канала на «проигрышной» стороне разделения теряют свой статус оператора канала.

TS - гораздо более сложный протокол, чем ND / CD, как по дизайну, так и по реализации, и, несмотря на то, что он прошел несколько изменений, в некоторых реализациях все еще есть проблемы с «рассинхронизацией» (когда два сервера в одной сети расходятся во мнениях о текущем состоянии сеть) и слишком снисходительно относиться к тому, что позволяла «проигравшая» сторона. В исходных протоколах TS, например, не было защиты от пользователей, устанавливающих запреты или другие режимы в проигрывающем канале, которые затем будут объединены при повторном присоединении разделения, даже если пользователи, которые установили эти режимы, потеряли свой статус оператора канала. Некоторые современные IRC-серверы на базе TS также включают некоторую форму ND и / или CD в дополнение к меткам времени в попытке еще больше обуздать злоупотребления.

Большинство сетей сегодня используют подход с отметками времени. Разногласия между отметками времени и ND / CD привели к тому, что несколько серверов отделились от EFnet и сформировали новый IRCnet . После разделения EFnet перешла на протокол TS, а IRCnet использовала ND / CD.

В последних версиях IRCnet ircd, а также ircds, использующих протокол TS6 (включая Charybdis), ND был расширен / заменен механизмом SAVE. Этот механизм присваивает каждому клиенту UID при подключении к серверу IRC. Этот идентификатор начинается с номера, который запрещен в никах (хотя некоторые ircds, а именно IRCnet и InspIRCd, позволяют клиентам переключаться на свой собственный UID в качестве псевдонима).

Если два клиента с одинаковым псевдонимом присоединяются с разных сторон netsplit («конфликт ников»), первый сервер, который увидит это столкновение, заставит обоих клиентов изменить свой ник на свой UID, тем самым спасая обоих клиентов от отключения. В IRCnet псевдоним также будет заблокирован на некоторое время (ND), чтобы оба клиента не смогли вернуться к исходному нику, что приведет к повторному конфликту.

Клиенты

Клиентское программное обеспечение

Схема IRC-сети с обычными клиентами (зеленый), ботами (синий) и баунсерами (оранжевый)

Клиентское программное обеспечение существует для различных операционных систем или программных пакетов, а также для сетевых или внутренних игр. Доступно множество различных клиентов для различных операционных систем, включая Windows , Unix и Linux , macOS и мобильные операционные системы (например, iOS и Android ). В Windows mIRC - один из самых популярных клиентов.

Некоторые программы, расширяемые с помощью плагинов, также служат платформами для клиентов IRC. Например, клиент под названием ERC , полностью написанный на Emacs Lisp , включен в версию 22.3 Emacs. Следовательно, любая платформа, на которой может работать Emacs, может запускать ERC.

Ряд веб-браузеров имеют встроенные клиенты IRC, такие как Opera ( версия 12.18 и ранее ) и надстройка ChatZilla для Mozilla Firefox (для Firefox 56 и более ранних версий ; входит в качестве встроенного компонента SeaMonkey ). Веб-клиенты, такие как Mibbit и KiwiIRC с открытым исходным кодом, могут работать в большинстве браузеров.

Такие игры, как War§ow , Unreal Tournament (до Unreal Tournament 2004 ), Uplink , игры на основе Spring Engine , 0 AD и ZDaemon включают IRC.

Интерфейс чата Ustream - это IRC с настраиваемой аутентификацией, а также интерфейс Twitch (ранее Justin.tv).

Боты

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

Вышибала

Программа, которая работает как демон на сервере и функционирует как постоянный прокси, называется BNC или bouncer. Цель состоит в том, чтобы поддерживать соединение с IRC-сервером, действуя как ретранслятор между сервером и клиентом, или просто действовать как прокси. Если клиент потеряет подключение к сети, BNC может оставаться подключенным и архивировать весь трафик для последующей доставки, позволяя пользователю возобновить сеанс IRC, не прерывая подключение к серверу.

Кроме того, для получения эффекта вышибалы IRC-клиент (обычно текстовый , например Irssi ) может быть запущен на постоянно активном сервере, к которому пользователь подключается через ssh . Это также позволяет устройствам, которые имеют только функции ssh, но не установлен фактический клиент IRC, подключаться к IRC, и это позволяет совместно использовать сеансы IRC.

Чтобы IRC-клиент не завершал работу при закрытии ssh-соединения, клиент может быть запущен внутри терминального мультиплексора, такого как GNU Screen или tmux , таким образом, оставаясь постоянно подключенным к IRC-сетям и имея возможность регистрировать разговоры в каналах, которые пользователь заинтересован в том, чтобы поддерживать присутствие канала в сети. По образцу этой установки в 2004 году был запущен IRC-клиент, следующий за клиент-сервером , названный Smuxi .

Поисковые системы

Доступны многочисленные поисковые системы, которые помогают пользователю находить то, что они ищут в IRC. Как правило, поисковая система состоит из двух частей: «внутренней» (или «поисковой машины / сканера») и внешней «поисковой машины».

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

Внешняя «поисковая машина» - это пользовательский интерфейс к базе данных. Он предоставляет пользователям способ поиска в базе данных проиндексированной информации для извлечения данных, которые они ищут. Эти интерфейсные поисковые системы также могут быть написаны на многих языках программирования.

У большинства поисковых систем есть собственный паук, представляющий собой отдельное приложение, отвечающее за сканирование IRC и индексирование самих данных; однако другие индексаторы основаны на пользователях. Последние полагаются на то, что пользователи устанавливают свои «надстройки» к своему IRC-клиенту; надстройка - это то, что отправляет в базу данных информацию о каналах, на которых находится пользователь.

Многие пользователи внедрили свои собственные специальные поисковые системы, используя функции ведения журнала, встроенные во многие клиенты IRC. Эти поисковые системы обычно реализуются как боты и предназначены для определенного канала или группы связанных каналов.

Кодировка символов

IRC по-прежнему не имеет единого общепринятого стандартного соглашения о том, как передавать символы за пределами 7-битного репертуара ASCII . Серверы IRC обычно передают сообщения от клиента другому клиенту в виде байтовых последовательностей, без какой-либо интерпретации или перекодирования символов . Протокол IRC (в отличие, например, от MIME или HTTP ) не имеет механизмов для объявления и согласования параметров кодировки символов. Это возлагает ответственность за выбор подходящего кодека символов на клиента. На практике каналы IRC в основном использовали те же кодировки символов, которые также использовались операционными системами (в частности, производными Unix ) в соответствующих языковых сообществах:

  • 7-битная эра: на заре IRC, особенно среди пользователей скандинавского и финского языков , национальные варианты ISO 646 были доминирующими кодировками символов . Они кодируют символы, отличные от ASCII, такие как Ä Ö Å ä ö å в позициях кода 0x5B 0x5C 0x5D 0x7B 0x7C 0x7D ( US-ASCII : [ \ ] { | } ). Именно поэтому эти коды всегда разрешены в никах. Согласно RFC 1459, {| } в псевдонимах следует рассматривать как строчные эквиваленты [\] соответственно. К концу 1990-х годов использование 7-битных кодировок исчезло в пользу ISO 8859-1 , и такие сопоставления эквивалентности были исключены из некоторых демонов IRC.
  • 8-битная эра: с начала 1990-х годов для европейских языков стали широко использоваться 8-битные кодировки, такие как ISO 8859-1 . Российские пользователи могли выбирать между KOI8-R , ISO 8859-5 и CP1251 , и примерно с 2000 года современные российские IRC-сети осуществляют преобразование между этими различными обычно используемыми кодировками кириллицы .
  • Многобайтовая эпоха: в течение долгого времени восточноазиатские IRC-каналы с логографическими скриптами в Китае, Японии и Корее использовали многобайтовые кодировки, такие как EUC или ISO-2022-JP . С общим переходом с ISO 8859 на UTF-8 на платформах Linux и Unix примерно с 2002 года, UTF-8 становится все более популярной заменой многих из ранее используемых 8-битных кодировок в европейских каналах. Некоторые клиенты IRC теперь могут читать сообщения как в ISO 8859-1, так и в UTF-8 в одном канале, эвристически автоматически определяя используемую кодировку. Переход на UTF-8 начался, в частности, в финскоязычном IRC ( Merkistö (финский) ).

Сегодня кодировка UTF-8 Unicode / ISO 10646 будет наиболее вероятным претендентом на единую будущую стандартную кодировку символов для всей связи IRC, если такой стандарт когда-либо ослабит ограничение на размер сообщения в 510 байт. UTF-8 совместим с ASCII и охватывает расширенный набор всех других широко используемых стандартов набора кодированных символов .

Обмен файлами

Подобно обычному обмену файлами P2P , пользователи могут создавать файловые серверы, которые позволяют им обмениваться файлами друг с другом, используя настраиваемые боты или сценарии IRC для своих клиентов IRC . Часто пользователи объединяются, чтобы распространять варез через сеть IRC-ботов.

Технически IRC сам по себе не предоставляет механизмов передачи файлов ; совместное использование файлов осуществляется IRC- клиентами , обычно с использованием протокола Direct Client-to-Client (DCC), в котором передача файлов согласовывается посредством обмена личными сообщениями между клиентами. Подавляющее большинство клиентов IRC поддерживают передачу файлов DCC, отсюда и мнение, что совместное использование файлов является неотъемлемой особенностью IRC. Однако обычное использование этого протокола иногда также вызывает спам DCC. Команды DCC также использовались для использования уязвимых клиентов для выполнения таких действий, как отключение от сервера или выход из клиента.

Смотрите также

Цитаты

Общая библиография

дальнейшее чтение

внешние ссылки

  • IRC в Curlie
  • Список номеров IRC
  • История IRC
  • IRC.org - техническая и историческая информация о IRC6; Статьи по истории IRC
  • IRChelp.org - архив справки Internet Relay Chat (IRC); Большой архив документов по IRC
  • IRCv3 - рабочая группа разработчиков, которые добавляют новые функции в протокол и пишут для них спецификации
  • IRC-Source - Internet Relay Chat (IRC) сеть и поисковая система каналов с историческими данными
  • irc.netsplit.de - список сетей Internet Relay Chat (IRC) с историческими данными