IRC ( Internet Relay Chat ) — это текстовая чат-система для мгновенного обмена сообщениями . IRC предназначена для группового общения на дискуссионных форумах, называемых каналами , [1], но также позволяет общаться один на один с помощью личных сообщений [2], а также общаться в чате и передавать данные , [3] включая обмен файлами . [4]
Internet Relay Chat реализован как протокол прикладного уровня для облегчения общения в виде текста. Процесс чата работает по сетевой модели клиент-сервер . Пользователи подключаются с помощью клиента, который может быть веб-приложением , автономной настольной программой или встроенной частью более крупной программы, к IRC-серверу, который может быть частью более крупной сети IRC. Примерами программ, используемых для подключения, являются Mibbit , IRCCloud , KiwiIRC и mIRC .
Использование IRC неуклонно снижается с 2003 года, потеряв 60 процентов своих пользователей. [5] В апреле 2011 года 100 крупнейших сетей IRC обслуживали более 200 000 пользователей одновременно. [6]
IRC был создан Яркко Ойкариненом в августе 1988 года для замены программы под названием MUT (MultiUser Talk) на BBS под названием OuluBox в Университете Оулу в Финляндии , где он работал на кафедре науки обработки информации. Яркко намеревался расширить программное обеспечение BBS, которым он управлял, чтобы разрешить новости в стиле Usenet , обсуждения в реальном времени и аналогичные функции BBS. Первой частью, которую он реализовал, была часть чата, которую он сделал с заимствованными частями, написанными его друзьями Юрки Куоппалой и Юккой Пихлом. Первая сеть IRC работала на одном сервере под названием tolsun.oulu.fi. [7] Ойкаринен нашел вдохновение в системе чата, известной как Bitnet Relay , которая работала на BITNET . [8]
Юрки Куоппала убедил Ойкаринена попросить Университет Оулу освободить код IRC, чтобы его можно было запускать и за пределами Оулу, и после того, как они наконец выпустили его, Юрки Куоппала немедленно установил еще один сервер. Это была первая «сеть IRC». Ойкаринен привлек нескольких друзей в Хельсинкском технологическом университете и Технологическом университете Тампере [8], чтобы они начали запускать серверы IRC, когда число его пользователей увеличилось, а вскоре к ним присоединились и другие университеты. В это время Ойкаринен понял, что остальные функции BBS, вероятно, не впишутся в его программу. [7]
Ойкаринен связался с людьми из Университета Денвера и Университета штата Орегон . У них была своя собственная работающая сеть IRC, и они хотели подключиться к финской сети. Они получили программу от одного из друзей Ойкаринена, Виджая Субраманиама — первого нефинского человека, использовавшего IRC. Затем IRC разросся и стал использоваться во всей финской национальной сети — FUNET — а затем подключился к Nordunet , скандинавскому филиалу Интернета. В ноябре 1988 года IRC распространился по всему Интернету, и в середине 1989 года по всему миру насчитывалось около 40 серверов. [7]
В августе 1990 года в мире IRC произошло первое крупное разногласие. «A-net» (Anarchy net) включал сервер под названием eris.berkeley.edu. Он был полностью открыт, не требовал паролей и не имел ограничений на количество подключений. Как объясняет Грег «wumpus» Линдаль: [9] «у него была линия сервера wildcard, поэтому люди подключали серверы и сталкивали всех по никам». «Сеть Eris Free», EFnet , сделала машину eris первой, получившей Q-line (Q для карантина) от IRC. Снова словами wumpus: [9] «Eris отказалась удалить эту линию, поэтому я сформировал EFnet. Это была не такая уж большая борьба; я заставил все хабы присоединиться, и почти все остальные увлеклись». A-net была сформирована с серверами eris, в то время как EFnet была сформирована с не-eris серверами. История показала, что большинство серверов и пользователей выбрали EFnet. После того, как A-net распалась, название EFnet утратило всякий смысл, и это снова стала единственная сеть IRC. [7]
Примерно в то же время IRC использовался для сообщения о попытке советского государственного переворота 1991 года во время затишья в СМИ . [10] Ранее он использовался аналогичным образом во время войны в Персидском заливе . [11] Журналы чатов этих и других событий хранятся в архиве ibiblio . [12]
Еще одна попытка форка, первая, которая имела долгосрочное значение, была инициирована "Wildthang" в Соединенных Штатах в октябре 1992 года. (Она ответвилась от EFnet ircd версии 2.8.10). Она должна была стать просто тестовой сетью для разработки ботов, но быстро выросла до сети "для друзей и их друзей". В Европе и Канаде велась работа над отдельной новой сетью, и в декабре французские серверы подключились к канадским, а к концу месяца французская и канадская сети были подключены к американской, образовав сеть, которая позже стала называться "The Undernet ". [7]
«Undernetters» хотели развить ircd дальше, пытаясь заставить его использовать меньшую полосу пропускания и попытаться разобраться с хаосом каналов ( netsplits и takeovers ), от которого начал страдать EFnet. Для последней цели Undernet внедрил временные метки, новую маршрутизацию и предложил CService — программу, которая позволяла пользователям регистрировать каналы, а затем пыталась защитить их от нарушителей спокойствия. Первый представленный список серверов от 15 февраля 1993 года включал серверы из США, Канады, Франции, Хорватии и Японии. 15 августа был установлен новый рекорд количества пользователей — 57 пользователей. [7]
В мае 1993 года был опубликован RFC 1459 [13] , в котором подробно описывается простой протокол для работы клиент/сервер, каналов, разговоров один-к-одному и один-ко-многим. [7] Значительное количество расширений, таких как CTCP, цвета и форматы, не включены в спецификации протокола, как и кодировка символов, [14] что привело к расхождению различных реализаций серверов и клиентов. Реализация программного обеспечения значительно различалась от одной сети к другой, каждая сеть реализовывала свои собственные политики и стандарты в своих собственных кодовых базах.
Летом 1994 года Undernet сам разветвился. Новая сеть была названа DALnet (названа в честь ее основателя: dalvenjah), сформированная для лучшего обслуживания пользователей и большей защиты пользователей и каналов. Одним из наиболее значительных изменений в DALnet было использование более длинных псевдонимов (первоначальный лимит ircd составлял 9 букв). Изменения DALnet ircd были сделаны Алексеем «Lefler» Kosut. Таким образом, DALnet был основан на сервере ircd Undernet, хотя пионеры DALnet были отказавшимися от EFnet. По словам Джеймса Нга, первые люди DALnet были «операторами в #StarTrek, больными от постоянных разделений/задержек/поглощений и т. д.». [7]
DALnet быстро предложил глобальные WallOps (сообщения IRCop, которые могут видеть пользователи, которые +w (/mode NickName +w)), более длинные псевдонимы, псевдонимы Q:Lined (псевдонимы, которые нельзя использовать, например ChanServ, IRCop, NickServ и т. д.), глобальные K:Lines (бан одного человека или целого домена на сервере или во всей сети), сообщения только IRCop: GlobOps, режим +H, показывающий, что IRCop является «helpop» и т. д. Многие из новых функций DALnet были написаны в начале 1995 года Брайаном «Morpher» Смитом и позволяют пользователям владеть псевдонимами, управлять каналами, отправлять записки и многое другое. [7]
В июле 1996 года, после месяцев пламенных войн и обсуждений в списке рассылки, произошел еще один раскол из-за разногласий по поводу того, как должна развиваться разработка ircd. В частности, «европейская» (большинство этих серверов находились в Европе) сторона, которая позже назвала себя IRCnet, выступала за задержки по никам и каналам, тогда как сторона EFnet выступала за временные метки. [7] Также были разногласия по поводу политики: европейская сторона начала устанавливать набор правил, определяющих, что IRCops могут делать, а что нет, точка зрения, против которой выступила американская сторона. [15]
Большинство (не все) серверов IRCnet находились в Европе, в то время как большинство серверов EFnet находились в США. Это событие также известно как «Великий раскол» во многих сообществах IRC. С тех пор (по состоянию на август 1998 года) EFnet вырос и превысил число пользователей, которое было тогда. Осенью 2000 года (северной) EFnet имел около 50 000 пользователей, а IRCnet — 70 000. [7]
IRC сильно изменился за время своего существования в Интернете. Новое серверное программное обеспечение добавило множество новых функций.
По состоянию на 2016 год [update], новая работа по стандартизации ведется под руководством рабочей группы под названием IRCv3, которая фокусируется на более продвинутых клиентских функциях, таких как мгновенные уведомления, улучшенная поддержка истории и улучшенная безопасность. [19] По состоянию на 2019 год [update], ни одна из крупных сетей IRC не полностью приняла предлагаемый стандарт. [20]
По состоянию на июнь 2021 года [update]известно о 481 различных работающих сетях IRC [21], из которых наибольшее количество пользователей имеет открытый исходный код Libera Chat , основанный в мае 2021 года, с 20 374 каналами на 26 серверах; в общей сложности 100 крупнейших сетей IRC имеют более 100 тысяч каналов, работающих примерно на тысяче серверов. [22]
После своей золотой эры в 1990-х и начале 2000-х годов (240 000 пользователей QuakeNet в 2004 году) IRC пережил значительный спад, потеряв около 60% пользователей в период с 2003 по 2012 год, при этом пользователи перешли на платформы социальных сетей , такие как Facebook или Twitter , [5] , а также на открытые платформы, такие как XMPP , который был разработан в 1999 году. Некоторые сети, такие как Freenode, не последовали общей тенденции и увеличились более чем в четыре раза за тот же период. [5] Однако Freenode, у которого в 2016 году было около 90 000 пользователей, с тех пор сократился до примерно 9 300 пользователей. [23]
Крупнейшие сети IRC традиционно группируются как «Большая четверка» [24] [25] [26] [27] — обозначение сетей, которые возглавляют статистику. Сети «Большой четверки» периодически меняются, но из-за общественного характера IRC существует большое количество других сетей, из которых пользователи могут выбирать.
Исторически «Большая четверка» выглядела так: [24] [25] [26]
Число одновременных пользователей IRC достигло 6 миллионов в 2001 году и 10 миллионов в 2004–2005 годах, снизившись примерно до 350 тысяч в 2021 году. [ необходима цитата ]
В часы пик к 100 крупнейшим сетям IRC подключено около 230 тыс. пользователей. [28]
Хронология основных серверов:
IRC — открытый протокол , использующий TCP [13] и, опционально, TLS . IRC-сервер может подключаться к другим IRC-серверам для расширения сети IRC. [29] Пользователи получают доступ к сетям IRC, подключая клиента к серверу. [30] Существует множество клиентских реализаций, таких как mIRC , HexChat и irssi , а также серверных реализаций, например, оригинальный IRCd . Большинство IRC-серверов не требуют от пользователей регистрации учетной записи, но перед подключением требуется псевдоним . [31]
IRC изначально был открытым текстовым протоколом [13] (хотя позже он был расширен), которому по запросу IANA назначил порт 194/TCP . [32] Однако фактическим стандартом всегда было запускать IRC на порту 6667/TCP [33] и близлежащих номерах портов (например, TCP-порты 6660–6669, 7000) [34] , чтобы избежать необходимости запускать программное обеспечение IRCd с привилегиями root .
Протокол указывал, что символы были 8-битными, но не указывал кодировку символов, которую должен был использовать текст. [14] Это может вызвать проблемы, когда пользователи, использующие разные клиенты и/или разные платформы, хотят общаться.
Все используемые сегодня клиент-серверные протоколы IRC произошли от протокола, реализованного в версии irc2.4.0 сервера IRC2 и задокументированного в RFC 1459. После публикации RFC 1459 новые возможности в реализации irc2.10 привели к публикации нескольких пересмотренных протокольных документов (RFC 2810, RFC 2811, RFC 2812 и RFC 2813); однако эти изменения протокола не получили широкого распространения среди других реализаций. [ необходима цитата ]
Хотя было опубликовано много спецификаций протокола IRC, официальной спецификации нет, поскольку протокол остается динамичным. Практически ни один клиент и очень немногие серверы строго не полагаются на вышеуказанные RFC как на справочные материалы. [ необходима цитата ]
В 1998 году Microsoft создала расширение для IRC с помощью фирменного протокола IRCX . [35] Позднее они прекратили распространение программного обеспечения, поддерживающего IRCX, и вместо этого занялись разработкой фирменного протокола MSNP .
Стандартная структура сети IRC-серверов представляет собой дерево . [ 36] Сообщения маршрутизируются только по необходимым ветвям дерева, но состояние сети отправляется на каждый сервер [37] , и между серверами обычно существует высокая степень неявного доверия. Однако эта архитектура имеет ряд проблем. Неправильно работающий или вредоносный сервер может нанести серьезный ущерб сети [38], и любые изменения в структуре, будь то преднамеренные или вызванные условиями в базовой сети, требуют net-split и net-join. Это приводит к большому сетевому трафику и ложным сообщениям о выходе/присоединении для пользователей [39] и временной потере связи с пользователями на разделяющих серверах. Добавление сервера в большую сеть означает большую фоновую нагрузку на полосу пропускания в сети и большую нагрузку на память на сервере. Однако после установки каждое сообщение нескольким получателям доставляется способом, аналогичным multicast , то есть каждое сообщение проходит по сетевому соединению ровно один раз. [40] Это преимущество по сравнению с немультикастовыми протоколами, такими как Simple Mail Transfer Protocol (SMTP) [ требуется ссылка ] или Extensible Messaging and Presence Protocol (XMPP) [ требуется ссылка ] .
Демон IRC может использоваться в локальной сети (LAN). Таким образом, IRC может использоваться для облегчения общения между людьми в локальной сети (внутреннее общение). [41] [42]
IRC имеет строчную структуру. Клиенты отправляют серверу однострочные сообщения, [43] получают ответы на эти сообщения [44] и получают копии некоторых сообщений, отправленных другими клиентами. В большинстве клиентов пользователи могут вводить команды, добавляя к ним префикс '/'. В зависимости от команды они могут либо полностью обрабатываться клиентом, либо (как правило, для команд, которые клиент не распознает) передаваться напрямую на сервер, возможно, с некоторыми изменениями. [45]
Из-за природы протокола автоматизированные системы не всегда могут правильно и с полной надежностью сопоставить отправленную команду с ответом и подвержены догадкам. [46]
Основным средством общения с группой пользователей в установленном сеансе IRC является канал . [ 47] Каналы в сети можно отобразить с помощью команды IRC LIST , [48] которая выводит список всех доступных в данный момент каналов, для которых не установлены режимы +s или +p в данной конкретной сети.
Пользователи могут присоединиться к каналу с помощью команды JOIN , [49] в большинстве клиентов доступной как /join #channelname . Сообщения, отправленные на присоединенные каналы, затем передаются всем остальным пользователям. [47]
Каналы, доступные по всей сети IRC, имеют префикс «#», а локальные по отношению к серверу — «&». [50] Другие менее распространенные типы каналов включают каналы «+» — «немодальные» каналы без операторов [51] — и каналы «!», форму канала с временной меткой в сетях, где временная метка обычно отсутствует. [52]
Пользователи и каналы могут иметь режимы , представленные отдельными буквами, чувствительными к регистру [53] , и устанавливаемые с помощью команды MODE . [54] Режимы пользователей и режимы каналов являются отдельными и могут использовать одну и ту же букву для обозначения разных вещей (например, режим пользователя «i» является невидимым режимом, а режим канала «i» — режимом только по приглашению. [55] ) Режимы обычно устанавливаются и снимаются с помощью команды mode, которая принимает цель (пользователя или канал), набор режимов для установки (+) или снятия (-) и любые параметры, необходимые режимам.
Некоторые режимы каналов принимают параметры, а другие режимы каналов применяются к пользователю на канале или добавляют или удаляют маску (например, маску бана) из списка, связанного с каналом, а не применяются к каналу в целом. [56] Режимы, которые применяются к пользователям на канале, имеют связанный символ, который используется для представления режима в ответах с именами [57] (отправляемых клиентам при первом присоединении к каналу [49] и использовании команды names), а во многих клиентах также используется для представления его в отображаемом клиентом списке пользователей на канале или для отображения собственного индикатора для режимов пользователя.
Чтобы правильно анализировать входящие сообщения режима и отслеживать состояние канала, клиент должен знать, какой режим какого типа, и для режимов, которые применяются к пользователю на канале, какой символ идет с какой буквой. В ранних реализациях IRC это должно было быть жестко закодировано в клиенте. Однако теперь есть фактическое стандартное расширение протокола под названием ISUPPORT, которое отправляет эту информацию клиенту во время подключения с помощью числового 005. [58] [59]
В IRC есть небольшая ошибка проектирования относительно режимов, которые применяются к пользователям на каналах: сообщение с именами, используемое для установки начального состояния канала, может отправлять только один такой режим на пользователя на канале, [57] но несколько таких режимов могут быть установлены для одного пользователя. Например, если пользователь имеет как статус оператора (+o), так и статус голоса (+v) на канале, новый клиент не сможет увидеть режим с меньшим приоритетом (т. е. голос). Обходные пути для этого возможны как на стороне клиента, так и на стороне сервера; распространенным решением является использование расширения IRCv3 «multi-prefix». [60]
Многие демоны и сети добавили дополнительные режимы или изменили поведение режимов в приведенном выше списке. [62] [63] [64] [65]
Оператор канала — это клиент на канале IRC , который управляет каналом. Операторов каналов IRC можно легко узнать по символу или значку рядом с их именем (зависит от реализации клиента, обычно это префикс символа "@", зеленый круг или латинская буква "+o"/"o"). В большинстве сетей оператор может:
Существуют также пользователи, которые поддерживают повышенные права на своем локальном сервере или во всей сети; их называют операторами IRC [66] , иногда их сокращают до IRCops или Opers (не путать с операторами каналов). Поскольку реализация IRCd меняется, меняются и привилегии оператора IRC на данном IRCd. RFC 1459 [66] утверждает, что операторы IRC являются «необходимым злом» для поддержания чистого состояния сети, и поэтому они должны иметь возможность отключать и повторно подключать серверы. Кроме того, чтобы предотвратить вход в IRC злонамеренных пользователей или даже вредоносных автоматизированных программ, операторам IRC обычно разрешается отключать клиентов и полностью запрещать IP-адреса или целые подсети. Сети, предоставляющие услуги (NickServ и др.), обычно позволяют своим операторам IRC также решать основные вопросы «владения». Дополнительные привилегированные права могут включать отмену запретов на каналы (возможность присоединяться к каналам, к которым вам не разрешили бы присоединиться, если бы у вас не было доступа), возможность становиться оператором на каналах, где вы не смогли бы этого сделать без доступа, постоянное получение статуса оператора на каналах и т. д.
Маска хоста — это уникальный идентификатор IRC- клиента, подключенного к IRC- серверу . [67] [68] IRC- серверы , службы и другие клиенты, включая ботов , могут использовать его для идентификации конкретного сеанса IRC.
Формат маски хоста: nick!user@host
. Маска хоста похожа на адрес электронной почты , но ее не следует путать с ним .
Часть никнейма — это выбранный пользователем никнейм, который может быть изменен во время подключения. Часть пользователя — это имя пользователя, сообщенное ident на клиенте. [69] Если ident недоступен на клиенте, используется имя пользователя, указанное при подключении клиента, с префиксом в виде тильды . [70]
Часть хоста — это имя хоста, с которого подключается клиент. Если IP-адрес клиента не может быть преобразован сервером в допустимое имя хоста , он используется вместо имени хоста.
Из-за последствий для конфиденциальности раскрытия IP-адреса или имени хоста клиента некоторые демоны IRC также предоставляют функции конфиденциальности, такие как режим InspIRCd или UnrealIRCd "+x". Это хэширует IP-адрес клиента или маскирует часть имени хоста клиента, делая его нечитаемым для пользователей, отличных от IRCops. Пользователи также могут иметь возможность запросить "виртуальный хост" (или "vhost"), который будет отображаться в маске хоста, чтобы обеспечить дополнительную анонимность. Некоторые сети IRC, такие как Libera Chat или Freenode , используют их в качестве "маскировок", чтобы указать, что пользователь связан с группой или проектом. [71]
Существует три предварительно признанных схемы унифицированного идентификатора ресурса (URI) для Internet Relay Chat: irc
, ircs
, и irc6
. [72] Если они поддерживаются, они допускают гиперссылки различных форм, включая
irc://<хост>[:<порт>]/[<канал>[?<ключевое_слово_канала>]]ircs://<хост>[:<порт>]/[<канал>[?<ключевое_слово_канала>]]irc6://<хост>[:<порт>]/[<канал>[?<ключевое_слово_канала>]]
(где элементы, заключенные в скобки ([,]), являются необязательными) для использования (при необходимости) для подключения к указанному хосту (или сети, если она известна клиенту IRC) и присоединения к указанному каналу. [73] (Это можно использовать в самом клиенте или из другого приложения, например веб-браузера). irc — это URI по умолчанию, irc6 указывает на соединение, которое будет установлено с использованием IPv6, а ircs указывает на защищенное соединение.
Согласно спецификации, обычный символ решетки (#) будет добавлен к именам каналов, которые начинаются с буквенно-цифрового символа, что позволяет его опустить. Некоторые реализации (например, mIRC) будут делать это безоговорочно, что приведет к (обычно непреднамеренному) дополнительному символу (например, ##channel), если он включен в URL.
Некоторые реализации позволяют указывать несколько каналов, разделенных запятыми. [74]
Проблемы в первоначальной конструкции IRC заключались в объеме общих данных о состоянии [75] [76] , что ограничивало его масштабируемость, [77] отсутствии уникальной идентификации пользователей, что приводило к проблеме конфликта псевдонимов, [78] отсутствии защиты от сетевых разделений с помощью циклической маршрутизации, [79] [80] компромиссе между масштабируемостью и получением информации о присутствии пользователя в реальном времени, [81] слабостях протокола, создающих платформу для злоупотреблений, [82] отсутствии прозрачной и оптимизируемой передачи сообщений, [83] и отсутствии шифрования. [84] Некоторые из этих проблем были решены в Modern IRC .
Поскольку соединения IRC могут быть незашифрованными и обычно длятся долгое время, они являются привлекательной целью для DoS/DDoS-атак и хакеров . Из-за этого необходима тщательная политика безопасности, чтобы гарантировать, что сеть IRC не подвержена атакам, таким как война за поглощение . Сети IRC также могут содержать пользователей или серверы K-line или G-line , которые оказывают вредное воздействие.
Некоторые серверы IRC поддерживают соединения SSL/TLS в целях безопасности. Это помогает остановить использование программ- анализаторов пакетов для получения паролей пользователей IRC, но малопригодно за пределами этой области из-за публичной природы каналов IRC. Для соединений SSL требуется поддержка как клиента, так и сервера (что может потребовать от пользователя установки двоичных файлов SSL и специальных исправлений или модулей для клиента IRC на своих компьютерах). Некоторые сети также используют SSL для соединений сервер-сервер и предоставляют специальный флаг канала (например, +S
), чтобы разрешить только пользователям, подключенным по SSL, на канале, при этом запрещая идентификацию оператора в открытом виде, чтобы лучше использовать преимущества, предоставляемые SSL. [85] [86]
IRC послужил ранней лабораторией для многих видов интернет-атак, таких как использование поддельных сообщений ICMP о недоступности для разрыва соединений IRC на основе TCP ( нуклеаризация ) с целью досадить пользователям или облегчить захват .
Одной из самых спорных технических проблем, связанных с реализациями IRC, которая сохранилась до наших дней, является преимущество протоколов «Nick/Channel Delay» и «Timestamp». Оба метода существуют для решения проблемы атак типа «отказ в обслуживании», но используют совершенно разные подходы. Проблема с исходным протоколом IRC в том виде, в котором он был реализован, заключалась в том, что когда два сервера разделялись и снова присоединялись, две стороны сети просто объединяли свои каналы. Если пользователь мог присоединиться к «разделенному» серверу, где канал, который существовал на другой стороне сети, был пуст, и получить статус оператора, он становился оператором канала «объединенного» канала после завершения netsplit ; если пользователь брал псевдоним, который существовал на другой стороне сети, сервер убивал обоих пользователей при повторном присоединении («коллизия псевдонимов»). Это часто использовалось для «массового уничтожения» всех пользователей на канале, тем самым создавая каналы «без операторов», где не было операторов, которые могли бы справиться со злоупотреблениями. Помимо возникновения проблем в IRC, это подтолкнуло людей к проведению атак типа «отказ в обслуживании» против серверов IRC с целью вызвать сетевые разделения , которыми они затем злоупотребляли.
Стратегии задержки ника (ND) и задержки канала (CD) направлены на предотвращение злоупотреблений путем задержки повторных подключений и переименований. После того, как пользователь выходит из системы и псевдоним становится доступным, или канал прекращает свое существование, поскольку все его пользователи разъединяются (как часто случается во время netsplit ), сервер не позволит ни одному пользователю использовать этот псевдоним или присоединиться к этому каналу, пока не пройдет определенный период времени ( задержка ). Идея заключается в том, что даже если происходит netsplit , он бесполезен для злоумышленника, поскольку он не может взять псевдоним или получить статус оператора на канале, и, таким образом, не может произойти никакого столкновения псевдонима или «слияния» каналов. В некоторой степени это доставляет неудобства законным пользователям, которые могут быть вынуждены на короткое время использовать другое имя после повторного присоединения (добавление подчеркивания популярно).
Протокол временных меток является альтернативой задержкам ника/канала, который разрешает коллизии с использованием приоритета временных меток. Каждому нику и каналу в сети назначается временная метка — дата и время его создания. Когда происходит netsplit, два пользователя с каждой стороны могут свободно использовать один и тот же ник или канал, но когда две стороны объединяются, выжить может только один. В случае с никами новый пользователь, согласно его TS, уничтожается; когда канал сталкивается, участники (пользователи на канале) объединяются, но операторы канала на «проигравшей» стороне разделения теряют свой статус оператора канала.
TS — гораздо более сложный протокол, чем ND/CD, как по конструкции, так и по реализации, и, несмотря на то, что он прошел через несколько ревизий, некоторые реализации все еще имеют проблемы с «рассинхронизацией» (когда два сервера в одной сети не согласны относительно текущего состояния сети) и допускают слишком много снисходительности в том, что разрешено «проигравшей» стороной. Например, в исходных протоколах TS не было защиты от пользователей, устанавливающих запреты или другие режимы в проигравшем канале, которые затем объединялись при повторном присоединении разделения, даже если пользователи, установившие эти режимы, теряли свой статус оператора канала. Некоторые современные IRC-серверы на основе TS также включили некоторую форму ND и/или CD в дополнение к временным меткам в попытке еще больше ограничить злоупотребления.
Большинство сетей сегодня используют подход с временными метками. Разногласия по поводу временных меток и ND/CD привели к тому, что несколько серверов отделились от EFnet и образовали новый IRCnet . После разделения EFnet перешел на протокол TS, в то время как IRCnet использовал ND/CD.
В последних версиях IRCnet ircd, а также ircd, использующих протокол TS6 (включая Charybdis), ND был расширен/заменен механизмом SAVE. Этот механизм назначает каждому клиенту UID при подключении к серверу IRC. Этот ID начинается с цифры, что запрещено в никах (хотя некоторые ircd, а именно IRCnet и InspIRCd, позволяют клиентам переключаться на свой собственный UID в качестве ника).
Если два клиента с одинаковым ником присоединяются с разных сторон netsplit («коллизия ников»), первый сервер, который увидит эту коллизию, заставит обоих клиентов сменить свой ник на свой UID, тем самым спасая обоих клиентов от отключения. В IRCnet ник также будет заблокирован на некоторое время (ND), чтобы не дать обоим клиентам вернуться к исходному нику, тем самым снова столкнувшись.
Клиентское программное обеспечение существует для различных операционных систем или программных пакетов, а также веб-игр или игр внутри. Доступно множество различных клиентов для различных операционных систем, включая Windows , Unix и Linux , macOS и мобильные операционные системы (такие как iOS и Android ). В Windows mIRC является одним из самых популярных клиентов. [87] Некоторые дистрибутивы Linux поставляются с предустановленным клиентом IRC, например, Linux Mint , который поставляется с предустановленным HexChat .
Некоторые программы, расширяемые с помощью плагинов, также служат платформами для клиентов IRC. Например, клиент ERC , полностью написанный на Emacs Lisp , включен в версию Emacs 22.3. Таким образом, любая платформа, на которой может работать Emacs, может работать с ERC.
Ряд веб-браузеров имеют встроенные IRC-клиенты, например:
Веб-клиенты, такие как Mibbit и KiwiIRC с открытым исходным кодом, могут работать в большинстве браузеров.
Такие игры, как War§ow , [88] Unreal Tournament (до Unreal Tournament 2004 ), [89] Uplink , [90] Игры на основе Spring Engine , 0 AD и ZDaemon включают IRC. [91]
Интерфейс чата Ustream — это IRC с пользовательской аутентификацией [92] , как и у Twitch (ранее Justin.tv). [93] [94]
Типичное использование ботов в IRC — предоставление услуг IRC или определенных функций в канале, например, для размещения чат-игры или предоставления уведомлений о внешних событиях. Однако некоторые боты IRC используются для запуска вредоносных атак, таких как отказ в обслуживании, спам или эксплуатация. [95]
Программа, которая работает как демон на сервере и функционирует как постоянный прокси , известна как BNC или bouncer. Целью является поддержание соединения с IRC-сервером, выступая в качестве ретранслятора между сервером и клиентом или просто выступая в качестве прокси. [ необходима цитата ] Если клиент теряет сетевое подключение, BNC может оставаться подключенным и архивировать весь трафик для последующей доставки, позволяя пользователю возобновить свой сеанс IRC, не прерывая своего соединения с сервером. [96]
Кроме того, как способ получения эффекта баунсера, клиент IRC (обычно текстовый , например Irssi ) может быть запущен на постоянно включенном сервере, к которому пользователь подключается через ssh . Это также позволяет устройствам, которые имеют только функциональность ssh, но не устанавливают фактический клиент IRC, подключаться к IRC, и это позволяет совместно использовать сеансы IRC. [97]
Чтобы клиент IRC не выходил из системы при закрытии соединения ssh, клиент может быть запущен внутри терминального мультиплексора, такого как GNU Screen или tmux , таким образом оставаясь постоянно подключенным к сетям IRC и имея возможность регистрировать разговоры в каналах, которые интересуют пользователя, или поддерживать присутствие канала в сети. Смоделированный по этой схеме, в 2004 году был запущен клиент IRC, следующий за клиентом-сервером , названный Smuxi . [98] [99]
Существует множество поисковых систем, помогающих пользователю найти то, что он ищет в IRC. [100] [101] Обычно поисковая система состоит из двух частей: «бэк-энд» (или «паук/краулер») и фронт-энд «поисковая система».
Бэк-энд (паук/веб-краулер) — это рабочая лошадка поисковой системы. Он отвечает за обход IRC-серверов для индексации отправляемой через них информации. Индексируемая информация обычно состоит исключительно из текста канала (текста, который публично отображается в публичных каналах). Методом хранения обычно является некая реляционная база данных, например MySQL или Oracle . [ требуется цитата ]
Front-end "поисковая система" — это пользовательский интерфейс к базе данных. Она предоставляет пользователям способ поиска в базе данных индексированной информации для извлечения данных, которые они ищут. Эти front-end поисковые системы также могут быть закодированы на многочисленных языках программирования.
Большинство поисковых систем имеют собственного паука, который является отдельным приложением, отвечающим за сканирование IRC и индексацию данных; однако, другие являются индексаторами «на основе пользователя». Последние полагаются на то, что пользователи устанавливают свои «надстройки» к своим IRC-клиентам; надстройка — это то, что отправляет в базу данных информацию о каналах, на которых находится пользователь. [ необходима цитата ]
Многие пользователи внедрили свои собственные поисковые системы ad hoc, используя функции регистрации, встроенные во многие клиенты IRC. Эти поисковые системы обычно реализованы как боты и предназначены для определенного канала или группы связанных каналов.
В IRC до сих пор нет единого общепринятого стандарта для передачи символов за пределами 7-битного репертуара ASCII . Обычно серверы IRC [ требуется разъяснение ] передают сообщения от клиента к другому клиенту просто как последовательности байтов, без какой-либо интерпретации или перекодировки символов . В протоколе IRC (в отличие, например, от MIME или HTTP ) отсутствуют механизмы для объявления и согласования вариантов кодировки символов. Это возложило ответственность за выбор подходящего кодека символов на клиента. На практике каналы IRC в основном использовали те же кодировки символов, которые также использовались операционными системами (в частности, производными Unix ) в соответствующих языковых сообществах:
Сегодня кодировка UTF-8 Unicode / ISO 10646 была бы наиболее вероятным претендентом на единую будущую стандартную кодировку символов для всех коммуникаций IRC, если такой стандарт когда-либо ослабит ограничение на размер сообщения в 510 байт. UTF-8 совместима с ASCII и охватывает надмножество всех других общепринятых стандартов кодированных наборов символов .
Подобно обычному обмену файлами P2P , пользователи могут создавать файловые серверы, которые позволяют им обмениваться файлами друг с другом, используя настроенные IRC-боты или скрипты для своего IRC-клиента . Часто пользователи объединяются для распространения warez через сеть IRC-ботов. [102]
Технически IRC не предоставляет механизмов передачи файлов ; обмен файлами осуществляется клиентами IRC , как правило, с использованием протокола Direct Client-to-Client (DCC), в котором передача файлов осуществляется посредством обмена личными сообщениями между клиентами. Подавляющее большинство клиентов IRC поддерживают передачу файлов DCC, отсюда и мнение, что обмен файлами является неотъемлемой функцией IRC. [103] Однако обычное использование этого протокола иногда также приводит к спаму DCC. Команды DCC также использовались для эксплуатации уязвимых клиентов с целью выполнения таких действий, как отключение от сервера или выход из клиента.
не испытывал всего этого. Я нашел информацию в разных местах и получил информацию от разных людей, чтобы написать это. Люди, которые помогли мне с этим, включают: Грег "wumpus" Линдаль, Веса "vesa" Руоконен, Джеймс Нг, Туомас Хейно, Ричард (eagle`s on undernet), Ари Леммке
Open Proxy Monitor, который был предоставлен сетью Blitzed IRC, был выключен... База данных была настолько большой, что для команды практически невозможно сделать резервную копию или найти новое место для продолжения обслуживания. К тому же, у большинства членов команды больше нет времени, чтобы поддерживать обслуживание в рабочем состоянии.
Рабочая группа IRCv3 — это группа авторов клиентского и серверного программного обеспечения IRC, работающих над улучшением, поддержкой и стандартизацией протокола IRC с использованием обратно совместимых расширений.
В крупных сетях, таких как «большая четверка» — EFnet, IRCnet, Undernet и DALnet — попытка составить список тысяч каналов с помощью Ircle всегда приводит к отключению из-за потока информации, в то время как другие клиенты обычно справляются с этой задачей, если вы используете прямое соединение Ethernet.
Сегодня существуют сотни независимых сетей IRC, но «большая четверка» — это EFNet, UnderNet, Dalnet и IRCnet.
Существует несколько крупных сетей: EFnet, UnderNET, DALnet и IRCnet составляют «большую четверку».
Крупнейшие сети традиционно объединяются в «Большую четверку»: EFNet, IrcNet, QuakeNet и UnderNet.
mIRC — один из самых популярных клиентов Windows IRC.