IRC ( Internet Relay Chat ) es un sistema de chat basado en texto para mensajería instantánea . IRC está diseñado para la comunicación grupal en foros de discusión, llamados canales , [1] pero también permite la comunicación uno a uno a través de mensajes privados [2], así como chat y transferencia de datos , [3] incluido el intercambio de archivos . [4]
Internet Relay Chat se implementa como un protocolo de capa de aplicación para facilitar la comunicación en forma de texto. El proceso de chat funciona según un modelo de red cliente-servidor . Los usuarios se conectan mediante un cliente (que puede ser una aplicación web , un programa de escritorio independiente o integrado en parte de un programa más grande) a un servidor IRC, que puede ser parte de una red IRC más grande. Ejemplos de programas utilizados para conectarse incluyen Mibbit , IRCCloud , KiwiIRC y mIRC .
El uso de IRC ha ido disminuyendo constantemente desde 2003, perdiendo el 60 por ciento de sus usuarios. [5] En abril de 2011, las 100 principales redes IRC prestaban servicios a más de 200.000 usuarios a la vez. [6]
IRC fue creado por Jarkko Oikarinen en agosto de 1988 para reemplazar un programa llamado MUT (MultiUser Talk) en un BBS llamado OuluBox en la Universidad de Oulu en Finlandia , donde trabajaba en el Departamento de Ciencias de Procesamiento de la Información. Jarkko tenía la intención de ampliar el software BBS que administraba para permitir noticias al estilo Usenet , discusiones en tiempo real y funciones BBS similares. La primera parte que implementó fue la parte del chat, que hizo con partes prestadas escritas por sus amigos Jyrki Kuoppala y Jukka Pihl. La primera red IRC se ejecutaba en un único servidor llamado tolsun.oulu.fi. [7] Oikarinen se inspiró en un sistema de chat conocido como Bitnet Relay , que operaba en BITNET . [8]
Jyrki Kuoppala presionó a Oikarinen para que pidiera a la Universidad de Oulu que liberara el código IRC para que también pudiera ejecutarse fuera de Oulu, y cuando finalmente lo liberaron, Jyrki Kuoppala instaló inmediatamente otro servidor. Esta fue la primera "red IRC". Oikarinen consiguió que algunos amigos de la Universidad de Helsinki y la Universidad de Tampere comenzaran a ejecutar servidores IRC cuando su número de usuarios aumentó y pronto otras universidades le siguieron. En ese momento, Oikarinen se dio cuenta de que el resto de las funciones de BBS probablemente no encajarían en su programa. [7]
Oikarinen se puso en contacto con personas de la Universidad de Denver y la Universidad Estatal de Oregón . Tenían su propia red IRC en funcionamiento y querían conectarse a la red finlandesa. Obtuvieron el programa de uno de los amigos de Oikarinen, Vijay Subramaniam, la primera persona no finlandesa en utilizar IRC. Luego, IRC creció y se utilizó en toda la red nacional finlandesa ( FUNET ) y luego se conectó a Nordunet , la rama escandinava de Internet. En noviembre de 1988, el IRC se había extendido por Internet y, a mediados de 1989, había unos 40 servidores en todo el mundo. [7]
En agosto de 1990 se produjo el primer gran desacuerdo en el mundo del IRC. La "A-net" (Anarchy net) incluía un servidor llamado eris.berkeley.edu. Todo estaba abierto, no requería contraseñas y no tenía límite en el número de conexiones. Como explica Greg "wumpus" Lindahl: [9] "tenía una línea de servidor comodín, por lo que la gente conectaba servidores y hacía colisiones con todos". La "Red Libre de Eris", EFnet , convirtió a la máquina eris en la primera en tener la línea Q (Q de cuarentena) de IRC. En palabras de wumpus nuevamente: [9] "Eris se negó a eliminar esa línea, así que formé EFnet. No fue una gran pelea; conseguí que todos los centros se unieran y casi todos los demás se dejaron llevar". A-net se formó con los servidores eris, mientras que EFnet se formó con servidores que no son eris. La historia mostró que la mayoría de los servidores y usuarios optaron por EFnet. Una vez que A-net se disolvió, el nombre EFnet dejó de tener sentido y una vez más fue la única red IRC. [7]
Por esa época se utilizó IRC para informar sobre el intento de golpe de estado soviético de 1991 durante un apagón mediático . [10] Anteriormente se utilizó de manera similar durante la Guerra del Golfo . [11] Los registros de chat de estos y otros eventos se guardan en el archivo de ibiblio . [12]
Otro esfuerzo de bifurcación, el primero que marcó una diferencia duradera, fue iniciado por "Wildthang" en los Estados Unidos en octubre de 1992 (se bifurcó de la versión 2.8.10 de EFnet ircd). Estaba destinada a ser sólo una red de prueba para desarrollar bots, pero rápidamente creció hasta convertirse en una red "para amigos y sus amigos". En Europa y Canadá se estaba trabajando en una nueva red separada y en diciembre los servidores franceses se conectaron a los canadienses, y a finales de mes, la red francesa y canadiense se conectó a la estadounidense, formando la red que luego vino. que se llamará "The Undernet ". [7]
Los "undernetters" querían llevar ircd más lejos en un intento de hacerlo usar menos ancho de banda y tratar de solucionar el caos de canales ( netsplits y adquisiciones ) que EFnet comenzó a sufrir. Para este último propósito, Undernet implementó marcas de tiempo, nuevas rutas y ofreció CService, un programa que permitía a los usuarios registrar canales y luego intentaba protegerlos de los alborotadores. La primera lista de servidores presentada, del 15 de febrero de 1993, incluye servidores de Estados Unidos, Canadá, Francia, Croacia y Japón. El 15 de agosto, el nuevo récord de recuento de usuarios se estableció en 57 usuarios. [7]
En mayo de 1993, se publicó RFC 1459 [13] y detalla un protocolo simple para operación cliente/servidor, canales, conversaciones uno a uno y uno a muchos. [7] Un número significativo de extensiones como CTCP, colores y formatos no están incluidos en las especificaciones del protocolo, ni tampoco la codificación de caracteres, [14] lo que llevó a que varias implementaciones de servidores y clientes divergieran. La implementación de software varió significativamente de una red a otra, cada red implementó sus propias políticas y estándares en sus propias bases de código.
Durante el verano de 1994, Undernet se bifurcó. La nueva red se llamó DALnet (el nombre de su fundador: dalvenjah), creada para un mejor servicio al usuario y más protección para el usuario y el canal. Uno de los cambios más significativos en DALnet fue el uso de apodos más largos (el límite original del ircd era de 9 letras). Las modificaciones de DALnet ircd fueron realizadas por Alexei "Lefler" Kosut. Por tanto, DALnet se basó en el servidor ircd de Undernet, aunque los pioneros de DALnet abandonaron EFnet. Según James Ng, la gente inicial de DALnet era "operadores en #StarTrek enfermos por las constantes divisiones/retrasos/adquisiciones/etc". [7]
DALnet ofreció rápidamente WallOps globales (mensajes IRCop que pueden ser vistos por usuarios que son +w (/mode NickName +w)), apodos más largos, apodos Q:Lined (apodos que no se pueden usar, es decir, ChanServ, IRCop, NickServ, etc.) , K:Lines global (prohibición de una persona o un dominio completo desde un servidor o toda la red), comunicaciones exclusivas de IRCop: GlobOps, modo +H que muestra que un IRCop es un "helpop", etc. Muchas de las nuevas funciones de DALnet fueron escritas a principios de 1995 por Brian "Morpher" Smith y permite a los usuarios poseer apodos, controlar canales, enviar notas y más. [7]
En julio de 1996, después de meses de guerras incendiarias y discusiones en la lista de correo, hubo otra división debido al desacuerdo sobre cómo debería evolucionar el desarrollo del ircd. En particular, el lado "europeo" (la mayoría de esos servidores estaban en Europa) que más tarde se denominó IRCnet abogó por retrasos en los nicks y canales, mientras que el lado EFnet abogó por las marcas de tiempo. [7] También hubo desacuerdos sobre las políticas: la parte europea había comenzado a establecer un conjunto de reglas que dirigían lo que los IRCops podían y no podían hacer, un punto de vista al que se oponía la parte estadounidense. [15]
La mayoría (no todos) de los servidores IRCnet estaban en Europa, mientras que la mayoría de los servidores EFnet estaban en Estados Unidos. Este evento también se conoce como "La Gran División" en muchas sociedades del IRC. Desde entonces (hasta agosto de 1998), EFnet ha crecido y superado el número de usuarios que tenía entonces. En el otoño (norte) del año 2000, EFnet tenía unos 50.000 usuarios e IRCnet 70.000. [7]
IRC ha cambiado mucho a lo largo de su vida en Internet. El nuevo software de servidor ha agregado una multitud de características nuevas.
A partir de 2016 [actualizar], se está llevando a cabo un nuevo esfuerzo de estandarización en el marco de un grupo de trabajo llamado IRCv3, que se centra en funciones de cliente más avanzadas, como notificaciones instantáneas, mejor soporte de historial y seguridad mejorada. [19] A partir de 2019 [actualizar], ninguna red IRC importante ha adoptado completamente el estándar propuesto. [20]
En junio de 2021, [actualizar]se sabe que hay 481 redes IRC diferentes en funcionamiento, [21] de las cuales la de código abierto Libera Chat , fundada en mayo de 2021, tiene la mayor cantidad de usuarios, con 20,374 canales en 26 servidores; entre ellas, las 100 principales redes IRC comparten más de 100 mil canales que operan en alrededor de mil servidores. [22]
Después de su época dorada durante la década de 1990 y principios de la década de 2000 (240.000 usuarios en QuakeNet en 2004), IRC ha experimentado un descenso significativo, perdiendo alrededor del 60% de los usuarios entre 2003 y 2012, y los usuarios se trasladaron a plataformas de redes sociales como Facebook o Twitter . [5] sino también a plataformas abiertas como XMPP , desarrollada en 1999. Algunas redes, como Freenode , no han seguido la tendencia general y han más que cuadriplicado su tamaño durante el mismo período. [5] Sin embargo, Freenode, que en 2016 tenía alrededor de 90.000 usuarios, desde entonces ha disminuido a unos 9.300 usuarios. [23]
Las redes IRC más grandes se han agrupado tradicionalmente como las "Cuatro Grandes" [24] [25] [26] [27] , una designación para las redes que encabezan las estadísticas. Las cuatro grandes redes cambian periódicamente, pero debido a la naturaleza comunitaria de IRC, hay una gran cantidad de otras redes entre las que los usuarios pueden elegir.
Históricamente, los "Cuatro Grandes" fueron: [24] [25] [26]
IRC alcanzó 6 millones de usuarios simultáneos en 2001 y 10 millones de usuarios en 2004-2005, cayendo a alrededor de 350.000 en 2021. [ cita necesaria ]
Las 100 principales redes IRC tienen alrededor de 230.000 usuarios conectados en las horas pico. [28]
Cronología de los principales servidores:
IRC es un protocolo abierto que utiliza TCP [13] y, opcionalmente, TLS . Un servidor IRC puede conectarse a otros servidores IRC para expandir la red IRC. [29] Los usuarios acceden a las redes IRC conectando un cliente a un servidor. [30] Hay muchas implementaciones de cliente, como mIRC , HexChat e irssi , e implementaciones de servidor, por ejemplo, el IRCd original . La mayoría de los servidores IRC no requieren que los usuarios registren una cuenta, pero se requiere un apodo antes de conectarse. [31]
IRC era originalmente un protocolo de texto plano [13] (aunque luego se amplió), al que, previa solicitud, la IANA le asignó el puerto 194/TCP . [32] Sin embargo, el estándar de facto siempre ha sido ejecutar IRC en 6667/TCP [33] y números de puerto cercanos (por ejemplo, puertos TCP 6660–6669, 7000) [34] para evitar tener que ejecutar el software IRCd con root privilegios .
El protocolo especificaba que los caracteres eran de 8 bits, pero no especificaba la codificación de caracteres que debía utilizar el texto. [14] Esto puede causar problemas cuando los usuarios que utilizan diferentes clientes y/o diferentes plataformas quieren conversar.
Todos los protocolos IRC de cliente a servidor que se utilizan hoy en día descienden del protocolo implementado en la versión irc2.4.0 del servidor IRC2 y están documentados en RFC 1459. Desde que se publicó RFC 1459, las nuevas características en la implementación irc2.10 llevaron a la publicación de varios documentos de protocolo revisados (RFC 2810, RFC 2811, RFC 2812 y RFC 2813); sin embargo, estos cambios de protocolo no se han adoptado ampliamente entre otras implementaciones. [ cita necesaria ]
Aunque se han publicado muchas especificaciones sobre el protocolo IRC, no existe ninguna especificación oficial, ya que el protocolo sigue siendo dinámico. Prácticamente ningún cliente y muy pocos servidores se basan estrictamente en los RFC anteriores como referencia. [ cita necesaria ]
Microsoft creó una extensión para IRC en 1998 a través del propietario IRCX . [35] Más tarde dejaron de distribuir software compatible con IRCX y en su lugar desarrollaron el MSNP propietario .
La estructura estándar de una red de servidores IRC es un árbol . [36] Los mensajes se enrutan solo a lo largo de las ramas necesarias del árbol, pero el estado de la red se envía a cada servidor [37] y generalmente existe un alto grado de confianza implícita entre servidores. Sin embargo, esta arquitectura tiene una serie de problemas. Un servidor malicioso o que se comporta mal puede causar daños importantes a la red [38] y cualquier cambio en la estructura, ya sea intencional o como resultado de las condiciones de la red subyacente, requiere una división y unión de red. Esto da como resultado una gran cantidad de tráfico de red y mensajes falsos de salida/unión a los usuarios [39] y pérdida temporal de comunicación con los usuarios en los servidores divididos. Agregar un servidor a una red grande significa una gran carga de ancho de banda en segundo plano en la red y una gran carga de memoria en el servidor. Sin embargo, una vez establecido, cada mensaje a múltiples destinatarios se entrega de manera similar a la multidifusión , lo que significa que cada mensaje viaja por un enlace de red exactamente una vez. [40] Esta es una ventaja en comparación con los protocolos que no son de multidifusión, como el Protocolo simple de transferencia de correo (SMTP) [ cita necesaria ] o el Protocolo extensible de mensajería y presencia (XMPP) [ cita necesaria ] .
Se puede utilizar un demonio IRC en una red de área local (LAN). Por tanto, IRC se puede utilizar para facilitar la comunicación entre personas dentro de la red de área local (comunicación interna). [41] [42]
IRC tiene una estructura basada en líneas. Los clientes envían mensajes de una sola línea al servidor, [43] reciben respuestas a esos mensajes [44] y reciben copias de algunos mensajes enviados por otros clientes. En la mayoría de los clientes, los usuarios pueden ingresar comandos precediéndolos con un '/'. Dependiendo del comando, estos pueden ser manejados completamente por el cliente o (generalmente para comandos que el cliente no reconoce) pasados directamente al servidor, posiblemente con alguna modificación. [45]
Debido a la naturaleza del protocolo, los sistemas automatizados no siempre pueden emparejar correctamente un comando enviado con su respuesta con total fiabilidad y están sujetos a conjeturas. [46]
El medio básico para comunicarse con un grupo de usuarios en una sesión IRC establecida es a través de un canal . [47] Los canales en una red se pueden mostrar usando el comando IRC LIST , [48] que enumera todos los canales actualmente disponibles que no tienen los modos +s o +p configurados, en esa red en particular.
Los usuarios pueden unirse a un canal usando el comando JOIN , [49] en la mayoría de los clientes disponible como /join #channelname . Los mensajes enviados a los canales unidos se transmiten a todos los demás usuarios. [47]
Los canales que están disponibles en toda una red IRC tienen el prefijo '#', mientras que los locales de un servidor usan '&'. [50] Otros tipos de canales menos comunes incluyen canales '+' (canales 'sin modelo' sin operadores [51] ) y '!' canales, una forma de canal con marca de tiempo en redes que normalmente no tienen marca de tiempo. [52]
Los usuarios y canales pueden tener modos representados por letras individuales que distinguen entre mayúsculas y minúsculas [53] y se configuran mediante el comando MODE . [54] Los modos de usuario y los modos de canal están separados y pueden usar la misma letra para significar cosas diferentes (por ejemplo, el modo de usuario "i" es un modo invisible mientras que el modo de canal "i" es solo por invitación. [55] ) Los modos generalmente se activan y desactivan usando el comando de modo que toma un objetivo (usuario o canal), un conjunto de modos para armar (+) o desarmar (-) y cualquier parámetro que los modos necesiten.
Algunos modos de canal toman parámetros y otros modos de canal se aplican a un usuario en un canal o agregan o eliminan una máscara (por ejemplo, una máscara de prohibición) de una lista asociada con el canal en lugar de aplicarse al canal en su conjunto. [56] Los modos que se aplican a los usuarios en un canal tienen un símbolo asociado que se usa para representar el modo en las respuestas de nombres [57] (enviadas a los clientes al unirse por primera vez a un canal [49] y usar el comando de nombres) y en muchos Los clientes también solían representarlo en la lista de usuarios mostrada por el cliente en un canal o para mostrar un indicador propio para los modos de un usuario.
Para analizar correctamente los mensajes de modo entrante y rastrear el estado del canal, el cliente debe saber qué modo es de qué tipo y, para los modos que se aplican a un usuario en un canal, qué símbolo va con qué letra. En las primeras implementaciones de IRC, esto tenía que estar codificado en el cliente, pero ahora existe una extensión estándar de facto para el protocolo llamada ISUPPORT que envía esta información al cliente en el momento de la conexión utilizando el número 005. [58] [59]
Hay una pequeña falla de diseño en IRC con respecto a los modos que se aplican a los usuarios en los canales: el mensaje de nombres utilizado para establecer el estado inicial del canal solo puede enviar un modo por usuario en el canal, [57] pero se pueden configurar múltiples modos en un mismo canal. usuario único. Por ejemplo, si un usuario tiene tanto el estado de operador (+o) como el estado de voz (+v) en un canal, un nuevo cliente no podrá ver el modo con menos prioridad (es decir, voz). Son posibles soluciones para esto tanto en el lado del cliente como en el del servidor; una solución común es utilizar la extensión "multiprefijo" IRCv3. [60]
Muchos demonios y redes han agregado modos adicionales o modificado el comportamiento de los modos en la lista anterior. [62] [63] [64] [65]
Un operador de canal es un cliente en un canal IRC que administra el canal. Los operadores de canales IRC se pueden ver fácilmente por el símbolo o ícono al lado de su nombre (varía según la implementación del cliente, comúnmente un prefijo de símbolo "@", un círculo verde o una letra latina "+o"/"o"). En la mayoría de las redes, un operador puede:
También hay usuarios que mantienen derechos elevados en su servidor local o en toda la red; estos se denominan operadores IRC, [66] a veces abreviados como IRCops u Opers (no confundir con operadores de canal). A medida que la implementación del IRCd varía, también lo hacen los privilegios del operador de IRC en el IRCd determinado. RFC 1459 [66] afirma que los operadores de IRC son "un mal necesario" para mantener un estado limpio de la red y, como tales, necesitan poder desconectar y volver a conectar servidores. Además, para evitar que usuarios malintencionados o incluso programas automatizados dañinos entren en IRC, los operadores de IRC generalmente pueden desconectar clientes y prohibir completamente direcciones IP o subredes completas. Las redes que transportan servicios (NickServ et al.) generalmente permiten que sus operadores de IRC también manejen asuntos básicos de "propiedad". Otros derechos privilegiados pueden incluir anular las prohibiciones de canales (poder unirse a canales a los que no se les permitiría unirse si no fueran operados), poder operar ellos mismos en canales donde no podrían hacerlo sin ser operados, ser operados automáticamente. en los canales siempre y así sucesivamente.
Una máscara de host es un identificador único de un cliente IRC conectado a un servidor IRC . [67] [68] Los servidores , servicios y otros clientes de IRC , incluidos los bots , pueden usarlo para identificar una sesión de IRC específica.
El formato de una máscara de host es nick!user@host
. La máscara de host es similar a una dirección de correo electrónico , pero no debe confundirse con ella .
La parte del nick es el apodo elegido por el usuario y puede cambiarse mientras está conectado. La parte del usuario es el nombre de usuario informado por ident en el cliente. [69] Si ident no está disponible en el cliente, el nombre de usuario especificado cuando el cliente se conectó se utiliza después de tener el prefijo tilde . [70]
La parte del host es el nombre de host desde el que se conecta el cliente. Si el servidor no puede resolver la dirección IP del cliente en un nombre de host válido , se utiliza en lugar del nombre de host.
Debido a las implicaciones de privacidad de exponer la dirección IP o el nombre de host de un cliente, algunos demonios de IRC también proporcionan funciones de privacidad, como InspIRCd o el modo "+x" de UnrealIRCd. Esto codifica la dirección IP de un cliente o enmascara parte del nombre de host de un cliente, haciéndolo ilegible para usuarios que no sean IRCops. Los usuarios también pueden tener la opción de solicitar un "host virtual" (o "vhost"), que se mostrará en la máscara de host para permitir un mayor anonimato. Algunas redes IRC, como Libera Chat o Freenode , las utilizan como "enmascaramientos" para indicar que un usuario está afiliado a un grupo o proyecto. [71]
Hay tres esquemas de identificador uniforme de recursos (URI) reconocidos provisionalmente para Internet Relay Chat: irc
, ircs
y irc6
. [72] Cuando son compatibles, permiten hipervínculos de diversas formas, incluidos
irc://<host>[:<puerto>]/[<canal>[?<canal_palabra clave>]]ircs://<host>[:<puerto>]/[<canal>[?<canal_palabra clave>]]irc6://<host>[:<puerto>]/[<canal>[?<canal_palabra clave>]]
(donde los elementos entre corchetes ([,]) son opcionales) se utilizarán para (si es necesario) conectarse al host especificado (o red, si el cliente IRC lo conoce) y unirse al canal especificado. [73] (Esto se puede utilizar dentro del propio cliente o desde otra aplicación, como un navegador web). irc es el URI predeterminado, irc6 especifica que se realizará una conexión utilizando IPv6 e ircs especifica una conexión segura.
Según la especificación, el símbolo de almohadilla habitual (#) se antepondrá a los nombres de los canales que comiencen con un carácter alfanumérico , lo que permitirá omitirlo. Algunas implementaciones (por ejemplo, mIRC) lo harán incondicionalmente, lo que dará como resultado un extra (normalmente no intencionado) (por ejemplo, ##canal), si se incluye en la URL.
Algunas implementaciones permiten especificar varios canales, separados por comas. [74]
Los problemas en el diseño original de IRC fueron que la cantidad de datos de estado compartidos [75] [76] era una limitación en su escalabilidad, [77] la ausencia de identificaciones de usuario únicas que conducían al problema de colisión de apodos, [78] la falta de protección contra netsplits mediante enrutamiento cíclico, [79] [80] el compromiso de escalabilidad en aras de la información de presencia del usuario en tiempo real, [81] debilidades del protocolo que proporcionan una plataforma para el abuso, [82] no hay transferencia de mensajes transparente y optimizable , [83] y sin cifrado. [84] Algunas de estas cuestiones se han abordado en Modern IRC .
Debido a que las conexiones IRC pueden no estar cifradas y normalmente abarcan largos períodos de tiempo, son un objetivo atractivo para los atacantes y piratas informáticos DoS/DDoS . Debido a esto, es necesaria una política de seguridad cuidadosa para garantizar que una red IRC no sea susceptible a un ataque como una guerra de adquisición . Las redes IRC también pueden tener un efecto perjudicial para los usuarios o servidores de las líneas K o G.
Algunos servidores IRC admiten conexiones SSL/TLS por motivos de seguridad. Esto ayuda a detener el uso de programas rastreadores de paquetes para obtener las contraseñas de los usuarios de IRC, pero tiene poco uso más allá de este alcance debido a la naturaleza pública de los canales de IRC. Las conexiones SSL requieren soporte tanto del cliente como del servidor (lo que puede requerir que el usuario instale archivos binarios SSL y parches o módulos específicos del cliente IRC en sus computadoras). Algunas redes también utilizan SSL para conexiones de servidor a servidor y proporcionan un indicador de canal especial (como +S
) para permitir solo a los usuarios conectados mediante SSL en el canal, al tiempo que no permiten la identificación del operador en texto claro, para utilizar mejor las ventajas que proporciona SSL. . [85] [86]
IRC sirvió como uno de los primeros laboratorios para muchos tipos de ataques de Internet, como el uso de mensajes ICMP falsos inalcanzables para romper conexiones IRC basadas en TCP ( nuking ) para molestar a los usuarios o facilitar las adquisiciones .
Una de las cuestiones técnicas más polémicas en torno a las implementaciones de IRC, que sobrevive hasta el día de hoy, es el mérito de los protocolos "Nick/Channel Delay" frente a "Timestamp". Ambos métodos existen para resolver el problema de los ataques de denegación de servicio, pero adoptan enfoques muy diferentes. El problema con el protocolo IRC original tal como se implementó fue que cuando dos servidores se dividían y se volvían a unir, los dos lados de la red simplemente fusionaban sus canales. Si un usuario pudiera unirse en un servidor "dividido", donde un canal que existía en el otro lado de la red estaba vacío, y obtener el estatus de operador, se convertiría en operador del canal "combinado" después de que terminara el netsplit ; Si un usuario tomaba un apodo que existía en el otro lado de la red, el servidor mataría a ambos usuarios al volver a unirse (una "colisión de apodos"). A menudo se abusaba de esto para "matar en masa" a todos los usuarios de un canal, creando así canales "opless" donde no había operadores presentes para lidiar con el abuso. Además de causar problemas dentro de IRC, esto animaba a la gente a realizar ataques de denegación de servicio contra servidores de IRC para provocar netsplits , de los que luego abusarían.
Las estrategias de retardo de nick (ND) y retardo de canal (CD) tienen como objetivo evitar el abuso al retrasar las reconexiones y los cambios de nombre. Después de que un usuario cierra sesión y el apodo vuelve a estar disponible, o un canal deja de existir porque todos sus usuarios se separaron (como sucede a menudo durante un netsplit ), el servidor no permitirá que ningún usuario use ese apodo o se una a ese canal, hasta que cierto ha pasado un período de tiempo (el retraso ). La idea detrás de esto es que incluso si ocurre una división de red , es inútil para un abusador porque no puede tomar el apodo ni obtener el estatus de operador en un canal y, por lo tanto, no puede ocurrir ninguna colisión de un apodo o "fusión" de un canal. Hasta cierto punto, esto supone un inconveniente para los usuarios legítimos, que podrían verse obligados a utilizar brevemente un nombre diferente después de volver a unirse (es popular añadir un guión bajo ).
El protocolo de marca de tiempo es una alternativa a los retrasos de nick/canal que resuelve colisiones utilizando prioridad de marca de tiempo. A cada apodo y canal de la red se le asigna una marca de tiempo: la fecha y hora en que se creó. Cuando ocurre una división de red, dos usuarios de cada lado son libres de usar el mismo apodo o canal, pero cuando los dos lados se unen, solo uno puede sobrevivir. En el caso de los apodos, el usuario más nuevo, según su TS, muere; cuando un canal choca, los miembros (usuarios del canal) se fusionan, pero los operadores de canal en el lado "perdedor" de la división pierden su estatus de operador de canal.
TS es un protocolo mucho más complicado que ND/CD, tanto en diseño como en implementación, y a pesar de haber pasado por varias revisiones, algunas implementaciones todavía tienen problemas con "desincronizaciones" (donde dos servidores en la misma red no están de acuerdo sobre el estado actual de la red), y permitiendo demasiada indulgencia en lo que permitía el lado "perdedor". Según los protocolos TS originales, por ejemplo, no había protección contra los usuarios que establecían prohibiciones u otros modos en el canal perdedor que luego se fusionarían cuando la división se volviera a unir, a pesar de que los usuarios que habían establecido esos modos perdieron su estatus de operador de canal. Algunos servidores IRC modernos basados en TS también han incorporado alguna forma de ND y/o CD además de la marca de tiempo en un intento de frenar aún más el abuso.
La mayoría de las redes actuales utilizan el método de marca de tiempo. Los desacuerdos sobre la marca de tiempo versus ND/CD causaron que varios servidores se separaran de EFnet y formaran el IRCnet más nuevo . Después de la división, EFnet pasó a un protocolo TS, mientras que IRCnet usó ND/CD.
En versiones recientes de IRCnet ircd, así como en ircds que utilizan el protocolo TS6 (incluido Charybdis), ND ha sido ampliado/reemplazado por un mecanismo llamado SAVE. Este mecanismo asigna a cada cliente un UID al conectarse a un servidor IRC. Este ID comienza con un número, lo cual está prohibido en los nicks (aunque algunos ircds, concretamente IRCnet e InspIRCd, permiten a los clientes cambiar a su propio UID como apodo).
Si dos clientes con el mismo apodo se unen desde diferentes lados de un netsplit ("colisión de nick"), el primer servidor que vea esta colisión obligará a ambos clientes a cambiar su nick a su UID, evitando así que ambos clientes se desconecten. En IRCnet, el apodo también se bloqueará durante algún tiempo (ND) para evitar que ambos clientes vuelvan a cambiar al apodo original, colisionando así nuevamente.
El software cliente existe para varios sistemas operativos o paquetes de software, así como para juegos internos o basados en la web. Hay muchos clientes diferentes disponibles para los distintos sistemas operativos, incluidos Windows , Unix y Linux , macOS y sistemas operativos móviles (como iOS y Android ). En Windows, mIRC es uno de los clientes más populares. [87] Algunas distribuciones de Linux vienen con un cliente IRC preinstalado, como Linux Mint , que viene con HexChat preinstalado.
Algunos programas que son extensibles mediante complementos también sirven como plataformas para clientes IRC. Por ejemplo, un cliente llamado ERC , escrito íntegramente en Emacs Lisp , está incluido en la versión 22.3 de Emacs. Por lo tanto, cualquier plataforma que pueda ejecutar Emacs puede ejecutar ERC.
Varios navegadores web tienen clientes IRC integrados, como por ejemplo:
Los clientes basados en web, como Mibbit y KiwiIRC de código abierto, pueden ejecutarse en la mayoría de los navegadores.
Juegos como War§ow , [89] Unreal Tournament (hasta Unreal Tournament 2004 ), [90] Uplink , [91] juegos basados en Spring Engine , 0 AD y ZDaemon han incluido IRC. [92]
La interfaz de chat de Ustream es IRC con autenticación personalizada [93], así como la de Twitch (anteriormente Justin.tv). [94] [95]
Un uso típico de los bots en IRC es proporcionar servicios de IRC o funcionalidades específicas dentro de un canal, como albergar un juego basado en chat o proporcionar notificaciones de eventos externos. Sin embargo, algunos bots de IRC se utilizan para lanzar ataques maliciosos como denegación de servicio, spam o explotación. [96]
Un programa que se ejecuta como un demonio en un servidor y funciona como un proxy persistente se conoce como BNC o Bouncer. El propósito es mantener una conexión con un servidor IRC, actuando como un relé entre el servidor y el cliente, o simplemente actuar como un proxy. [ cita necesaria ] Si el cliente pierde la conectividad de la red, el BNC puede permanecer conectado y archivar todo el tráfico para su posterior entrega, lo que permite al usuario reanudar su sesión de IRC sin interrumpir su conexión al servidor. [97]
Además, como forma de obtener un efecto de rebote, se puede ejecutar un cliente IRC (normalmente basado en texto , por ejemplo Irssi ) en un servidor siempre activo al que el usuario se conecta a través de ssh . Esto también permite que los dispositivos que solo tienen funcionalidad ssh, pero que no tienen ningún cliente IRC instalado, se conecten al IRC y permite compartir sesiones de IRC. [98]
Para evitar que el cliente IRC se cierre cuando se cierra la conexión ssh, el cliente puede ejecutarse dentro de un multiplexor de terminal como GNU Screen o tmux , permaneciendo así conectado a las redes IRC constantemente y capaz de registrar conversaciones en canales que el usuario le interesa o mantener la presencia de un canal en la red. Siguiendo el modelo de esta configuración, en 2004 se lanzó un cliente IRC que seguía al cliente-servidor , llamado Smuxi . [99] [100]
Hay numerosos motores de búsqueda disponibles para ayudar al usuario a encontrar lo que busca en IRC. [101] [102] Generalmente, el motor de búsqueda consta de dos partes, un "back-end" (o "spider/crawler") y un "motor de búsqueda" frontal.
El back-end (spider/webcrawler) es el caballo de batalla del motor de búsqueda. Es responsable de rastrear los servidores IRC para indexar la información que se envía a través de ellos. La información que se indexa suele consistir únicamente en texto del canal (texto que se muestra públicamente en canales públicos). El método de almacenamiento suele ser algún tipo de base de datos relacional, como MySQL u Oracle . [ cita necesaria ]
El "motor de búsqueda" frontal es la interfaz de usuario de la base de datos. Proporciona a los usuarios una forma de buscar en la base de datos de información indexada para recuperar los datos que buscan. Estos motores de búsqueda front-end también pueden codificarse en numerosos lenguajes de programación.
La mayoría de los motores de búsqueda tienen su propia araña, que es una aplicación única responsable de rastrear IRC e indexar los datos; sin embargo, otros son indexadores "basados en usuarios". Estos últimos dependen de que los usuarios instalen su "complemento" en su cliente IRC; el complemento es lo que envía a la base de datos la información del canal de cualquier canal en el que se encuentre el usuario. [ cita necesaria ]
Muchos usuarios han implementado sus propios motores de búsqueda ad hoc utilizando las funciones de registro integradas en muchos clientes de IRC. Estos motores de búsqueda suelen implementarse como bots y estar dedicados a un canal concreto o a un grupo de canales asociados.
IRC todavía carece de una convención estándar única aceptada globalmente sobre cómo transmitir caracteres fuera del repertorio ASCII de 7 bits . Los servidores IRC normalmente [ se necesita aclaración ] transfieren mensajes de un cliente a otro cliente simplemente como secuencias de bytes, sin ninguna interpretación o recodificación de caracteres . El protocolo IRC (a diferencia de, por ejemplo, MIME o HTTP ) carece de mecanismos para anunciar y negociar opciones de codificación de caracteres. Esto ha puesto la responsabilidad de elegir el códec de caracteres apropiado en el cliente. En la práctica, los canales IRC han utilizado en gran medida las mismas codificaciones de caracteres que también utilizaban los sistemas operativos (en particular los derivados de Unix ) en las respectivas comunidades lingüísticas:
Hoy en día, la codificación UTF-8 de Unicode / ISO 10646 sería el candidato más probable para una futura codificación de caracteres estándar única para todas las comunicaciones IRC, si dicho estándar alguna vez relajara la restricción de tamaño de mensaje de 510 bytes. UTF-8 es compatible con ASCII y cubre el superconjunto de todos los demás estándares de conjuntos de caracteres codificados de uso común .
Al igual que el intercambio de archivos P2P convencional , los usuarios pueden crear servidores de archivos que les permitan compartir archivos entre sí mediante el uso de scripts o bots de IRC personalizados para su cliente de IRC . A menudo, los usuarios se agrupan para distribuir warez a través de una red de robots IRC. [103]
Técnicamente, IRC no proporciona ningún mecanismo de transferencia de archivos ; El intercambio de archivos lo implementan los clientes de IRC , generalmente utilizando el protocolo Directo de cliente a cliente (DCC), en el que las transferencias de archivos se negocian mediante el intercambio de mensajes privados entre clientes. La gran mayoría de los clientes de IRC cuentan con soporte para transferencias de archivos DCC, de ahí la opinión de que compartir archivos es una característica integral de IRC. [104] Sin embargo, el uso común de este protocolo a veces también genera spam DCC. Los comandos DCC también se han utilizado para explotar a clientes vulnerables para que realicen una acción como desconectarse del servidor o salir del cliente.
No experimenté todo esto. Encontré información de varios lugares y recibí información de varias personas para poder escribir esto. Las personas que me han ayudado con esto incluyen: Greg "wumpus" Lindahl, Vesa "vesa" Ruokonen, James Ng, Tuomas Heino, Richard (eagle`s on undernet), Ari Lemmke
El Open Proxy Monitor proporcionado por la red Blitzed IRC ha sido cerrado... La base de datos era tan grande que es casi imposible para el equipo realizar una copia de seguridad o encontrar una nueva ubicación para continuar con el servicio. Además de eso, la mayoría de los miembros del equipo ya no tienen tiempo para mantener el servicio en funcionamiento.
El Grupo de Trabajo IRCv3 es una colección de autores de software de servidor y cliente de IRC que trabajan para mejorar, mantener y estandarizar el protocolo IRC utilizando extensiones compatibles con versiones anteriores.
En redes grandes como las Cuatro Grandes (EFnet, IRCnet, Undernet y DALnet), intentar enumerar los miles de canales con Ircle siempre provoca que uno se desconecte debido a la avalancha de información, mientras que otros clientes generalmente pueden lograr la hazaña, si usted están en una conexión Ethernet directa.
Hoy en día existen cientos de redes IRC independientes, pero las "Cuatro Grandes" son EFNet, UnderNet, Dalnet e IRCnet.
Hay varias redes grandes: EFnet, UnderNET, DALnet e IRCnet forman las Cuatro Grandes.
Las redes más grandes se han agrupado tradicionalmente como las "Cuatro Grandes": EFNet, IrcNet, QuakeNet y UnderNet.
mIRC es uno de los clientes IRC de Windows más populares.