# Internet Relay Chat

Na informática, o Internet relay chat (conhecido pela abreviação IRC) é um sistema de bate-papo online no formato texto/teletexto comunitário (originalmente protocolo de texto simples), criado em 1988 por Jarkko Oikarinen, que permite discussões entre vários participantes nos chamados "canais de conversação", e conversas entre apenas dois parceiros de forma particular (em diálogos de perguntas e respostas, por exemplo), utilizando o programa de chat chamado "cliente IRC" conectando-se a um servidor IRC. Qualquer participante pode criar um novo canal de conversa e, um único usuário de computador pode, participar de vários canais simultâneos.
Este cliente de conversação pode ser um programa independente no computador local (mIRC e XChat por exemplo) ou ter a forma de uma interface de usuário especial de dentro de um programa maior, como um navegador de Internet. Por exemplo, o navegador Opera inclui um cliente IRC e clientes como o Mibbit, o IRCCloud, o KiwiIRC e o The Lounge Chat do MIT podem funcionar em conexão com muitos navegadores populares.
Uma rede IRC de servidores interconectados que operam como estações de retransmissão é usada para mediar as chamadas no IRC. O recurso essencial desta rede é sua topologia de comunicação BITNET, que permite apenas um caminho de comunicação entre dois participantes. Historicamente, isso garantiu comunicação eficiente porque, nos primeiros dias do IRC, as linhas intercontinentais de dados tinham uma capacidade muito limitada. A topologia permitiu que mensagens de um cliente em um continente não fossem enviadas individualmente para cada cliente em outro continente mas apenas uma vez para um servidor local que então as distribui para os clientes. Apesar das capacidades de gerenciamento limitadas, foram possíveis "paisagens de bate-papo". A desvantagem é a falta de redundância, que se manifesta nos chamados net splits: se algum servidor falha, a rede divide automaticamente as peças separadas até que uma nova conexão seja estabelecida entre as partes.
As maiores redes IRC consistem em várias dezenas de servidores IRC que conectam simultaneamente mais de cem mil usuários e gerenciam dezenas de milhares de canais em que milhares de pessoas podem participar simultaneamente. Apesar dessas enormes proporções, o atraso em um texto enviado é na ordem de décimos de segundo (raramente excede o tempo de um segundo).
A utilização do IRC vem, desde 2003, diminuindo constantemente. Os números apontam uma perda de 60% dos usuários (de 1 milhão em 2003 para cerca de 400 mil em 2021) e mais de metade dos canais (de meio milhão em 2003 para menos de 200 mil em 2021). Em abril de 2011, hospedando centenas de milhares de canais e operando em um total de aproximadamente 1 500 servidores (além de aproximadamente 3 200 servidores IRC em todo o mundo), as 100 principais redes IRC serviam mais de meio milhão de usuários. Em junho de 2021, existiam 481 diferentes redes IRC conhecidas por estarem operando. Dentre tais redes, a Libera Chat de código aberto (fundada em maio de 2021) tem a maioria dos usuários, com 21.348 canais em 15.433 servidores. Também entre elas, as 100 melhores compartilhavam 188.336 canais operando em 96.708 servidores.
Do ponto de vista técnico, o Internet relay chat é implementado como um protocolo de camada de aplicação para facilitar a comunicação na forma de texto. O processo de chat funciona em um modelo de rede cliente-servidor. Conforme já discutido, os clientes IRC podem ser programas de computador autônomos ou aplicativos baseados na web executados localmente no navegador ou em um servidor de terceiros. Esses clientes se comunicam com servidores de chat para transferir mensagens para outros clientes. O IRC é projetado principalmente para comunicação em grupo (em fóruns de discussões chamados de canais) mas também permite comunicação um-para-um por meio de mensagens privadas, bem como bate-papo e transferência de dados (incluindo compartilhamento de arquivos).
O software cliente está disponível para todos os principais sistemas operacionais que oferecem suporte ao acesso à Internet.

## História

O IRC foi criado por Jarkko Oikarinen em agosto de 1988, para substituir um programa chamado MUT (MultiUser Talk) no sistema BBS chamado OuluBox na Universidade de Oulu na Finlândia, onde ele trabalhava no departamento de ciência de processamento de informação. Jarkko pretendia estender o software BBS que administrava, para permitir notícias no estilo Usenet, discussões em tempo real e recursos BBS semelhantes. A primeira parte que ele implementou foi a parte do chat, que ele fez com partes emprestadas escritas por seus amigos Jyrki Kuoppala e Jukka Pihl. A primeira rede IRC estava rodando em um único servidor chamado tolsun.oulu.fi. Oikarinen encontrou inspiração em um sistema de bate-papo conhecido como Bitnet Relay, que operava na BITNET.
Jyrki Kuoppala pressionou Oikarinen para pedir à Universidade de Oulu que liberasse o código do IRC para que ele também pudesse ser executado fora de Oulu e, depois que eles finalmente o liberaram, Jyrki Kuoppala imediatamente instalou outro servidor. Esta foi a primeira "rede IRC". Oikarinen conseguiu que alguns amigos da Universidade de Helsinque e da Universidade de Tampere começassem a rodar servidores IRC quando seu número de usuários aumentou e outras universidades o seguiram. Nesse momento, Oikarinen percebeu que o restante dos recursos do BBS provavelmente não caberiam em seu programa.
Oikarinen entrou em contato com pessoas da Universidade de Denver e da Universidade do Estado de Oregon. Eles tinham sua própria rede IRC funcionando e queriam se conectar à rede finlandesa. Eles haviam obtido o programa de um dos amigos de Oikarinen, Vijay Subramaniam (a primeira pessoa não finlandesa a usar o IRC). O IRC cresceu , foi usado em toda a rede nacional finlandesa (Funet) e então conectado à NORDUnet, a ramificação escandinava da Internet. Em novembro de 1988, o IRC se espalhou pela Internet e, em meados de 1989, haviam cerca de 40 servidores em todo o mundo.

### EFnet

Em agosto de 1990, o primeiro grande desacordo ocorreu no mundo IRC. A "A-net" (rede anarquia) incluía um servidor chamado eris.berkeley.edu. Estava tudo aberto, não exigia senhas e não tinha limite para o número de conexões. Como Greg "wumpus" Lindahl explica: "ela tinha uma linha de servidor curinga, então as pessoas estavam conectando servidores e colidindo com todo mundo". A "Rede Livre Eris" (EFnet) fez a máquina eris ser a primeira do IRC a ser alinhada como Q (Q para quarentena). Nas palavras de wumpus novamente: "Eris se recusou a remover essa linha, então formei a EFnet. Não foi muito difícil, consegui todos os hubs para entrar e quase todo mundo foi levado junto." A A-net foi formada com os servidores eris, enquanto a EFnet foi formada com os servidores não-eris. A história mostra que a maioria dos servidores e usuários usam a EFnet. Assim que a A-net se desfez, o nome EFnet perdeu o sentido e mais uma vez existia uma única rede IRC.
Naquela época, o IRC foi usado para relatar a tentativa de golpe de Estado na União Soviética em 1991 durante um apagão da mídia. Anteriormente, ele havia sido usado de forma semelhante durante a Guerra do Golfo. Registros de bate-papo desses e de outros eventos são mantidos no arquivo ibiblio.

### Bifurcação Undernet

Outra tentativa de bifurcação, a primeira que realmente fez uma grande e duradoura diferença, foi iniciada por "Wildthang" nos Estados Unidos da América em outubro de 1992 (saiu da EFnet ircd versão 2.8.10). Era para ser apenas uma rede de teste para desenvolver bots, mas rapidamente cresceu para uma rede "para amigos e seus amigos". Na Europa e no Canadá uma nova rede separada estava sendo trabalhada e em dezembro os servidores franceses se conectaram aos canadenses. No final do mês, as redes francesa e canadense foram conectadas à dos Estados Unidos da América, formando a que mais tarde veio a ser chamada de "a Undernet".
Os "undernetters" queriam levar o ircd mais longe, na tentativa de torná-lo menos consumidor de largura de banda e tentar resolver o caos de canais (netsplits e takeovers) que a EFnet começou a sofrer. Para o último propósito, a Undernet implementou timestamps, novo roteamento e ofereceu o CService (um programa que permitia aos usuários registrar canais e então tentava protegê-los de criadores de problemas). A primeira lista de servidores apresentada, de 15 de fevereiro de 1993, incluia os servidores dos Estados Unidos da América, do Canadá, da França, da Croácia e do Japão. Em 15 de agosto, o novo registro de contagem de usuários foi estabelecido para 57 usuários.
Em maio de 1993, a RFC 1459 foi publicada e detalhou um protocolo simples para operações de clientes, servidores, canais, conversas um para um e um para muitos. É notável que um número significativo de extensões como o CTCP, as cores, os formatos e a codificação de caracteres não estavam incluídas nas especificações do protocolo e isso levou várias implementações de servidores e clientes à divergências. Na verdade, a implementação do software variava significativamente de uma rede para outra e cada uma delas implementava suas próprias políticas e seus próprios padrões em suas próprias bases de código.

### Bifurcação DALnet

Durante o verão de 1994 a Undernet foi bifurcada e a nova rede, formada para melhor serviço de usuário e mais proteções de usuários e canais, foi chamada de DALnet. Uma das alterações mais significativas nessa nova rede, foi o uso de apelidos mais longos (o limite original do ircd sendo 9 letras). As modificações no ircd foram feitas por Alexei "Lefler" Kosut e a DALnet foi, portanto, baseada no servidor ircd da Undernet (embora os pioneiros da DALnet fossem pessoas que deixaram a EFnet). De acordo com James Ng, os pioneiros da DALnet foram "ops do canal #startrek que estavam cansados de constantes divisões (splits), colisões, atrasos (lags), aquisições (takeovers) e etc".
A DALnet prontamente ofereceu:
* WallOps globais - mensagens de IRCops que podem ser vistas por usuários que são +w,
* apelidos mais longos,
* apelidos "alinhados com Q" - apelidos que não podem ser usados (como ChanServ, IRCop e NickServ, por exemplo),
* "linhas K" globais - para banir uma pessoa ou um domínio inteiro de um servidor ou de toda a rede e
* comunicações somente de IRCops:
** GlobOps,
** modo +H mostrando que um IRCop é um "helpop" e etc.
Muitas das novas funções da DALnet foram escritas por Brian "Morpher" Smith, no início de 1995, e permitem que os usuários possuam apelidos, controlem canais, enviem memorandos e mais.

### Bifurcação IRCnet

Em julho de 1996, após meses de guerras inflamadas e discussões em listas de e-mails, houve outra divisão devido ao desacordo sobre como deveria evoluir o desenvolvimento do ircd. Mais notavelmente, o lado "europeu" (a maioria desses servidores estavam na Europa) que mais tarde se autodenominou IRCnet argumentou sobre atrasos de nick e canal, enquanto o lado EFnet argumentou sobre os timestamps. Também haviam desacordos sobre as políticas: o lado europeu havia começado a estabelecer um conjunto de regras que direcionavam o que os IRCops podiam e não podiam fazer e o lado americano se opôs à tal ponto de vista.
A maioria (não todos) dos servidores IRCnet estavam na Europa e a maioria dos servidores EFnet estavam nos Estados Unidos da América. Este evento também é conhecido como "a grande divisão" em muitas sociedades IRC. A EFnet, desde então (em agosto de 1998), cresceu e ultrapassou o número de usuários que tinha na época. No outono (do norte) de 2000, a EFnet tinha cerca de 50.000 e a IRCnet tinha cerca de 70.000.

### IRC moderno

O IRC mudou muito ao longo de sua vida na Internet. O novo software de servidor adicionou uma infinidade de novos recursos.
* Serviços: bots operados em rede para facilitar o registro de apelidos e canais, envio de mensagens para usuários offline e funções de operador de rede.
* Modos extras: Enquanto o sistema IRC original usava um conjunto de modos de usuário e canal padrão, novos servidores adicionam muitos novos modos para recursos como a remoção de códigos de cores do texto, ou obscurecimento da máscara de host de um usuário ("camuflagem") para proteção contra ataques de negação de serviço.
* Detecção de proxy: a maioria dos servidores modernos oferece suporte à detecção de usuários que tentam se conectar por meio de um servidor proxy inseguro (mal configurado ou explorado), que pode ter a conexão negada. Este software de detecção de proxy é usado por várias redes, embora a lista de proxies em tempo real esteja extinta desde o início de 2006.
* Comandos adicionais: novos comandos podem ser coisas como comandos abreviados para emitir comandos para serviços. Para comandos de operador de rede manipular a máscara de host de um usuário.
* Encriptação: para o trecho cliente-servidor da conexão, o TLS pode ser usado (as mensagens deixam de ser seguras quando são retransmitidas para outros usuários em conexões padrão, mas dificulta a espionagem ou a "escuta" de sessões IRC de um indivíduo). Para a comunicação cliente a cliente, o cliente a cliente direto seguro (SDCC) pode ser usado.
* Protocolo de conexão: é possível conectar-se ao IRC via IPv4, a versão antiga do protocolo de Internet, ou via IPv6, o padrão atual do protocolo.
* Desde 2016, um novo esforço de padronização está em andamento em um grupo de trabalho chamado IRCv3 (que se concentra em recursos mais avançados de cliente, como notificações instantâneas, melhor suporte de histórico e segurança aprimorada). Em 2019, nenhuma grande rede IRC havia adotado totalmente o padrão proposto.
Após sua era de ouro durante a década de 1990 e início de 2000 (240.000 usuários na QuakeNet em 2004), o IRC teve um declínio significativo. Perdeu cerca de 60% dos usuários entre 2003 e 2012, os usuários mudaram para plataformas de mídia social mais recentes (como o Facebook ou o Twitter) e também abriram plataformas como o XMPP (desenvolvido em 1999). Certas redes, como a Freenode, não seguiram a tendência geral e mais do que quadruplicaram de tamanho durante o mesmo período. No entanto, a Freenode (que em 2016 tinha cerca de 90.000 usuários) desde então diminuiu para cerca de 65.000 usuários.
As maiores redes de IRC têm sido tradicionalmente agrupadas como as "quatro grandes (big four)", uma designação para redes que encabeçam as estatísticas. As quatro grandes redes mudam periodicamente, mas devido à natureza comunitária do IRC, há um grande número de outras redes para os usuários escolherem.
Historicamente, as "quatro grandes redes" eram:
* EFnet
* IRCnet
* Undernet
* DALnet
O IRC atingiu 6 milhões de usuários simultâneos em 2001, 10 milhões de usuários em 2003 e caiu para 371 mil em 2018.$^[$
Em outubro de 2018, as maiores redes de IRC são:
* freenode - cerca de 90 mil usuários nos horários de pico,
* IRCnet - cerca de 30 mil usuários nas horas de pico,
* EFnet - cerca de 18 mil usuários em horários de pico,
* Undernet - cerca de 17 mil usuários nos horários de pico,
* QuakeNet - cerca de 15 mil usuários em horários de pico,
* Rizon - cerca de 14 mil usuários nos horários de pico,
* OFTC - cerca de 13 mil usuários nos horários de pico e
* DALnet - cerca de 8 mil usuários nos horários de pico.
Hoje, as 100 principais redes IRC têm cerca de aproximadamente 370 mil usuários conectados nos horários de pico.

### Linha do tempo

Linha do tempo dos principais servidores:
* EFnet - de 1990 até o presente,
* Undernet - de 1992 até o presente,
* DALnet - de 1994 até o presente,
* freenode - 1995 até o presente,
* IRCnet - de 1996 até o presente,
* QuakeNet - de 1997 até o presente
* Comunidade de tecnologia aberta e livre - de 2001 até o presente,
* Rizon - de 2002 até o presente e
* Libera Chat - de 2021 até o presente.

## Informação técnica

O IRC é um protocolo aberto que usa TCP e, opcionalmente, TLS. Um servidor IRC pode se conectar a outros servidores IRC para expandir a rede IRC. Os usuários acessam redes IRC conectando um cliente a um servidor. Existem muitas implementações de cliente (como mIRC, HexChat e irssi) e implementações de servidor (por exemplo, o IRCd original). A maioria dos servidores IRC não exige que os usuários registrem uma conta, mas um apelido é necessário antes de se conectar.
O IRC era originalmente um protocolo de texto simples (embora posteriormente estendido) que, a pedido, foi atribuído a porta TCP 194 pela IANA. No entanto, o padrão de fato sempre foi executar o IRC em TCP 6667 e números de porta próximos (por exemplo, portas TCP 6660-6669 e 7000) para evitar ter que executar o software IRCd com privilégios de root.
O protocolo especificava que os caracteres eram de 8 bits, mas não especificava a codificação de caracteres que o texto deveria usar. Isso pode causar problemas quando os usuários que usam clientes e (ou) plataformas diferentes desejam conversar.
Todos os protocolos IRC (cliente para servidor) em uso hoje descendem do protocolo implementado na versão irc 2.4.0 do servidor IRC2 e documentado na RFC 1459. Desde a publicação da RFC 1459, os novos recursos na implementação do irc 2.10 levaram à publicação de vários documentos de protocolo revisados (RFC 2810, RFC 2811, RFC 2812 e RFC 2813). No entanto, essas alterações de protocolo não foram amplamente adotadas entre outras implementações.
Embora muitas especificações sobre o protocolo IRC tenham sido publicadas, não há uma especificação oficial, pois o protocolo permanece dinâmico. Praticamente nenhum cliente e muito poucos servidores confiam estritamente nas RFCs acima como referência.
A Microsoft fez uma extensão para o IRC em 1998 através do proprietário IRCX. Posteriormente, eles pararam de distribuir software que suportasse o IRCX e desenvolveram o proprietário MSNP.
A estrutura padrão de uma rede de servidores IRC é uma árvore. As mensagens são encaminhadas apenas para os ramos necessários da árvore, mas o estado da rede é enviado para cada servidor e geralmente há um alto grau de confiança implícita entre os servidores. Essa arquitetura tem, no entanto, vários problemas. Um servidor mal-intencionado ou com comportamento inadequado pode causar grandes danos à rede e quaisquer mudanças na estrutura, sejam intencionais ou resultado de condições na rede subjacente, requerem uma divisão de rede e junção de rede. Isso resulta em muito tráfego de rede, falsas mensagens (de entrada saída) para os usuários e perda temporária de comunicação com os usuários nos servidores de divisão. Adicionar um servidor a uma grande rede significa uma grande carga de largura de banda em segundo plano na rede e uma grande carga de memória no servidor. Uma vez estabelecida, no entanto, cada mensagem para vários destinatários é entregue de maneira semelhante a multicast, o que significa que cada mensagem viaja por um link de rede exatamente uma vez. Isso é um ponto forte em comparação aos protocolos 'não multicast', como o Simple Mail Transfer Protocol (SMTP) ou o Extensible Messaging and Presence Protocol (XMPP).
Um daemon IRC também pode ser usado em uma rede local (LAN). O IRC pode, portanto, ser usado para facilitar a comunicação entre as pessoas dentro da rede local (comunicação interna).

### Comandos e respostas

O IRC tem uma estrutura baseada em linha. Os clientes enviam mensagens de linha única para o servidor recebem respostas para essas mensagens e cópias de algumas mensagens enviadas por outros clientes. Na maioria dos clientes, os usuários podem inserir comandos prefixando-os com '/'. Dependendo do comando, eles podem ser manipulados inteiramente pelo cliente ou, geralmente para comandos que o cliente não reconhece, passados diretamente para o servidor (possivelmente com alguma modificação).
Devido à natureza do protocolo, os sistemas automatizados nem sempre emparelham corretamente um comando enviado com sua resposta com total confiabilidade e estão sujeitos a adivinhação.

### Canal

O meio básico de comunicação com um grupo de usuários em uma sessão de IRC estabelecida é através de um canal. Canais em uma rede podem ser exibidos usando o comando LIST, que lista todos os canais atualmente disponíveis que não têm os modos +s ou +p definidos nessa rede específica.
Os usuários podem ingressar em um canal usando o comando JOIN, disponível na maioria dos clientes como /join #nome do canal. As mensagens enviadas aos canais associados são, então, retransmitidas à todos os outros usuários.
Os canais que estão disponíveis em uma rede IRC inteira são prefixados com um '#', enquanto aqueles locais para um servidor usam '&'. Outros tipos de canais menos comuns incluem canais '+' (canais modeless, sem operadores) e canais '!' (uma forma de canal timestamped em redes normalmente sem timestamped.

### Modos

Usuários e canais podem ter "modos" que são representados por letras simples, que diferenciam maiúsculas de minúsculas e são configurados usando o comando MODE. Modos de usuário e modos de canal são separados e podem usar a mesma letra para significar coisas diferentes (por exemplo, o modo de usuário "i" é o modo invisível, enquanto o modo de canal "i" é o que define que apenas convidados podem ingressar no canal.) Os modos são, geralmente, configurados ou não configurados usando o comando de modo que pega um alvo (usuário ou canal), um conjunto de modos para configurar (+) ou desconfigurar (-) e quaisquer parâmetros que os modos precisem.
Alguns modos de canal usam parâmetros e outros modos de canal se aplicam a um usuário em um canal ou adicionam ou removem uma máscara (por exemplo, uma máscara de proibição) de uma lista associada ao canal em vez de aplicar ao canal como um todo. Os modos que se aplicam à usuários em um canal têm um símbolo associado que é usado para representar o modo nas respostas de nomes (enviada aos clientes na primeira entrada em um canal e no uso dos comandos de nomes) e, em muitos clientes, é usado também para representá-los na lista de usuários exibida pelo cliente em um canal ou para exibir um indicador próprio para os modos de um usuário.
A fim de analisar corretamente as mensagens do modo de entrada e rastrear o estado do canal, o cliente deve saber qual modo é de qual tipo e, para os modos que se aplicam a um usuário em um canal, qual símbolo vai com qual letra. Nas primeiras implementações do IRC, isso tinha que ser codificado no cliente. Mas agora, existe uma extensão padrão de fato para o protocolo chamado ISUPPORT que envia essas informações ao cliente no momento da conexão usando o 005 numérico.
Há uma pequena falha de design no IRC em relação aos modos que se aplicam aos usuários nos canais: a mensagem de nomes usada para estabelecer o estado inicial do canal pode enviar apenas um modo por usuário no canal mas vários desses modos podem ser definidos em um único usuário. Por exemplo, se um usuário mantém o status de operador (+o) e o status de voz (+v) em um canal, um novo cliente não será capaz de ver o modo com menos prioridade (ou seja, o de voz). Soluções alternativas para isso são possíveis no lado do cliente e do servidor mas nenhuma é amplamente implementada.

#### Modos do padrão (RFC 1459)

Modos de usuário :
| Letra | Descrição |
| i | Invisível (não pode ser visto sem um canal comum ou sem saber o nome exato). |
| s | Recebe avisos do servidor. |
| w | Recebe wallops. |
| o | O usuário é um operador de IRC (ircop). |
Modos de canal :
| Letra | Símbolo | Parâmetro(s) | Descrição |
| o | @ | Nome do usuário afetado | Operador de canal (pode alterar os modos do canal e expulsar usuários do canal, entre outras coisas). |
| s | | | Canal secreto (não mostrado na lista de canais ou whois de usuário, exceto para usuários que já estão no canal). |
| p | | | Canal privado (listado na lista de canais como prv de acordo com RFC 1459). |
| n | | | Os usuários não podem enviar mensagens para o canal externamente. |
| m | | | O canal é moderado (apenas aqueles que possuem status de operador de canal ou status de voz no canal podem enviar mensagens para ele). |
| i | | | Apenas usuários com convites podem entrar no canal. |
| t | | | Apenas operadores de canal podem mudar o tópico do canal. |
| l | | Número limite | Limita o número de usuários que podem estar no canal (quando cheio, nenhum novo usuário pode entrar). |
| b | | Máscara de proibição (apelido!usuário@host com caracteres curinga permitidos) | Bane máscaras de hosts do canal. |
| v | + | Nome do usuário afetado | Concede status de voz ao usuário no canal (veja +m acima). |
| k | | Nova chave de canal | Define uma chave de canal de forma que somente usuários que conheçam a chave possam entrar. |
Muitos daemons e redes adicionaram modos extras ou modificaram o comportamento dos modos na lista acima.

### Operadores de canal

Um operador de canal é um cliente em um canal IRC que gerencia o canal. Operadores de canal de IRC podem ser facilmente vistos por um símbolo ou ícone próximo ao seu nome (varia de acordo com a implementação do cliente, normalmente um prefixo de símbolo "@", um círculo verde ou uma letra latina "+o" ou "o"). Na maioria das redes, um operador pode:
* Chutar(expulsar) um usuário.
* Banir um usuário.
* Conceder a outro usuário o status de operador ou voz do canal IRC.
* Alterar o tópico do canal IRC enquanto o modo de canal +t estiver definido.
* Alterar os bloqueios do modo de canal IRC.

### Operadores IRC

Também há usuários que mantêm direitos elevados em seu servidor local ou em toda a rede, são chamados de operadores IRC e, às vezes, abreviados para IRCops ou Opers (não devem ser confundidos com operadores de canal). Como a implementação do IRCd varia, também variam os privilégios do operador de IRC no IRCd fornecido. A RFC 1459 afirma que os operadores de IRC são "um mal necessário" para manter um estado limpo da rede e, como tal, precisam ser capazes de desconectar e reconectar servidores. Além disso, para evitar que usuários mal-intencionados ou mesmo programas automatizados prejudiciais entrem no IRC, os operadores de IRC geralmente têm permissão para desconectar clientes e proibir completamente endereços IP ou sub-redes completas. Redes que transportam serviços geralmente permitem que seus operadores de IRC lidem com questões básicas de "propriedade" também. Outros direitos privilegiados podem incluir a anulação de proibições (ser capaz de entrar em canais que não teriam permissão para entrar se não fossem operadores), se promover a operador (sem ser operador do canal), auto-op e etc.

### Máscara de host

Uma máscara de host é um identificador único de um cliente IRC conectado a um servidor IRC. Servidores, serviços e outros clientes (incluindo bots) IRC podem usá-la para identificar uma sessão de IRC específica.
O formato de uma máscara de host é apelido!usuário@host. A máscara de host é semelhante, mas não deve ser confundida com, um endereço de e-mail.
A parte do apelido é o apelido escolhido pelo usuário e pode ser alterado durante a conexão. A parte do usuário é o nome de usuário relatado pelo protocolo ident no cliente. Se o ident não estiver disponível no cliente, o nome de usuário especificado quando o cliente conectou-se é usado após ser prefixado com um til.
A parte do host é o hostname do qual o cliente está se conectando. Se o endereço IP do cliente não puder ser resolvido para um hostname válido pelo servidor, ele (o endereço de IP) será usado em vez do nome do host.
Devido às implicações de privacidade de expor o endereço IP ou o nome de host de um cliente, alguns daemons IRC também fornecem recursos de privacidade como o InspIRCD ou o modo "+ x" do UnrealIRCd. Isto criptografa um endereço de IP do cliente ou mascara parte do nome do host de um cliente (tornando-o ilegível para usuários que não sejam IRCops). Os usuários também podem ter a opção de solicitar um "host virtual" (ou "vhost"), exibido na máscara de host para permitir maior anonimato. Algumas redes IRC, como a Freenode, os usam como "disfarces" para indicar que um usuário é afiliado a um grupo ou projeto.

### Esquema URI

Existem três esquemas URI reconhecidos para o IRC: irc, ircs, e irc6. Quando suportados, eles permitem ligações de várias formas, incluindo: irc://<host>[:<porta>]/[<canal>[?<senha do canal>]] ircs://<host>[:<porta>]/[<canal>[?<senha do canal>]] irc6://<host>[:<porta>]/[<canal>[?<senha do canal>]] Os itens entre colchetes são opcionais para serem usados (se necessário) para se conectar ao host especificado (ou rede, se conhecido do cliente IRC) e ingressar no canal especificado. Isso pode ser usado no próprio cliente ou em outro aplicativo (como um navegador da web). O URI padrão é irc. O irc6 especifica uma conexão a ser feita usando IPv6 e o ircs especifica uma conexão segura.
De acordo com a especificação, o usual símbolo hash (#) prefixado em nomes de canais que começam com um caractere alfanumérico permite que eles sejam omitidos. Algumas implementações (por exemplo, mIRC) farão isso "incondicionalmente", resultando em um (geralmente não intencional) extra (por exemplo, canal ##), se incluído na URL.
Algumas implementações permitem que vários canais sejam especificados (separados por vírgulas).

## Desafios

Os problemas no design original do IRC eram a quantidade de dados de estado compartilhados sendo uma limitação em sua escalabilidade, a ausência de identificações de usuário exclusivas levando ao problema de colisão de apelidos, falta de proteção de divisões de redes por meio de roteamento cíclico, a compensação em escalabilidade por causa das informações de presença do usuário em tempo real, fraquezas do protocolo fornecendo uma plataforma para mau uso, nenhuma passagem de mensagem transparente e otimizável e ausência de criptografia. Algumas dessas questões foram tratadas no "IRC moderno".

### Ataques

Como as conexões IRC podem não ser criptografadas e normalmente se estendem por longos períodos, elas são um alvo atraente para ataques DoS/DDoS e hackers. Por causa disso, uma política de segurança cuidadosa é necessária para garantir que uma rede IRC não seja suscetível a um ataque como uma guerra para assumir o controle. As redes IRC também podem listar em "linha K" ou "linha G" usuários ou servidores que tenham um efeito prejudicial.
Alguns servidores IRC suportam conexões SSL/TLS para fins de segurança. Isso ajuda a interromper o uso de programas analisadores de pacotes para obter as senhas de usuários de IRC, mas tem pouco uso além desse escopo devido à natureza pública dos canais de IRC. As conexões SSL requerem suporte ao cliente e ao servidor (que pode exigir que o usuário instale binários SSL e patches ou módulos específicos do cliente IRC em seus computadores). Algumas redes também usam SSL para conexões servidor a servidor e fornecem um sinalizador de canal especial (como +S) para permitir apenas usuários conectados por SSL no canal, enquanto proíbe a identificação do operador em texto não criptografado, para melhor utilizar as vantagens que o SSL oferece.
O IRC serviu como um primeiro laboratório para muitos tipos de ataques na internet, como o uso de inacessíveis falsas mensagens ICMP para quebrar as conexões IRC baseadas no TCP (nuking) para incomodar os usuários ou facilitar assumir o controle (takeover).

### Prevenção de mau uso

Uma das questões técnicas mais controversas em torno das implementações de IRC, que sobrevive até hoje, é o mérito dos protocolos "nick/channel delay vs. timestamp". Ambos os métodos existem para resolver o problema de ataques de negação de serviço, mas têm abordagens muito diferentes. O problema com o protocolo IRC original implementado era que, quando dois servidores se dividiam e se juntavam, os dois lados da rede simplesmente fundiam seus canais. Se um usuário entrarasse em um servidor "dividido", em um canal (que existia do outro lado da rede) vazio e obtivesse o status de operador, ele se tornaria um operador de canal do canal "combinado" após o término do netsplit. Se um usuário pegasse um apelido que existia do outro lado da rede, o servidor "mataria" os dois usuários ao reingressarem (ou seja, "colisão de apelidos"). Isso era freqüentemente usado para "matar em massa" todos os usuários em um canal, criando canais "opless" (onde nenhum operador estava presente para lidar com o mau uso). Além de causar problemas dentro do IRC, isso encorajou as pessoas à conduzirem ataques de negação de serviço contra servidores IRC para causar netsplits (dos quais elas, então, se aproveitariam para mau uso).
As estratégias de nick delay e channel delay visam prevenir mau uso (atrasando reconexões e renomeações). Depois que um usuário termina a sessão e o apelido fica disponível, ou um canal deixa de existir porque todos os seus usuários partiram (como freqüentemente acontece durante uma divisão de rede), o servidor não permite que usuário algum use aquele apelido ou entre naquele canal, até que um certo período de tempo (o "atraso") tenha passado. A ideia por trás disso é que, mesmo que ocorra uma divisão de rede, é inútil para os usuários "mal-intencionados" porque eles não podem pegar o apelido ou obter status de operador em um canal por meio da vulnerabilidade anteriormente mencionada (portanto, a colisão de um apelido ou a "fusão" de um canal não pode acontecer). Até certo ponto, isso é inconveniente para os usuários legítimos, que podem ser "forçados (ou induzidos)" à usar, brevemente, um nome (apelido) diferente após o retorno (anexar um subtraço é prática comum nesses casos).
O protocolo timestamp é uma alternativa, aos atrasos de apelido/canal, que resolve colisões usando a prioridade de timestamp. Cada apelido e canal na rede são atribuídos a um timestamp com a data e a hora em que foram criados. Quando ocorre um netsplit, dois usuários de cada lado são livres para usar o mesmo apelido ou canal, mas quando os dois lados são unidos, apenas um pode "sobreviver". No caso de apelidos, o usuário mais novo, de acordo com seu timestamp, é "morto". Quando um canal colide, os membros (usuários no canal) são mesclados, mas os operadores de canal no lado "perdedor" da divisão perdem seu status de operador de canal.
O TS (timestamp) é um protocolo muito mais complicado do que o ND (nick delay)/CD (channel delay), tanto em design como em implementação. Apesar de ter passado por várias revisões, algumas implementações ainda têm problemas com "dessincronização" (onde dois servidores na mesma rede discordam sobre o estado atual da rede), permitindo muita clemência no que seria permitido pelo lado "perdedor". Sob os protocolos TS originais, por exemplo, não havia proteção contra usuários definindo banimentos ou outros modos no canal perdedor (que seriam então mesclados na fusão quando a divisão (netsplit) terminasse, mesmo que os usuários que configuraram esses modos perdessem seus status de operador de canal). Alguns servidores IRC modernos baseados em TS também incorporaram alguma forma de ND/CD, além da marcação de tempo, em uma tentativa de conter ainda mais o mau uso.
A maioria das redes hoje usa a abordagem de carimbo de data/hora. Os desacordos de "TS versus ND/CD" fizeram com que vários servidores se separassem da EFnet e formassem os mais novos IRCnets. Após a divisão, a EFnet mudou para um protocolo TS, enquanto a IRCnet optou pelo ND/CD.
Em versões recentes do ircd IRCnet, bem como ircds usando o protocolo TS6 (incluindo Charybdis), o ND foi estendido/substituído por um mecanismo chamado SAVE. Este mecanismo atribui um identificador exclusivo à cada cliente (ao se conectar a um servidor IRC). Este ID começa com um número, é proibido em apelidos (nicknames) (embora alguns ircds, nomeadamente IRCnet e InspIRCd, permitam que os clientes usem o próprio UID como apelido).
Se dois clientes com o mesmo apelido se juntam de lados diferentes de um netsplit ("colisão de apelidos"), o primeiro servidor a ver esta colisão "força ambos" os clientes à mudarem seu apelido (nickname) para seu UID( evitando assim que ambos os clientes sejam desconectados). Na IRCnet, o apelido também ficará bloqueado por algum tempo (ND) para evitar que ambos os clientes voltem ao apelido original, colidindo novamente.

## Clientes
### Software cliente

O software cliente existe para vários sistemas operacionais ou pacotes de software, bem como jogos baseados na web ou internos. Muitos clientes diferentes estão disponíveis para os vários sistemas operacionais, incluindo Windows, Unix e Linux, Mac OS X e sistemas operacionais móveis (tais como iOS e Android). No Windows, mIRC é um dos clientes mais populares.
Alguns programas extensíveis através de plug-ins também servem como plataformas para clientes IRC. Por exemplo, um cliente chamado ERC, escrito inteiramente em Emacs Lisp, está incluído na versão 22.3 do Emacs. Portanto, qualquer plataforma que pode executar o Emacs pode executar o ERC.
Vários navegadores têm clientes IRC integrados (como o Opera versões 12.18 e anteriores e o complemento ChatZilla para Mozilla Firefox (56 e anteriores) incluído como um componente integrado do SeaMonkey). Clientes baseados na Web, como Mibbit e KiwiIRC de código aberto, podem ser executados na maioria dos navegadores.
Jogos como War§ow, Unreal tournament (até o Unreal tournament 2004), Uplink, jogos baseados em Spring engine, 0 A.D. e ZDaemon têm o IRC incluído.
A interface de chat do Ustream é IRC com autenticação personalizada, bem como a do Twitch (anteriormente Justin.tv).

### Bots

Um uso típico de bots no IRC é o de fornecer serviços ou funcionalidades específicas dentro de um canal, como hospedar um jogo baseado em chat ou fornecer notificações de eventos externos. No entanto, alguns bots IRC são usados para lançar ataques maliciosos, como negação de serviço, spamming ou exploração.

### Bouncer

Um programa que é executado como um daemon em um servidor e funciona como um proxy persistente é conhecido como BNC ou bouncer. O objetivo é manter uma conexão com um servidor IRC, atuando como um retransmissor entre o servidor e o cliente, ou simplesmente atuar como um proxy. Caso o cliente perca a conectividade de rede, o BNC pode permanecer conectado e arquivar todo o tráfego para entrega posterior, permitindo ao usuário retomar sua sessão de IRC sem interromper sua conexão com o servidor.
Além disso, como forma de obter um efeito semelhante ao do bouncer, um cliente IRC, normalmente baseado em texto (como o Irssi por exemplo), pode ser executado em um servidor sempre ativo ao qual o usuário se conecta via SSH. Isso também permite que dispositivos que têm apenas a funcionalidade ssh, mas nenhum cliente de IRC real instalado, se conectem ao IRC e permite o compartilhamento de sessões de IRC.
Para evitar que o cliente IRC feche quando a conexão ssh for fechada, o cliente pode ser executado dentro de um terminal multiplexador, como GNU Screen ou tmux, mantendo-se assim constantemente ligado à(s) rede(s) IRC, podendo registar as conversações nos canais de interesse do utilizador e manter a presença nos canais na rede. Modelado a partir dessa configuração, em 2004 um cliente IRC seguindo o modelo cliente-servidor, chamado Smuxi, foi lançado.

## Mecanismos de pesquisa

Existem vários motores de busca disponíveis para ajudar o usuário a encontrar o que procura no IRC. Geralmente, o mecanismo de pesquisa consiste em duas partes, um "back-end" (ou "spider/crawler") e um "mecanismo de pesquisa" "front-end".
O back-end (spider /webcrawler) é o cavalo de batalha do mecanismo de pesquisa. É responsável por rastrear servidores IRC para indexar as informações enviadas por eles. As informações indexadas, geralmente, consistem apenas no texto do canal (texto que é exibido publicamente em canais públicos).
O "mecanismo de busca" front-end é a interface do usuário para o banco de dados. Ele fornece aos usuários uma maneira de pesquisar o banco de dados de informações indexadas para recuperar os dados que estão procurando. Esses mecanismos de pesquisa front-end também podem ser codificados em várias linguagens de programação.
A maioria dos mecanismos de pesquisa tem seu próprio spider, que é o único aplicativo responsável por rastrear o IRC e indexar os próprios dados; entretanto, outros são indexadores "baseados no usuário". Os últimos contam com os usuários para instalarem seu "complemento" em seu cliente IRC; o add-on é o que envia as informações de canal de quaisquer canais em que o usuário esteja ao banco de dados.
Muitos usuários implementaram seus próprios motores de busca ad hoc usando os recursos de registro embutidos em muitos clientes IRC. Esses mecanismos de pesquisa são geralmente implementados como bots e dedicados a um determinado canal ou grupo de canais associados.

## Codificação de caracteres

O IRC ainda carece de uma única convenção padrão globalmente aceita para transmitir caracteres fora do repertório ASCII de 7 bits. Os servidores IRC normalmente transferem mensagens de um cliente para outro cliente como sequências de bytes, sem nenhuma interpretação ou recodificação de caracteres. O protocolo IRC (ao contrário, por exemplo, do MIME ou HTTP) carece de mecanismos para anunciar e negociar opções de codificação de caracteres. Isso colocou a responsabilidade de escolher o codec de caractere apropriado no cliente. Na prática, os canais de IRC têm usado amplamente as mesmas codificações de caracteres que também foram usadas pelos sistemas operacionais (em particular os derivados Unix) nas respectivas comunidades linguísticas:
* Era de 7 bits: Nos primeiros dias do IRC, especialmente entre os usuários de escandinavo e língua finlandesa, as variantes nacionais de ISO 646 eram dominantes como codificação de caracteres. Estes codificam caracteres (não ASCII) como Ä, Ö, Å, ä, ö, e å nas posições de código 0x5B, 0x5C, 0x5D, 0x7B, 0x7C e 0x7D (ASCII: [, \, ], {, | e }). É por isso que esses códigos são sempre permitidos em apelidos. De acordo com a RFC 1459, "{", "|" e "}" em apelidos devem ser tratados, respectivamente, como equivalente (em minúsculas) de "[", "\" e "]". No final da década de 1990, o uso de codificações de 7 bits desapareceu em favor do ISO 8859-1 e tais mapeamentos de equivalência foram retirados de alguns daemons IRC.
* Era de 8 bits: Desde o início dos anos 1990, codificações de 8 bits como ISO 8859-1 tornaram-se comumente usadas para idiomas europeus. Os usuários russos podiam escolher KOI8-R, ISO 8859-5 e Windows-1251, e desde cerca de 2000, as redes IRC russas modernas convertem entre essas diferentes codificações comumente usadas do script cirílico.
* Era multibyte: Por muito tempo, os canais IRC do leste asiático com scripts logográficos na China, Japão e Coreia têm usado codificações multibyte, como EUC ou ISO-2022-JP. Com a migração comum de ISO 8859 para UTF-8 em plataformas Linux e Unix desde cerca de 2002, o UTF-8 tornou-se um substituto cada vez mais popular para muitas das codificações de 8 bits usadas anteriormente em canais europeus. Alguns clientes de IRC agora são capazes de ler mensagens em ISO 8859-1 ou UTF-8 no mesmo canal, detectando heuristicamente qual codificação é usada. A mudança para UTF-8 começou em particular no IRC de língua finlandesa (Merkistö (em finlandês)).
Hoje, a codificação UTF-8 de Unicode/ISO/IEC 10646 seria a candidata mais provável para uma única codificação de caracteres padrão futura para todas as comunicações IRC, se tal padrão já relaxou a restrição de tamanho de mensagem de 510 bytes. O UTF-8 é compatível com o ASCII e cobre o superconjunto de todos os outros conjuntos de caracteres codificados padrões comumente usados.

## Compartilhamento de arquivos

Muito parecido com o convencional compartilhamento de arquivos P2P, os usuários podem criar servidores de arquivos que lhes permitem compartilhar arquivos uns com os outros usando bots ou scripts personalizados para seu cliente. Freqüentemente, os usuários se agrupam para distribuir warez por meio de uma rede de bots IRC.
Tecnicamente, o IRC não fornece mecanismos de transferência de arquivo. O compartilhamento de arquivos é implementado pelos "clientes" IRC, normalmente usando o protocolo DCC, no qual as transferências de arquivos são negociadas por meio da troca de mensagens privadas entre clientes. A grande maioria dos clientes de IRC oferece suporte para transferências de arquivos DCC, daí a visão de que o compartilhamento de arquivos é um recurso integral do IRC. O uso comum desse protocolo, entretanto, às vezes também causa spam de DCC. Os comandos DCC também têm sido usados para explorar clientes vulneráveis para executar uma ação, como desconectar do servidor ou sair do cliente.