IRC: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
No edit summary
m Reverting possible vandalism by 2404:7C00:4A:8BE:37E9:9A82:B42D:458F to version by Eurohunter. Report False Positive? Thanks, ClueBot NG. (4321621) (Bot)
 
Line 1: Line 1:
{{Short description|Protocol for real-time Internet chat and messaging}}
{{Use dmy dates|date=April 2023}}
{{hatnote group|
{{other uses}}
}}
{{Infobox networking protocol
| title = Internet Relay Chat
| logo =
| logo alt =
| image =
| image alt =
| caption =
| is stack =
| abbreviation = IRC
| purpose = [[Instant messaging]]
| developer = [[Jarkko Oikarinen]]
| date = {{Start date and age|1988|08}}
| based on =
| influenced = Not yet superseded<br/>[http://ircv3.net/ IRCv3] (standards process working group)
| osilayer = Application layer
| ports = 6667, 6697
| rfcs = [https://datatracker.ietf.org/doc/html/rfc1459 RFC 1459]
| hardware =
}}
{{IPstack}}
{{IPstack}}
[[File:Tolsun 2.jpg|thumb|upright|The first IRC server, tolsun.oulu.fi, a [[Sun-3]] server on display near the [[University of Oulu]] computer centre]]
{{redirect|IRC}}
'''Internet Relay Chat (IRC)''' is a form of realtime [[internet]] [[Online chat|chat]]. It is mainly designed for group (many-to-many) communication in discussion forums called ''[[Chat room|channels]]'', but also allows one-to-one messages (though lack a proper contact list system makes it a poor replacement for instant messaging applications).


'''IRC''' ('''Internet Relay Chat''') is a text-based chat system for [[instant messaging]]. IRC is designed for [[Many-to-many|group communication]] in discussion forums, called ''[[#Channels|channels]]'',<ref>{{cite IETF|rfc=1459|title=Internet Relay Chat Protocol|sectionname=One-to-many|section=3.2|page=11|idanchor=ietf}}</ref> but also allows one-on-one communication via [[instant messaging|private messages]]<ref>{{cite IETF |rfc=2810 |title=Internet Relay Chat: Architecture |sectionname=One-To-One Communication |section=5.1 |page=5 |idanchor=ietf }}</ref> as well as [[Direct Client-to-Client|chat and data transfer]],<ref>{{cite web |last=Rollo |first=Troy |title=A Description of the DCC Protocol |url=http://www.irchelp.org/irchelp/rfc/dccspec.html |access-date=8 April 2011 |website=IRCHelp.org }}</ref> including [[file sharing]].<ref>{{cite book|last=Wang|first=Wallace|title=Steal this File Sharing Book|date=25 October 2004|publisher=[[No Starch Press]]|isbn=978-1-59327-050-6|edition=1st|location=[[San Francisco, California]]|pages=[https://archive.org/details/stealthisfilesha00wang/page/61 61–67]|chapter=Instant Messaging and Online Chat Rooms: Internet Relay Chat (IRC)|chapter-url=https://archive.org/details/stealthisfilesha00wang/page/61}}</ref>
IRC was created by [[Jarkko Oikarinen]] (nickname "WiZ") in late August 1988 to replace a program called [[MUT (software)|MUT]] (MultiUser [[Talk (Unix)|talk]]) on a [[Bulletin board system|BBS]] called OuluBox in [[Finland]]. Oikarinen found inspiration in [[Bitnet Relay Chat]] which operated on the [[BITNET|Bitnet network]].


Internet Relay Chat is implemented as an [[application layer]] protocol to facilitate communication in the form of text. The chat process works on a [[Client–server model|client–server networking model]]. Users connect, using a client{{emdash}}which may be a [[Web application|web app]], a [[Computer program|standalone desktop program]], or embedded into part of a larger program{{emdash}}to an IRC server, which may be part of a larger IRC network. Examples of programs used to connect include [[Mibbit]], [[IRCCloud]], [[KiwiIRC]], and [[mIRC]].
IRC gained prominence when it was used to report on the [[Soviet coup attempt of 1991]] throughout a [[media blackout]]. It was previously used in a similar fashion by [[Kuwaiti]]s during the [[Gulf War|Iraqi invasion]]. Relevant logs are available from [http://www.ibiblio.org/pub/academic/communications/logs/ ibiblio] archive.

IRC usage has been declining steadily since 2003, losing 60 percent of its users.<ref name="pingdom" /> In April 2011, the top 100 IRC networks served more than 200,000 users at a time.<ref name="irc networks top 100">{{cite web
| url = http://irc.netsplit.de/networks/top100.php
| title = IRC Networks – Top 100
| access-date = 26 October 2023
| website = irc.netsplit.de
}}</ref>

=={{anchor|MultiUser Talk}} History== <!-- This section is linked from redirect "[[MultiUser Talk]]" -->
{{See also|IRCd#History}}
IRC was created by [[Jarkko Oikarinen]] in August 1988 to replace a program called MUT (MultiUser Talk) on a [[Bulletin board system|BBS]] called OuluBox at the [[University of Oulu]] in [[Finland]], where he was working at the Department of Information Processing Science. Jarkko intended to extend the BBS software he administered, to allow news in the [[Usenet]] style, real time discussions and similar BBS features. The first part he implemented was the chat part, which he did with borrowed parts written by his friends Jyrki Kuoppala and Jukka Pihl. The first IRC network was running on a single server named tolsun.oulu.fi.<ref name="stenberg">{{cite web
|last=Stenberg
|first=Daniel
|title=History of IRC (Internet Relay Chat)
|url=https://daniel.haxx.se/irchistory.html
|access-date=25 April 2016
|quote=I did not experience all of this. I found information on various places and I received information from various people in order to write this. People that have helped me with this include: Greg "wumpus" Lindahl, Vesa "vesa" Ruokonen, James Ng, Tuomas Heino, Richard (eagle`s on undernet), Ari Lemmke
}}</ref> Oikarinen found inspiration in a chat system known as [[Bitnet Relay]], which operated on the [[BITNET]].<ref name="founding irc">{{cite web
| url = http://www.mirc.com/jarkko.html
|website=mIRC
| title = Founding IRC
| access-date = 8 April 2011
| last = Oikarinen
| first = Jarkko
| author-link = Jarkko Oikarinen
|url-status=live |archive-url=https://web.archive.org/web/20110427030207/http://www.mirc.com/jarkko.html |archive-date= Apr 27, 2011
}}</ref>

Jyrki Kuoppala pushed Oikarinen to ask Oulu University to free the IRC code so that it also could be run outside of Oulu, and after they finally got it released, Jyrki Kuoppala immediately installed another server. This was the first "IRC network". Oikarinen got some friends at the [[Helsinki University]] and [[Tampere University]] to start running IRC servers when his number of users increased and other universities soon followed. At this time Oikarinen realized that the rest of the BBS features probably would not fit in his program.<ref name="stenberg"/>

Oikarinen contacted people at the [[University of Denver]] and [[Oregon State University]]. They had their own IRC network running and wanted to connect to the Finnish network. They had obtained the program from one of Oikarinen's friends, Vijay Subramaniam—the first non-Finnish person to use IRC. IRC then grew larger and got used on the entire Finnish national network—[[FUNET]]—and then connected to [[NORDUnet|Nordunet]], the Scandinavian branch of the Internet. In November 1988, IRC had spread across the Internet and in the middle of 1989, there were some 40 servers worldwide.<ref name="stenberg"/>

===EFnet===
In August 1990, the first major disagreement took place in the IRC world. The "A-net" (Anarchy net) included a server named eris.berkeley.edu. It was all open, required no passwords and had no limit on the number of connects. As Greg "wumpus" Lindahl explains:<ref name=":0">{{Cite web |title=History of IRC (Internet Relay Chat) |url=https://daniel.haxx.se/irchistory.html |access-date=2023-07-22 |website=daniel.haxx.se}}</ref> "it had a wildcard server line, so people were hooking up servers and [[IRC takeover#Nick collision|nick-colliding]] everyone". The "Eris Free Network", [[EFnet]], made the eris machine the first to be Q-lined (Q for quarantine) from IRC. In wumpus' words again:<ref name=":0" /> "Eris refused to remove that line, so I formed EFnet. It wasn't much of a fight; I got all the hubs to join, and almost everyone else got carried along." A-net was formed with the eris servers, while EFnet was formed with the non-eris servers. History showed most servers and users went with EFnet. Once A-net disbanded, the name EFnet became meaningless, and once again it was the one and only IRC network.<ref name="stenberg"/>

Around that time IRC was used to report on the [[1991 Soviet coup d'état attempt]] throughout a [[media blackout]].<ref>{{cite web
|url=http://www.ibiblio.org/pub/academic/communications/logs/report-ussr-gorbatchev
|title=IRC transcripts from the time of the 1991 Soviet coup d'état attempt
|access-date=8 April 2011
|publisher=[[ibiblio]]
|location=[[Chapel Hill, North Carolina]]
|url-status=dead
|archive-url=https://web.archive.org/web/20090628013626/http://www.ibiblio.org/pub/academic/communications/logs/report-ussr-gorbatchev
|archive-date=28 June 2009
}}</ref> It was previously used in a similar fashion during the [[Gulf War]].<ref>{{cite web
| url = http://www.ibiblio.org/pub/academic/communications/logs/Gulf-War/
| title = IRC logs of events of the Gulf War
| access-date = 8 April 2011
| publisher = [[ibiblio]]
| location = [[Chapel Hill, North Carolina]]
}}</ref> [[Chat log]]s of these and other events are kept in the [[ibiblio]] archive.<ref>{{cite web
| url = http://www.ibiblio.org/pub/academic/communications/logs/
| title = Logs of major events in the online community
| access-date = 8 April 2011
| publisher = [[ibiblio]]
| location = [[Chapel Hill, North Carolina]]
}}</ref>

===Undernet fork===
Another fork effort, the first that made a lasting difference, was initiated by "Wildthang" in the United States in October 1992. (It forked off the EFnet ircd version 2.8.10). It was meant to be just a test network to develop bots on but it quickly grew to a network "for friends and their friends". In Europe and Canada a separate new network was being worked on and in December the French servers connected to the Canadian ones, and by the end of the month, the French and Canadian network was connected to the US one, forming the network that later came to be called "The [[Undernet]]".<ref name="stenberg"/>

The "undernetters" wanted to take ircd further in an attempt to make it use less bandwidth and to try to sort out the channel chaos ([[netsplit]]s and [[IRC takeover|takeovers]]) that EFnet started to suffer from. For the latter purpose, the Undernet implemented timestamps, new routing and offered the CService—a program that allowed users to register channels and then attempted to protect them from troublemakers. The first server list presented, from 15 February 1993, includes servers from the U.S., Canada, France, Croatia and Japan. On 15 August, the new user count record was set to 57 users.<ref name="stenberg"/>

In May 1993, RFC 1459<ref name="rfc 1459 1 introduction">{{cite IETF|rfc=1459|title=Internet Relay Chat Protocol|sectionname=Introduction|section=1|page=4|idanchor=ietf}}</ref> was published and details a simple protocol for client/server operation, channels, one-to-one and one-to-many conversations.<ref name="stenberg"/> A significant number of extensions like CTCP, colors and formats are not included in the protocol specifications, nor is character encoding,<ref name="rfc 1459 2.2 character codes"/> which led various implementations of servers and clients to diverge. Software implementation varied significantly from one network to the other, each network implementing their own policies and standards in their own code bases.

===DALnet fork===
During the summer of 1994, the Undernet was itself forked. The new network was called [[DALnet]] (named after its founder: dalvenjah), formed for better user service and more user and channel protections. One of the more significant changes in DALnet was use of longer nicknames (the original ircd limit being 9 letters). DALnet ircd modifications were made by Alexei "Lefler" Kosut. DALnet was thus based on the Undernet ircd server, although the DALnet pioneers were EFnet abandoners. According to James Ng, the initial DALnet people were "ops in #StarTrek sick from the constant splits/lags/takeovers/etc".<ref name="stenberg"/>

DALnet quickly offered global WallOps (IRCop messages that can be seen by users who are +w (/mode NickName +w)), longer nicknames, Q:Lined nicknames (nicknames that cannot be used i.e. ChanServ, IRCop, NickServ, etc.), global K:Lines (ban of one person or an entire domain from a server or the entire network), IRCop only communications: GlobOps, +H mode showing that an IRCop is a "helpop" etc. Much of DALnet's new functions were written in early 1995 by Brian "Morpher" Smith and allow users to own nicknames, control channels, send memos, and more.<ref name="stenberg"/>

===IRCnet fork===
In July 1996, after months of [[flame war]]s and discussions on the mailing list, there was yet another split due to disagreement in how the development of the ircd should evolve. Most notably, the "European" (most of those servers were in Europe) side that later named itself [[IRCnet]] argued for nick and channel delays whereas the EFnet side argued for timestamps.<ref name="stenberg"/> There were also disagreements about policies: the European side had started to establish a set of rules directing what IRCops could and could not do, a point of view opposed by the US side.<ref>{{cite web|url=http://www.irc.org/history_docs/TheGreatSplit.html |title=The Great Split |publisher=IRC.org |last=Engen|first=Vegard|date= May 2000|access-date=25 April 2016}}</ref>

Most (not all) of the IRCnet servers were in Europe, while most of the EFnet servers were in the US. This event is also known as "The Great Split" in many IRC societies. EFnet has since (as of August 1998) grown and passed the number of users it had then. In the (northern) autumn of the year 2000, EFnet had some 50,000 users and IRCnet 70,000.<ref name="stenberg"/>

===Modern IRC===
IRC has changed much over its life on the Internet. New server software has added a multitude of new features.
* [[IRC services|Services]]: Network-operated bots to facilitate registration of nicknames and channels, sending messages for offline users and network operator functions.
* Extra modes: While the original IRC system used a set of standard user and channel modes, new servers add many new modes for features such as removing color codes from text,<ref>{{cite web|title=Channel Modes|url=https://www.unrealircd.org/docs/Channel_modes|website=UnrealIRCd documentation wiki|access-date=6 January 2018}}</ref> or obscuring a user's hostmask ("cloaking") to protect from [[denial-of-service attack]]s.<ref>{{cite web|title=Cloaking|url=https://www.unrealircd.org/docs/Cloaking|website=UnrealIRCd documentation wiki|access-date=6 January 2018}}</ref>
* Proxy detection: Most modern servers support detection of users attempting to connect through an insecure (misconfigured or exploited) [[proxy server]], which can then be denied a connection. This proxy detection software is used by several networks, although that real time list of proxies is defunct since early 2006.<ref>{{cite web|url=http://www.irc-junkie.org/2006-05-07/blitzed-open-proxy-monitor-shuts-down/|title=Blitzed Open Proxy Monitor Shuts Down|quote=The Open Proxy Monitor which has been provided by the Blitzed IRC network has been shut down…The database was so large that it is near to impossible for the team to backup, or find a new location to continue the service. Added to that, most of the team members do not possess the time anymore to keep the service running.}}</ref>
* Additional commands: New commands can be such things as shorthand commands to issue commands to Services, to network-operator-only commands to manipulate a user's hostmask.{{Citation needed|date=January 2010}}
* [[Encryption]]: For the client-to-server leg of the connection [[Transport Layer Security|TLS]] might be used (messages cease to be secure once they are relayed to other users on standard connections, but it makes [[Man-in-the-middle attack|eavesdropping]] on or wiretapping an individual's IRC sessions difficult). For client-to-client communication, [[Secure Direct Client-to-Client|SDCC]] (Secure DCC) can be used.{{Citation needed|date=January 2010}}
* Connection protocol: IRC can be connected to via [[IPv4]], the old version of the [[Internet Protocol]], or by [[IPv6]], the current standard of the protocol.

{{As of|2016}}, a new standardization effort is under way under a working group called IRCv3, which focuses on more advanced client features such as instant notifications, better history support and improved security.<ref name="ircv3">{{cite web|title=IRCv3|url=http://ircv3.net/|publisher=IRCv3 Working Group|access-date=25 April 2016|date=2016|quote=The IRCv3 Working Group is a collection of IRC client and server software authors working to enhance, maintain and standardize the IRC protocol using backwards-compatible extensions.}}</ref> {{As of|2019}}, no major IRC networks have fully adopted the proposed standard.<ref name="ircv3usage">{{cite web|title= Networks - IRCv3|url=https://ircv3.net/support/networks.html|access-date=9 August 2019|date=2019}}</ref>

{{As of|2021|06|post=,}} there are 481 different IRC networks known to be operating,<ref name="networks">{{Cite web |title=IRC Networks - in alphabetical order |url=https://netsplit.de/networks/index.php.php |access-date=12 January 2022 |website=netsplit.de}}</ref> of which the open source [[Libera Chat]], founded in May 2021, has the most users, with 20,374 channels on 26 servers; between them, the top 100 IRC networks share over 100 thousand channels operating on about one thousand servers.<ref name="top 100">{{Cite web |title=IRC Networks - Top 100 |url=https://netsplit.de/networks/top100.php.php |access-date=12 January 2022 |website=netsplit.de}}</ref>

After its golden era during the 1990s and early 2000s (240,000 users on QuakeNet in 2004), IRC has seen a significant decline, losing around 60% of users between 2003 and 2012, with users moving to [[social media]] platforms such as [[Facebook]] or [[Twitter]],<ref name="pingdom">{{cite web|url=http://royal.pingdom.com/2012/04/24/irc-is-dead-long-live-irc/|title=IRC is dead, long live IRC|date=24 April 2012|website=Pingdom|access-date=25 April 2016|archive-date=15 August 2017|archive-url=https://web.archive.org/web/20170815064620/http://royal.pingdom.com/2012/04/24/irc-is-dead-long-live-irc/|url-status=dead}}</ref> but also to open platforms such as [[XMPP]] which was developed in 1999. Certain networks such as [[Freenode]] have not followed the overall trend and have more than quadrupled in size during the same period.<ref name="pingdom" /> However, Freenode, which in 2016 had around 90,000 users, has since declined to about 9,300 users.<ref>{{cite web|title=netsplit.de top 10|url=http://irc.netsplit.de/networks/top10.php|access-date=15 January 2021}}</ref>

The largest IRC networks have traditionally been grouped as the "Big Four"<ref name="the book of irc">{{cite book |last = Charalabidis
|first = Alex
|title = The Book of IRC: The Ultimate Guide to Internet Relay Chat
|url-access = registration
|edition = 1st
|date = 15 December 1999
|publisher = No Starch Press
|location = [[San Francisco, California]]
|isbn = 978-1-886411-29-6
|page = [https://archive.org/details/bookofirc00char/page/61 61]
|chapter = IRCing On The Macintosh: Ircle
|quote = On large networks such as the Big Four{{mdash}} EFnet, IRCnet, Undernet, and DALnet{{mdash}} trying to list the thousands of channels with Ircle always causes you to disconnect due to the flood of information, while other clients can usually manage the feat, if you are on a direct Ethernet connection.
|url = https://archive.org/details/bookofirc00char
}}</ref><ref name="encyclopedia of new media">{{cite book
| editor-last = Jones
| editor-first = Steve
| title = Encyclopedia of New Media: An Essential Reference to Communication and Technology
| url = https://archive.org/details/encyclopediaofne00jone
| url-access = registration
| edition = 1st
| date = 10 December 2002
| publisher = [[SAGE Publications]]
| location = [[Thousand Oaks, California]]
| isbn = 978-0-7619-2382-4
| page = [https://archive.org/details/encyclopediaofne00jone/page/257 257]
| chapter = Internet Relay Chat
| quote = Today there are hundreds of independent IRC networks, but the "Big Four" are EFNet, UnderNet, Dalnet, and IRCnet.
}}</ref><ref name="the imac book">{{cite book
| last = Rittner
| first = Don
| title = The iMac Book
| edition = 1st
| date = 3 March 1999
| publisher = Coriolis Group
| location = [[Scottsdale, Arizona]]
| isbn = 978-1-57610-429-3
| page = 215
| quote = There are several large networks: EFnet, UnderNET, DALnet, and IRCnet make up the Big Four.
}}</ref><ref name="information technology for management">{{cite book
| last1 = Turban
| first1 = Efraim
| last2 = Leidner
| first2 = Dorothy
| last3 = McLean
| first3 = Ephraim
| last4 = Wetherbe
| first4 = James
| title = Information Technology for Management: Transforming Organizations in the Digital Economy
| edition = 5th
| date = 7 February 2005
| publisher = [[John Wiley & Sons]]
| location = [[Hoboken, New Jersey]]
| isbn = 978-0-471-70522-2
| pages = 106&nbsp;– 107
| chapter = Communication
| quote = The largest networks have traditionally been grouped as the "Big Four": EFNet, IrcNet, QuakeNet, and UnderNet.
}}</ref>—a designation for networks that top the statistics. The Big Four networks change periodically, but due to the community nature of IRC there are a large number of other networks for users to choose from.

Historically the "Big Four" were:<ref name="the book of irc" /><ref name="encyclopedia of new media" /><ref name="the imac book" />
* [[EFnet]]
* [[IRCnet]]
* [[Undernet]]
* [[DALnet]]

IRC reached 6 million simultaneous users in 2001 and 10 million users in 2004–2005, dropping to around 350k in 2021.{{citation needed|date=January 2015}}

The top 100 IRC networks have around 230k users connected at peak hours.<ref name="netsplitde-top100">{{cite web |url=http://irc.netsplit.de/networks/top100.php |title=IRC Networks&nbsp;– Top 100 |website=irc.netsplit.de |publisher=netsplit.de |access-date=15 January 2021 }}</ref>

===Timeline===
Timeline of major servers:
* [[EFnet]], 1990 to present
* [[Undernet]], 1992 to present
* [[DALnet]], 1994 to present
* [[freenode]], 1995 to present
* [[IRCnet]], 1996 to present
* [[QuakeNet]], 1997 to present
* [[Open and Free Technology Community]], 2001 to present
* [[Rizon]], 2002 to present
* [[Libera Chat]], 2021 to present


==Technical information==
==Technical information==
{{See also|IRCd}}
[[Image:XChat_Windows.png|thumb|A screenshot from [[X-Chat]], an IRC client.]]
[[File:Hexchat 2.16.0 screenshot.png|right|thumb|A screenshot of [[HexChat]], an IRC client for [[GTK]] environments]]
IRC is an open [[network protocol|protocol]] that uses [[Transmission Control Protocol|TCP]] and optionally [[Secure Sockets Layer|SSL]]. An IRC server can connect to other IRC servers to expand the IRC network. Users access IRC networks by connecting a client to a server. There are many client and server implementations, such as [[mIRC]] and the Bahamut IRCd. Most IRC servers do not require users to log in, but a user will have to set a nickname before being connected.
[[File:Irssi 1.2.3 screenshot.png|right|thumb|[[Irssi]], a text-based IRC client]]
IRC is an open [[Network protocol|protocol]] that uses [[Transmission Control Protocol|TCP]]<ref name="rfc 1459 1 introduction" /> and, optionally, [[Transport Layer Security|TLS]]. An [[IRC server]] can connect to other IRC servers to expand the IRC network.<ref>{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Servers
| section = 1.1
| page = 4
| idanchor = ietf
}}</ref> Users access IRC networks by connecting a client to a server.<ref>{{cite IETF
| rfc = 2810
|title=Internet Relay Chat: Architecture
| sectionname = Clients
| section = 2.2
| page = 3
| idanchor = ietf
}}</ref> There are many client implementations, such as [[mIRC]], [[HexChat]] and [[irssi]], and server implementations, e.g. the original [[IRCd]]. Most IRC servers do not require users to register an account but a [[Nickname#Computing|nickname]] is required before being connected.<ref>{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Clients
| section = 1.2
| page = 5
| idanchor = ietf
}}</ref>


IRC was originally a [[Text-based protocol|plain text protocol]]<ref name="rfc 1459 1 introduction" /> (although later extended), which on request was assigned port [[List of TCP and UDP port numbers|194/TCP]] by [[Internet Assigned Numbers Authority|IANA]].<ref>{{cite web|date=6 April 2011|title=Port Numbers|url=https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?&page=5|access-date=5 April 2021|publisher=[[Internet Assigned Numbers Authority]]|location=[[Marina del Rey, California]]}}</ref> However, the [[de facto standard|''de facto'' standard]] has always been to run IRC on 6667/TCP<ref>{{cite IETF
IRC is a plaintext protocol, which means that it is fully possible (though quite inconvenient) to use IRC via a basic byte-stream client such as [[netcat]] or [[telnet]]. However, the protocol only uses a slightly modified version of [[ASCII]], and does not originally provide any support for non-ASCII characters in text, with the result that many different, incompatible character encodings (such as [[ISO 8859-1]] and [[UTF-8]]) are used.
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Connect message
| section = 4.3.5
| page = 29
| idanchor = ietf
}}</ref> and nearby port numbers (for example TCP ports 6660–6669, 7000)<ref>{{cite book
| last1 = Lucas
| first1 = Mark
| last2 = Singh
| first2 = Abhishek
| last3 = Cantrell
| first3 = Chris
| editor-last = Henmi
| editor-first = Anne
| title = Firewall Policies and VPN Configurations
| date = 5 October 2006
| publisher = Syngress Publishing
| location = [[Rockland, Massachusetts]]
| isbn = 978-1-59749-088-7
| page = 93
| chapter = Defining a Firewall
}}</ref> to avoid having to run the [[IRCd]] software with [[Superuser|root privileges]].


The protocol specified that characters were 8-bit but did not specify the character encoding the text was supposed to use.<ref name="rfc 1459 2.2 character codes">{{cite IETF
Because most IRC implementations use an [[acyclic graph]] as their connection model, there is no redundancy, and outage of a server or a link can cause a [[netsplit]].
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Character codes
| section = 2.2
| page = 7
| idanchor = ietf
}}</ref> This can cause problems when users using different clients and/or different platforms want to converse.


All client-to-server IRC protocols in use today are descended from the protocol implemented in the irc2.4.0 version of the IRC2 server, and documented in RFC 1459. Since RFC 1459 was published, the new features in the irc2.10 implementation led to the publication of several revised protocol documents (RFC 2810, RFC 2811, RFC 2812 and RFC 2813); however, these protocol changes have not been widely adopted among other implementations.{{Citation needed|date=July 2007}}
===Evolution===


All client-to-server IRC protocols in use today are descended from the protocol implemented in the irc2.8 version of the IRC2server, and documented in RFC 1459. Since RFC 1459 was published, the new features in the irc2.10 implementation led to the publication of several revised protocol documents; RFC 2810, RFC 2811, RFC 2812 and RFC 2813, however these protocol changes have not been widely adopted among other implementations. IRC 2.11 is most widely used on the [[IRCnet]] network. The IRC protocol was extended by Microsoft in 1998 via its [[IRCX]] protocol that solves many of the traditional problems that legacy IRC networks faced, along with some features that most users felt were 'ahead of its time'. Although many specifications on the IRC protocol have been published, there is no official specification, as the protocol remains dynamic. Virtually no clients and very few servers rely strictly on the above RFCs as a reference.
Although many specifications on the IRC protocol have been published, there is no official specification, as the protocol remains dynamic. Virtually no clients and very few servers rely strictly on the above RFCs as a reference.{{Citation needed|date=July 2007}}


Microsoft made an extension for IRC in 1998 via the proprietary [[IRCX]].<ref>{{cite IETF
While the client-to-server protocols are at least functionally similar, server-to-server protocols differ widely (TS5, P10, and ND/CD are several widely-used and incompatible server protocols), making it very difficult to "link" two separate implementations of the IRC server. Some "bridge" servers do exist, to allow linking of, for example, 2.10 servers to TS5 servers, but these are often accompanied with restrictions of which parts of each protocol may be used, and are not widely deployed.
| title = Extensions to the Internet Relay Chat Protocol (IRCX)
| draft = draft-pfenning-irc-extensions-04
| last = Abraham
| first = Dalen
|date=June 1998
| publisher = [[Internet Engineering Task Force|IETF]]
| access-date = 8 April 2011
}}</ref> They later stopped distributing software supporting IRCX, instead developing the proprietary [[Microsoft Notification Protocol|MSNP]].


The standard structure of a network of IRC servers is a [[Tree network|tree]].<ref>{{cite IETF
In its first incarnations, IRC did not have many features that are taken for granted today, such as named channels and channel operators. Channels were numbered -- channel 4 and channel 57, for example -- and the channel '''topic''' described the kind of conversation that took place in the channel. One holdover of this is that joining channel 0 causes a client to leave all the channels it is presently on: "CHANNEL 0" being the original command to leave the current channel.
| rfc = 2810
|title=Internet Relay Chat: Architecture
| sectionname = Architecture
| section = 3
| pages = 3 – 4
| idanchor = ietf
}}</ref> Messages are routed along only necessary branches of the tree but network state is sent to every server<ref>{{cite IETF
| rfc = 2810
|title=Internet Relay Chat: Architecture
| sectionname = Introduction
| section = 1
| page = 2
| idanchor = ietf
}}</ref> and there is generally a high degree of implicit trust between servers. However, this architecture has a number of problems. A misbehaving or malicious server can cause major damage to the network<ref>{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Algorithms
| section = 9.3
| page = 64
| idanchor = ietf
}}</ref> and any changes in structure, whether intentional or a result of conditions on the underlying network, require a net-split and net-join. This results in a lot of network traffic and spurious quit/join messages to users<ref>{{cite IETF
| rfc = 2810
|title=Internet Relay Chat: Architecture
| sectionname = Network Congestion
| section = 6.3
| pages = 7 – 8
| idanchor = ietf
}}</ref> and temporary loss of communication to users on the splitting servers. Adding a server to a large network means a large background bandwidth load on the network and a large memory load on the server. Once established, however, each message to multiple recipients is delivered in a fashion similar to [[multicast]], meaning each message travels a network link exactly once.<ref>{{cite IETF
| rfc = 2810
|title=Internet Relay Chat: Architecture
| sectionname = To A Channel
| section = 5.2.1
| pages = 5 – 6
| idanchor = ietf
}}</ref> This is a strength in comparison to non-multicasting protocols such as [[Simple Mail Transfer Protocol]] (SMTP){{Citation needed|date=July 2007}} or [[Extensible Messaging and Presence Protocol]] (XMPP){{Citation needed|date=July 2007}}.


An IRC daemon can be used on a local area network (LAN). IRC can thus be used to facilitate communication between people within the local area network (internal communication).<ref>{{cite web|url=http://computerquestionhelp.com/content/how-guide-setup-your-own-irc-server-using-personal-or-dedicated-system-or-server-top-freewar|title=IRC daemons for LAN|access-date=2 October 2014}}</ref><ref>{{cite web|url=http://www.irc-wiki.org/IRC_server|title=Running an own IRC server|access-date=2 October 2014}}</ref>
The first major change to IRC, in version 2.5, was to add '''named channels''' -- "+channels". "+channels" were later replaced with "#channels" in version 2.7, numeric channels were removed entirely and channel bans (mode +b) were implemented. irc2.8 added "&channels" (those that exist only on the current server, rather than the entire network) and "!channels" (those that are theoretically safe from suffering from the many ways that a user could exploit a channel by "[[IRC takeover|riding a netsplit]]"), and is the baseline release from which nearly all current implementations are derived.


===Commands and replies===
'''Significant releases based on 2.8 include''':
{{Main|List of Internet Relay Chat commands}}
IRC has a line-based structure. Clients send single-line messages to the server,<ref>{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Message format in 'pseudo' BNF
| section = 2.3.1
| page = 8
| idanchor = ietf
}}</ref> receive replies to those messages<ref>{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Numeric replies
| section = 2.4
| page = 10
| idanchor = ietf
}}</ref> and receive copies of some messages sent by other clients. In most clients, users can enter commands by prefixing them with a '/'. Depending on the command, these may either be handled entirely by the client, or (generally for commands the client does not recognize) passed directly to the server, possibly with some modification.<ref>[https://www.disabled-world.com/communication/irc-chat.php IRC Chat Rooms]</ref>


Due to the nature of the protocol, automated systems cannot always correctly pair a sent command with its reply with full reliability and are subject to guessing.<ref>{{cite web
*2.8.21+CS, developed by Comstud
| url = http://www.shanemcc.co.uk/irc/#listmode
*2.8+th, Taner's patchset, which later became
| title = IRC List Modes – List mode extension showing pair confusion for lists
*[http://www.ircd-hybrid.org ircd-hybrid], originally developed by Jon Lusky ('''Rodder''') and Diane Bruce ('''Dianora''') as 2.8/hybrid, later joined by a large development team.
| access-date = 8 April 2011
*2.9, 2.10, 2.11, ... continue the development of the original codebase, mainly for use on the [[IRCnet]] network. This development line produced the 4 IRC RFCs released after RFC 1459, which document this server protocol exclusively.
| date = 25 November 2009
}}</ref>


===Channels===
2.8.21+CS and ircd-hybrid continue to be used on [[EFnet]], with ircd-ratbox (an offshoot of ircd-hybrid) [[as of 2004]] being the most popular.
The basic means of communicating to a group of users in an established IRC session is through a ''[[chat room|channel]]''.<ref name="rfc 1459 3.2.2 to a group (channel)">{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = To a group (channel)
| section = 3.2.2
| page = 11
| idanchor = ietf
}}</ref> Channels on a network can be displayed using the IRC command ''LIST'',<ref>{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = List message
| section = 4.2.6
| page = 24
| idanchor = ietf
}}</ref> which lists all currently available channels that do not have the modes +s or +p set, on that particular network.


Users can ''join'' a channel using the ''JOIN'' command,<ref name="rfc 1459 4.2.1 join message">{{cite IETF
[[Undernet]]'s IRC server, ircu, is one of the few servers not descended from irc2.8 that are based on the original ircd; it was forked from the irc2.7 codebase.
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Join message
| section = 4.2.1
| page = 19
| idanchor = ietf
}}</ref> in most clients available as ''/join #channelname''. Messages sent to the joined channels are then relayed to all other users.<ref name="rfc 1459 3.2.2 to a group (channel)" />


Channels that are available across an entire IRC network are prefixed with a '#', while those local to a server use '&'.<ref>{{cite IETF
Many modern IRC servers have been coded from scratch, such as csircd (also from Comstud), [http://www.conferenceroom.com ConferenceRoom], Microsoft Exchange Chat Service, [http://www.inspircd.org InspIRCd], and IRCPlus/IRCXPro.
| rfc = 2811
|title=Internet Relay Chat: Channel Management
| sectionname = Channel Scope
| section = 2.2
| pages = 3 – 4
| idanchor = ietf
}}</ref> Other less common channel types include '+' channels—'modeless' channels without operators<ref>{{cite IETF
| rfc = 2811
|title=Internet Relay Chat: Channel Management
| sectionname = Channel Properties
| section = 2.3
| page = 4
| idanchor = ietf
}}</ref>—and '!' channels, a form of [[#delay|timestamped]] channel on normally non-timestamped networks.<ref>{{cite IETF
| rfc = 2811
|title=Internet Relay Chat: Channel Management
| sectionname = Channel lifetime
| section = 3
| page = 5
| idanchor = ietf
}}</ref>


===Channels and modes===
===Modes===
Users and channels may have ''modes'' that are represented by individual case-sensitive letters<ref>{{cite IETF
The basic means of communication in an established IRC session is a ''channel''. You can see all the channels in a server using the command ''/list [#string] [-min #] [-max #]'' that lists all currently available channels, optionally [[Filter (software)|filter]]ing for parameters (#string for the entire or part of the name, with [[Wildcard character#Computing|wildcard]]s, and #min / #max for number of users in the channel).
| rfc = 2811
|title=Internet Relay Chat: Channel Management
| sectionname = Channel Modes
| section = 4
| page = 7
| idanchor = ietf
}}</ref> and are set using the ''MODE'' command.<ref>{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Mode message
| section = 4.2.3
| page = 21
| idanchor = ietf
}}</ref> User modes and channel modes are separate and can use the same letter to mean different things (e.g. user mode "i" is invisible mode while channel mode "i" is invite only.<ref>{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Channel modes
| section = 4.2.3.1
| pages = 21 – 22
| idanchor = ietf
}}</ref>) Modes are usually set and unset using the mode command that takes a target (user or channel), a set of modes to set (+) or unset (-) and any parameters the modes need.


Some channel modes take parameters and other channel modes apply to a user on a channel or add or remove a mask (e.g. a ban mask) from a list associated with the channel rather than applying to the channel as a whole.<ref>{{cite IETF
Users can ''join'' to channels (using the command ''/join #channelname'') and then send messages to it, which are then relayed to all other users in the same channel. Channels which are available across an entire IRC network are prepended with a '#', while those local to a server use '&'. Other (non-standard and less common) channel types include '+' channels&mdash;'modeless' channels without operators, and '!' channels, a form of [[#Abuse prevention: timestamping vs. nick.2Fchannel delay protocol|timestamped]] channel on normally non-timestamped networks.
| rfc = 2811
|title=Internet Relay Chat: Channel Management
| sectionname = Channel Access Control
| section = 4.3
| pages = 10 – 11
| idanchor = ietf
}}</ref> Modes that apply to users on a channel have an associated symbol that is used to represent the mode in names replies<ref name="rfc 1459 p.51 rpl_namreply">{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Command responses: 353 RPL_NAMREPLY
| page = 51
| idanchor = ietf
}}</ref> (sent to clients on first joining a channel<ref name="rfc 1459 4.2.1 join message" /> and use of the names command) and in many clients also used to represent it in the client's displayed list of users in a channel or to display an own indicator for a user's modes.


In order to correctly parse incoming mode messages and track channel state the client must know which mode is of which type and for the modes that apply to a user on a channel which symbol goes with which letter. In early implementations of IRC this had to be hard-coded in the client but there is now a de facto standard extension to the protocol called ISUPPORT that sends this information to the client at connect time using numeric 005.<ref>{{cite web
Both users and channels may have ''modes'', which are some kind of attributes or switches. Modes are abbreviated by single letters so you can string them together concisely. An example for an user mode is 'i', which stands for invisible. (You cannot tell whether or not an invisible user is on a channel unless you join that channel or use the whois command on its nick.) A simple channel-mode example is 'm' (''moderated''), specifying that only 'voiced' users and channel operators are allowed to speak on the channel. This, along with 'k' (''keyed'' - requires a password to join the channel) and 'i' (''invite-only'' - requires an invitation from a channel operator) modes can be used to keep abuse out of the channel.
| url = http://www.irc.org/tech_docs/005.html
| title = The 005 numeric: ISUPPORT
| access-date = 10 April 2011
| last = Roeckx
| first = Kurt
| date = 14 October 2004
| publisher = irc.org
}}</ref><ref>{{cite IETF
| title = IRC RPL_ISUPPORT Numeric Definition
| draft = draft-brocklesby-irc-isupport-03
| last = Brocklesby
| first = Edward
|date=September 2002
| publisher = [[Internet Engineering Task Force|IETF]]
| access-date = 10 April 2011
}}</ref>


There is a small design fault in IRC regarding modes that apply to users on channels: the names message used to establish initial channel state can only send one such mode per user on the channel,<ref name="rfc 1459 p.51 rpl_namreply" /> but multiple such modes can be set on a single user. For example, if a user holds both operator status (+o) and voice status (+v) on a channel, a new client will be unable to see the mode with less priority (i.e. voice). Workarounds for this are possible on both the client and server side; a common solution is to use IRCv3 "multi-prefix" extension.<ref>{{cite web |url=https://ircv3.net/specs/extensions/multi-prefix |title='multi-prefix' Extension - IRCv3}}</ref>
There are five types of channelmodes, four of which will accept an argument, type A accepting an argument to add/remove values from a list (such as 'b'), type B accepting an argument that is used when turning the mode 'on' and 'off' (such as 'k'), type C accepting an argument only when the mode is turned 'on' (such as 'l'), type D which accepts no arguments and is simply a boolean flag (such as 'm', 'n', and 't'), and type E (usually called 'class' or 'prefix' modes) that give/take a privilege from a user on a channel (such as 'o').


====Standard (RFC 1459) modes====
Type E modes (channel classes) specify which users on a channel have privileges, and what level of those privileges they have. Originally only 'channel operator' (mode 'o') and 'voice' (mode 'v') existed. Channel operator (usually abbreviated chanop or simply 'op') privileges allow a user to kick users, set modes, and change the topic even if the channel is '+t'. Voice privileges allow a user to speak on a channel if it is moderated (mode 'm'). Additions to these classes are 'channel owner' (mode 'q') created by Microsoft in its IRCX implementation (and later used by UnrealIrcd); 'half-operator' (mode 'h') which is similar to a chanop, except they cannot set certain modes and can only kick normal users; 'protected' (mode 'a'); 'administrator' (mode 'a' or 'u'); and many more.


{| class="wikitable"
Each channel class has an associated prefix that is shown beside a user's nickname whenever associated with that channel. The most common prefixes are '@' for channel operator, '+' for voice, '%' for half-op, '.' or '~' for channel owner, '&' for protected user, '!' or the lesser known '*' for administrator.
|+ User modes
|-
! Letter
! Symbol
! Description
|-
| '''i'''
|
| Invisible—cannot be seen without a common channel or knowing the exact name
|-
| '''s'''
|
| Receives server notices
|-
| '''w'''
|
| Receives wallops<ref>{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Operwall message
| section = 5.6
| page = 41
| idanchor = ietf
}}</ref>
|-
| '''o'''
|
| User is an IRC operator (ircop)
|}


{| class="wikitable"
Unless the channel is moderated, the only effect of +v (voice) is the plus sign appearing beside the nick name. On many channels this is used to indicate seniority or regularity of use, or a kind of "trusted user" flag in case the channel does have to be moderated.
|+ Channel modes
|-
! Letter
! Symbol
! Parameter(s)
! Description
|-
| '''o'''
| @
| Name of affected user
| Channel operator—can change channel modes and kick users out of the channel among other things
|-
| '''s'''
|
|
| Secret channel—not shown in channel list or user whois except to users already on the channel
|-
| '''p'''
|
|
| Private channel—listed in channel list as "prv" according to <nowiki>RFC 1459</nowiki>
|-
| '''n'''
|
|
| Users cannot send messages to the channel externally
|-
| '''m'''
|
|
| Channel is moderated (only those who hold channel operator or voice status on the channel can send messages to it)
|-
| '''i'''
|
|
| Only users with invites may enter the channel.
|-
| '''t'''
|
|
| Only channel operators can change the channel topic.
|-
| '''l'''
|
| Limit number
| Limits number of users able to be on channel (when full, no new users can join)
|-
| '''b'''
|
| Ban mask (nick!user@host with wildcards allowed)
| Bans [[hostmask]]s from channel
|-
| '''v''' <!-- That does belong here with the channel modes. It's not a user mode -->
| +
| Name of affected user
| Gives a user voice status on channel (see +m above)
|-
| '''k'''
|
| New channel key
| Sets a channel key such that only users knowing the key can enter
|}


Many daemons and networks have added extra modes or modified the behavior of modes in the above list.<ref>{{cite web
Most IRC networks feature a lot of extra modes not specified in any RFC document. This is a very simple feat for clients to adapt to since a list of all the valid user and channelmodes are sent to clients in the RPL_MYINFO reply upon logon. In addition, the list of channelmodes (and what type of arguments they accept), and the prefixes for class modes are specified in the protocol control reply (RPL_PROTOCTL or 005) sent from most IRC servers when a client connects. This message is used to tell clients what features the server supports, and what its limits are (for example, the maximum number of users you can have on your notify list, or the maximum length of your nickname).
| url = http://www.alien.net.au/irc/usermodes.html
| title = IRC User Modes List
| access-date = 10 April 2011
| last = Butcher
| first = Simon
| date = 12 January 2005
| publisher = alien.net.au
}}</ref><ref>{{cite web
| url = http://www.alien.net.au/irc/chanmodes.html
| title = IRC Channel Modes List
| access-date = 10 April 2011
| last = Butcher
| first = Simon
| date = 12 January 2005
| publisher = alien.net.au
}}</ref><ref>{{cite web
| url = http://www.alien.net.au/irc/servermodes.html
| title = IRC Server Modes List
| access-date = 10 April 2011
| last = Butcher
| first = Simon
| date = 12 January 2005
| publisher = alien.net.au
}}</ref><ref>{{cite web
|url = http://webtoman.com/opera/panel/ircdmodes.html
|title = IRCd Modes
|access-date = 10 April 2011
|last = Olsen
|first = Tommy
|publisher = webtoman.com
|archive-url = https://web.archive.org/web/20111015190740/http://webtoman.com/opera/panel/ircdmodes.html
|archive-date = 15 October 2011
|url-status = dead
}}</ref>


===Channel operators===
There are also users whose privileges extend to whole servers or networks of servers; these are called [[IRC operator|IRC Operators]]. On some IRC implementations, IRC operators are also given channel operator status in every channel, although many people believe that administration of channels and administration of the network should be kept separate, and that IRC operator status does not confer the right to interfere with a particular channel's operation.
A ''channel operator'' is a [[Client (computing)|client]] on an [[IRC channel]] that manages the channel.
IRC channel operators can be easily seen by the symbol or icon next to their name (varies by client implementation, commonly a "@" symbol prefix, a green circle, or a Latin letter "+o"/"o").
On most networks, an operator can:
* Kick a user.
* Ban a user.
* Give another user IRC Channel Operator Status or IRC Channel Voice Status.
* Change the IRC Channel topic while channel mode +t is set.
* Change the IRC Channel Mode locks.


===IRC operators===
Because IRC connections are unencrypted and typically span long time periods, they are an attractive target for malicious hackers. Because of this, careful security policy is necessary to ensure that an IRC network is not susceptible to an attack such as an [[IRC takeover war]]. IRC networks also [[k-line]] or [[gline|g-line]] users or networks that tend to have a harming effect.
{{main|Internet Relay Chat operator}}
There are also users who maintain elevated rights on their local server, or the entire network; these are called IRC operators,<ref name="rfc 1459 1.2.1 operators">{{cite IETF
| rfc = 1459
|title=Internet Relay Chat Protocol
| sectionname = Operators
| section = 1.2.1
| page = 5
| idanchor = ietf
}}</ref> sometimes shortened to IRCops or Opers (not to be confused with channel operators). As the implementation of the IRCd varies, so do the privileges of the IRC operator on the given IRCd. RFC 1459<ref name="rfc 1459 1.2.1 operators" /> claims that IRC operators are "a necessary evil" to keep a clean state of the network, and as such they need to be able to disconnect and reconnect servers. Additionally, to prevent malicious users or even harmful automated programs from entering IRC, IRC operators are usually allowed to disconnect clients and completely ban IP addresses or complete subnets. Networks that carry services (NickServ et al.) usually allow their IRC operators also to handle basic "ownership" matters. Further privileged rights may include overriding channel bans (being able to join channels they would not be allowed to join, if they were not opered), being able to op themselves on channels where they would not be able without being opered, being auto-opped on channels always and so forth.


===Hostmasks===
IRC served as an early laboratory for many kinds of Internet attacks, such as using fake [[ICMP]] unreachable messages to break [[Transmission Control Protocol|TCP]]-based IRC connections ("[[nuking]]") to annoy users or facilitate [[IRC takeover|takeover]]s.
A hostmask is a unique identifier of an IRC [[client (computing)|client]] connected to an IRC [[Server (computing)|server]].<ref name="thiedeke-2003">{{cite book
| last = Thiedeke
| first = Udo
| title = Virtuelle Gruppen: Charakteristika und Problemdimensionen
| chapter-url = https://books.google.com/books?id=aQ74THYRyYsC&q=hostmask&pg=PA315
| access-date = 30 March 2010
| edition = 2nd
| date = 23 September 2003
| publisher = {{Interlanguage link|Springer VS|de}}
| language = de
| isbn = 978-3-531-33372-4
| pages = 314, 337
| chapter = Nicola Döring, Alexander Schestag
}}</ref><ref name="rogers-2005">{{cite book
| last = Rogers
| first = Russ
| editor-last = Devost
| editor-first = Matthew G.
| title = Hacking a Terror Network: The Silent Threat of Covert Channels
| chapter-url = https://books.google.com/books?id=e3ggsGgTzUgC&q=Hostmask+IRC&pg=PA10
| access-date = 30 March 2010
| edition = 1st
| date = 1 December 2004
| publisher = Syngress Publishing
| location = [[Rockland, Massachusetts]]
| isbn = 978-1-928994-98-5
| page = 10
| chapter = The Mind of Terror
}}</ref> IRC [[IRCd|servers]], [[Internet Relay Chat services|services]], and other clients, including [[Internet Relay Chat bot|bots]], can use it to identify a specific IRC session.


The format of a hostmask is <code>nick!user@host</code>. The hostmask looks similar to, but should not be confused with an [[e-mail address]].
===Abuse prevention: Timestamping vs. nick/channel delay protocol===
One of the most contentious technical issues surrounding IRC implementations, which survives to this day, is the merit of "Nick/Channel Delay" vs. "TimeStamp" protocols. Both methods exist to solve the problem of [[denial-of-service attack]]s, but take very different approaches.


The nick part is the nickname chosen by the user and may be changed while connected.
The problem with the original IRC protocol as implemented was that when two servers split and rejoined, the two sides of the network would simply merge their channels. If a user could join on a "split" server, where a channel which existed on the other side of the network was empty, and gain operator status, they would become a channel operator of the "combined" channel after the netsplit ended; if a user took a nickname which existed on the other side of the network, the server would kill both users when rejoining.
The user part is the username reported by [[ident protocol|ident]] on the client.<ref name="petersen-2002">{{cite book
| editor-last = Petersen
| editor-first = Julie K.
| title = The Telecommunications Illustrated Dictionary
| chapter-url = https://books.google.com/books?id=b2mMzS0hCkAC&q=Hostmask&pg=PA500
| access-date = 30 March 2010
| edition = 2nd
| date = 29 May 2002
| publisher = [[CRC Press]]
| isbn = 978-0-8493-1173-4
| page = 500
| chapter = Internet Relay Chat
}}</ref> If ident is not available on the client, the username specified when the client connected is used after being prefixed with a [[tilde]].<ref name="freenode faq">{{cite web
| url = http://freenode.net/faq.shtml
| title = Frequently-Asked Questions
| access-date = 30 March 2010
| publisher = [[freenode]]
| archive-url = https://web.archive.org/web/20100326082146/http://freenode.net/faq.shtml
| archive-date = 26 March 2010
| url-status = dead
}}</ref>


The host part is the [[hostname]] the client is connecting from. If the [[IP address]] of the client cannot be resolved to a valid [[hostname]] by the server, it is used instead of the hostname.
This was often abused to "mass-kill" all users on a channel, thus creating "opless" channels where no operators were present to deal with abuse. Apart from causing problems within IRC, this encouraged people to conduct denial of service attacks against IRC servers in order to cause netsplits, which they would then abuse.


Because of the [[privacy]] implications of exposing the IP address or hostname of a client, some [[IRCd|IRC daemons]] also provide privacy features, such as InspIRCd or UnrealIRCd's "+x" mode. This [[Cryptographic hash function|hashes]] a client IP address or masks part of a client's hostname, making it unreadable to users other than [[#IRC operators|IRCops]]. Users may also have the option of requesting a "virtual host" (or "vhost"), to be displayed in the hostmask to allow further anonymity. Some IRC networks, such as [[Libera Chat]] or [[Freenode]], use these as "cloaks" to indicate that a user is affiliated with a group or project.<ref>{{cite web
====Nick/channel delay====
| url = http://meta.wikimedia.org/wiki/IRC/Cloaks
The nick/channel delay (abbreviated ND/CD) solution to this problem was very simple. After a user signed off and the nickname became available, or a channel ceased to exist because all its users left (as often happens during a netsplit), the server would not allow any user to use that nickname or join that channel, respectively, until a certain period of time (the ''delay'') had passed. The idea behind this was that even if a netsplit occurred, it was useless to an abuser because they could not take the nickname or gain operator status on a channel, and thus no collision of a nickname or 'merging' of a channel could occur. To some extent, this inconvenienced legitimate users, who might be forced to briefly use a different name (appending an underscore was popular) after rejoining.
| title = IRC/Cloaks
| access-date = 27 November 2011
| publisher = [[Meta-wiki]]
}}</ref>


====Timestamping====
===URI scheme===
There are three provisional recognized [[Uniform resource identifier|uniform resource identifier (URI)]] schemes for Internet Relay Chat: <code>irc</code>, <code>ircs</code>, and <code>irc6</code>.<ref>{{cite web
The alternative, the timestamp or ''TS'' protocol, took a different approach. Every nickname and channel on the network was assigned a timestamp -- the date and time when it was created. When a netsplit occurred, two users on each side were free to use the same nickname or channel, but when the two sides were joined, only one could survive. In the case of nicknames, the newer user, according to their TS, was killed; when a channel collided, the members (users on the channel) were merged, but the channel operators on the "losing" side of the split were de-opped.
| url = https://www.iana.org/assignments/uri-schemes.html
| title = Uniform Resource Identifier (URI) Schemes
| publisher = Internet Assigned Numbers Authority | access-date = 14 October 2012
}}</ref> When supported, they allow [[hyperlink]]s of various forms, including
<nowiki>irc://<host>[:<port>]/[<channel>[?<channel_keyword>]]</nowiki>
<nowiki>ircs://<host>[:<port>]/[<channel>[?<channel_keyword>]]</nowiki>
<nowiki>irc6://<host>[:<port>]/[<channel>[?<channel_keyword>]]</nowiki>
(where items enclosed within brackets ([,]) are optional) to be used to (if necessary) connect to the specified host (or network, if known to the IRC client) and join the specified channel.<ref>{{cite IETF
| title = Uniform Resource Locator Schemes for Internet Relay Chat Entities
| draft = draft-butcher-irc-url-04
| last = Butcher
| first = Simon
|date=January 2003
| publisher = [[Internet Engineering Task Force|IETF]]
| access-date = 10 April 2011
}}</ref> (This can be used within the client itself, or from another application such as a Web browser). irc is the default URI, irc6 specifies a connection to be made using IPv6, and ircs specifies a secure connection.


Per the specification, the usual [[hash symbol]] (#) will be prepended to channel names that begin with an [[alphanumeric]] character—allowing it to be omitted. Some implementations (for example, mIRC) will do so ''unconditionally'' resulting in a (usually unintended) extra (for example, ##channel), if included in the URL.
TS is a much more complicated protocol than ND/CD, both in design and implementation, and despite having gone through several revisions, some implementations still have problems with "desyncs" (where two servers on the same network disagree about the current state of the network), and allowing too much leniency in what was allowed by the 'losing' side. Under the original TS protocols, for example, there was no protection against users setting bans or other modes in the losing channel which would then be merged when the split rejoined, even though the users who had set those modes were no longer opped. Some modern TS-based IRC servers have also incorporated some form of ND and/or CD in addition to timestamping in an attempt to further curb abuse.


Some implementations allow multiple channels to be specified, separated by commas.<ref>{{cite web |url=https://www.npmjs.com/package/node-irc |title=node-irc |website=npm |date=26 January 2020 |access-date=30 July 2021 }}</ref>
There is not, and likely never will be, a consensus on timestamping vs. delay; however most networks today use the timestamping approach. It was part of the issues and disagreements which caused several servers to split away from [[EFnet]] and form the newer [[IRCnet]] (EFnet after the split moving to a TS protocol, and IRCnet using ND/CD), and supporters on both sides were known for heated arguments regarding the merits of their solution.


==Challenges==
==Networks and URLs==
Issues in the original design of IRC were the amount of shared state data<ref>{{cite IETF
{{IRC networks}}
| rfc = 1324
Today there are several thousand running IRC networks in the world. They run various implementations of IRC [[server (computing)|servers]], and are administered by various groups of [[IRC operator]]s, but the protocol exposed to IRC users is very similar, and all IRC networks can be accessed by the same client software.
|title=A Discussion on Computer Network Conferencing
| sectionname = Size
| section = 2.5.1
| pages = 5 – 6
| idanchor = ietf
}}</ref><ref>{{cite IETF
| rfc = 2810
|title=Internet Relay Chat: Architecture
| sectionname = Scalability
| section = 6.1
| page = 7
| idanchor = ietf
}}</ref> being a limitation on its scalability,<ref>{{harvnb|Loesch|2003}} 1.2.1 Growth</ref> the absence of unique user identifications leading to the nickname collision problem,<ref>{{cite IETF
| rfc = 1324
|title=A Discussion on Computer Network Conferencing
| sectionname = User identification
| section = 5.4.1
| page = 10
| idanchor = ietf
}}</ref> lack of protection from [[netsplit]]s by means of cyclic routing,<ref>{{cite IETF
| rfc = 1324
|title=A Discussion on Computer Network Conferencing
| sectionname = Trees and cycles
| section = 5.4.2
| page = 10
| idanchor = ietf
}}</ref><ref>{{harvnb|Loesch|2003}} 1.2.2 Network failures</ref> the trade-off in scalability for the sake of real-time user presence information,<ref>{{cite IETF
| rfc = 1324
|title=A Discussion on Computer Network Conferencing
| sectionname = State Information problems
| section = 2.1
| page = 4
| idanchor = ietf
}}</ref> protocol weaknesses providing a platform for abuse,<ref>{{harvnb|Loesch|2003}} 1.2.3 Sociological and security aspects</ref> no transparent and optimizable message passing,<ref>{{cite IETF
| rfc = 1324
|title=A Discussion on Computer Network Conferencing
| sectionname = Message passing
| section = 5.2.1
| page = 7
| idanchor = ietf
}}</ref> and no encryption.<ref>{{cite IETF
| rfc = 1324
|title=A Discussion on Computer Network Conferencing
| sectionname = Conference security
| section = 5.2.4
| page = 8
| idanchor = ietf
}}</ref> Some of these issues have been addressed in ''Modern IRC''.


===Attacks===
One can join servers by clicking on a <nowiki>irc://irc.server.net:port/channel</nowiki> web [[Hyperlink|link]].
Because IRC connections may be unencrypted and typically span long time periods, they are an attractive target for [[Denial-of-service attack|DoS/DDoS attackers]] and [[Hacker (computer security)|hackers]]. Because of this, careful security policy is necessary to ensure that an IRC network is not susceptible to an attack such as a [[Internet Relay Chat takeover|takeover]] war. IRC networks may also [[K-line (IRC)|K-line]] or [[G-line]] users or servers that have a harming effect.


Some IRC servers support [[Transport Layer Security|SSL/TLS]] connections for security purposes. This helps stop the use of [[packet sniffer]] programs to obtain the passwords of IRC users, but has little use beyond this scope due to the public nature of IRC channels. SSL connections require both client and server support (that may require the user to install SSL binaries and IRC client specific patches or modules on their computers). Some networks also use SSL for server-to-server connections, and provide a special channel flag (such as <code>+S</code>) to only allow SSL-connected users on the channel, while disallowing operator identification in clear text, to better utilize the advantages that SSL provides.<ref>{{cite web
The largest IRC networks have traditionally been grouped in ''The Big Four'' &mdash; a designation for networks that top the statistics. The Big Four networks change periodically, but due to the community nature of IRC there are a large number of other networks for users to choose from.
| url = http://esper.net/help.php
| title = Getting Help on EsperNet
| publisher = The EsperNet IRC Network
| access-date = 31 July 2012
}}</ref><ref>{{cite web
| url = http://www.dal.net/news/shownews.php?id=67
| title = New Feature: SSL For Users
| author = brandon
| date = 18 May 2010
| publisher = DALnet
| access-date = 31 July 2012
}}</ref>


IRC served as an early laboratory for many kinds of Internet attacks, such as using fake [[Internet Control Message Protocol|ICMP]] unreachable messages to break [[Transmission Control Protocol|TCP]]-based IRC connections ([[Nuke (computer)|nuking]]) to annoy users or facilitate [[Internet Relay Chat takeover|takeovers]].
'''The Big Four''':
* [[EFnet]]
* [[IRCnet]]
* [[QuakeNet]]
* [[Undernet]]


===Abuse prevention===
Some of the other lesser (but still large) networks include, but are not limited to:
One of the most contentious technical issues surrounding IRC implementations, which survives to this day, is the merit of "Nick/Channel Delay" vs. "Timestamp" protocols. Both methods exist to solve the problem of denial-of-service attacks, but take very different approaches.
* [[UniBG]]
The problem with the original IRC protocol as implemented was that when two servers split and rejoined, the two sides of the network would simply merge their channels. If a user could join on a "split" server, where a channel that existed on the other side of the network was empty, and gain operator status, they would become a channel operator of the "combined" channel after the [[netsplit]] ended; if a user took a nickname that existed on the other side of the network, the server would kill both users when rejoining (a "nick collision"). This was often abused to "mass-kill" all users on a channel, thus creating "opless" channels where no operators were present to deal with abuse. Apart from causing problems within IRC, this encouraged people to conduct denial-of-service attacks against IRC servers in order to cause [[netsplit]]s, which they would then abuse.
* [[DALnet]]
* [[Freenode]]
* WebChat
* [[GameSurge]]
* [[Rizon]]
* [[IRCHighway]]
* [[IRC-Hispano]]
* [[Enter The Game]]
* IrCQ-Net
* [[DeltaAnime]]
* [[AustNet]]
* [[OFTC]]
For network statistics, rankings, and a list of smaller networks, see [http://irc.netsplit.de/networks/ netsplit.de] and [http://searchirc.com/networks Search IRC]. For other articles on IRC networks, see [[:Category:IRC networks]].


{{anchor|delay}}
==Clients==
The '''nick delay''' (ND) and '''channel delay''' (CD) strategies aim to prevent abuse by delaying reconnections and renames. After a user signs off and the [[nickname]] becomes available, or a channel ceases to exist because all its users parted (as often happens during a [[netsplit]]), the server will not allow any user to use that nickname or join that channel, until a certain period of time (the ''delay'') has passed. The idea behind this is that even if a [[netsplit]] occurs, it is useless to an abuser because they cannot take the nickname or gain operator status on a channel, and thus no collision of a nickname or "merging" of a channel can occur. To some extent, this inconveniences legitimate users, who might be forced to briefly use a different name after rejoining (appending an [[underscore]] is popular).
[[Image:Ircnetz-Schema.svg|right|thumb|Scheme of an IRC-Network with normal clients (green), bots (blue) and bouncers (orange)]]
:''See [[list of IRC clients]] for more detail.''
[[mIRC]] is widely believed to be the most popular IRC client on Windows based systems. However, with the recent introduction of clients such as [[Bersirc]], [[KVIrc]], [[Trillian (instant messaging client)|Trillian]], [[Solar IRC]], [[Visual IRC]], and [[X-Chat]], mIRC is beginning to see much more competition. Many people still use mIRC most likely due to the fact that it has been around for quite some time and has a wide variety of scripts available.


The timestamp protocol is an alternative to nick/channel delays which resolves collisions using timestamped priority. Every nickname and channel on the network is assigned a timestamp{{spaced ndash}}the date and time when it was created. When a netsplit occurs, two users on each side are free to use the same nickname or channel, but when the two sides are joined, only one can survive. In the case of nicknames, the newer user, according to their TS, is killed; when a channel collides, the members (users on the channel) are merged, but the channel operators on the "losing" side of the split lose their channel operator status.
[[ircII]] is the canonical [[Unix]] IRC client, but its userbase has declined with the appearance of competing clients such as [[Enhanced Programmable ircII Client|ircII-EPIC]], [[BitchX]], [[irssi]], [[X-Chat]], etc. For [[Mac OS X]], the most widely-used clients are [[Ircle]], [[Snak]], [[Colloquy (IRC client)|Colloquy]] and [[Conversation (IRC client)|Conversation]]. OS X can also run most Unix-like [[command line]] and [[X Window System|X11]] IRC clients. Recently a special build of [[X-Chat]] has been gaining ground on OS X systems, [[X-Chat Aqua]].


TS is a much more complicated protocol than ND/CD, both in design and implementation, and despite having gone through several revisions, some implementations still have problems with "desyncs" (where two servers on the same network disagree about the current state of the network), and allowing too much leniency in what was allowed by the "losing" side. Under the original TS protocols, for example, there was no protection against users setting bans or other modes in the losing channel that would then be merged when the split rejoined, even though the users who had set those modes lost their channel operator status. Some modern TS-based IRC servers have also incorporated some form of ND and/or CD in addition to timestamping in an attempt to further curb abuse.
[[ChatZilla]] is the [[Mozilla]] IRC client.


Most networks today use the timestamping approach. The timestamp versus ND/CD disagreements caused several servers to split away from [[EFnet]] and form the newer [[IRCnet]]. After the split, EFnet moved to a TS protocol, while IRCnet used ND/CD.
[[Opera (web browser)|Opera]] also has a built-in IRC client.


In recent versions of the IRCnet ircd, as well as ircds using the TS6 protocol (including Charybdis), ND has been extended/replaced by a mechanism called SAVE. This mechanism assigns every client a [[Unique identifier|UID]] upon connecting to an IRC server. This ID starts with a number, which is forbidden in nicks (although some ircds, namely IRCnet and InspIRCd, allow clients to switch to their own UID as the nickname).
For a novice user, '''mIRC''' and other large-window clients might seem to be unnecessarily large and complex. New users may prefer [[instant messaging]] clients like [[Miranda IM]] or [[Trillian (instant messaging client)|Trillian]], providing a familiar interface to the IRC application. The multi-platform open-source instant messaging client [[Gaim]] also supports connection to the IRC networks.


If two clients with the same nickname join from different sides of a netsplit ("nick collision"), the first server to see this collision will force ''both'' clients to change their nick to their UID, thus saving both clients from being disconnected. On IRCnet, the nickname will also be locked for some time (ND) to prevent both clients from changing back to the original nickname, thus colliding again.
A framework designed to incorporate IRC into various other applications, such as games, is [[LibIRC]], although it is still heavily under development.


===Bots===
==Clients==
There are also many automated clients, called [[IRC bot|bots]]. The first bot was written by [[Greg Lindahl]] and provided moderation for the game of [[Hunt the Wumpus]]. As bots evolved, they began to serve as permanent points of contact for information exchange and protection agents for the channels they served, because of their superior speed when compared to humans. Presently, although many of these functions are often delegated to network-provided [[IRC services|services]] which allow for registration and management of both nicknames and channels, bots still remain popular and continue to be adapted to new and unexpected tasks.


===Client software===
Bots have been written in a variety of languages, and a wide array of implementations exist, although recently and partly due to the overwhelming popularity of the [[mIRC]] IRC client, an increasing number of bots are written using the [[mIRC script|mIRC scripting language]] and run inside the client. One of the most popular 'standalone' is [[Eggdrop]] written in the [[C programming language]].
{{Further|Comparison of Internet Relay Chat clients}}
[[File:Ircnetz-Schema.svg|right|thumb|Scheme of an IRC network with [[Client (computing)|normal clients]] (green), [[IRC bot|bots]] (blue) and [[Bouncer (networking)|bouncers]] (orange)]]


Client software exists for various [[operating system]]s or software packages, as well as web-based or inside games. Many different clients are available for the various operating systems, including [[Microsoft Windows|Windows]], [[Unix]] and [[Linux]], [[macOS]] and mobile operating systems (such as [[iOS]] and [[Android (operating system)|Android]]). On Windows, [[mIRC]] is one of the most popular clients.<ref>{{cite book|last=Smith|first=Roderick W.|title=The Multi-Boot Configuration Handbook|chapter-url=https://books.google.com/books?id=OuPtI5fHhBoC|access-date=25 July 2010|series=Handbook Series|date=8 April 2000|publisher=[[Que Publishing]]|location=[[Upper Saddle River, New Jersey]]|isbn=978-0-7897-2283-6|page=[https://archive.org/details/isbn_9780789722836/page/289 289]|chapter=The Internet: Using IRC to Get Help|quote=mIRC is one of the most popular Windows IRC clients.|url=https://archive.org/details/isbn_9780789722836/page/289}}</ref> Some [[Linux]] distributions come with an IRC client preinstalled, such as [[Linux Mint]] which comes with [[HexChat]] preinstalled.
Most modern [[IRC services]] typically implement bot-like interfaces, through which users can communicate with and control the functionality.


Some programs which are extensible through [[plug-in (computing)|plug-ins]] also serve as platforms for IRC clients. For instance, a client called [[ERC (software)|ERC]], written entirely in [[Emacs Lisp]], is included in v.22.3 of Emacs. Therefore, any platform that can run Emacs can run ERC.
Some bots were created for malevolent uses, such as flooding or taking over channels, occupying them from rightful owner(s). Those have been put on a strict laws in the later years, but not in the early times when they were mostly a new phenomenon.

A number of [[web browser]]s have built-in IRC clients, such as:
* [[Opera (web browser)|Opera]] ([[Features of the Opera web browser#Legacy features|version 12.18 and earlier]])<ref>{{cite web| url=http://operawiki.info/OperaIRC| title=Opera Browser Wiki: IRC Client| access-date=10 April 2011| archive-url=https://web.archive.org/web/20110317014824/http://operawiki.info/OperaIRC| archive-date=17 March 2011| url-status=dead}}</ref> and the
* [[ChatZilla]] add-on for Mozilla [[Firefox]] (for Firefox 56 and earlier; included as a built-in component of [[SeaMonkey]]).
Web-based clients, such as [[Mibbit]] and open source KiwiIRC, can run in most browsers.

Games such as ''[[War§ow]]'',<ref>{{cite web
| url = http://www.warsow.net/wiki/index.php?title=IRC_Module
| title = Warsow Wiki: IRC Module
| access-date = 10 April 2011
| archive-url = https://web.archive.org/web/20110425010535/http://www.warsow.net/wiki/index.php?title=IRC_Module
| archive-date = 25 April 2011
| url-status = dead
}}</ref> ''[[Unreal Tournament]]'' (up to [[Unreal Tournament 2004]]),<ref>{{cite web
| url = http://www.bcchardware.com/index.php?option=com_content&task=view&id=35&Itemid=40
| title = UT2004 Review
| access-date = 10 April 2011
| last = Guenter
| first = Daniel
| date = 21 June 2004
| publisher = BCCHardware
}}</ref> ''[[Uplink (video game)|Uplink]]'',<ref>{{cite web
| url = http://guide.modlink.net/section11.php
| title = The Ultimate Uplink Guide
| access-date = 10 April 2011
}}</ref> ''[[Spring Engine]]''-based games, [[0 A.D. (video game)|0 A.D.]] and ''ZDaemon'' have included IRC.<ref>{{cite web
| url = https://doomwiki.org/wiki/ZDaemon#Other_utilities
| title = ZDaemon – The Doom Wiki: Other utilities
| access-date = 10 April 2011
}}</ref>

[[Ustream]]'s chat interface is [[IRC]] with custom authentication<ref>{{cite web
|url = http://ustream-helpers.com/how-to/ircclient
|title = How to setup &#91;sic&#93; an IRC client to connect and login &#91;sic&#93; to Ustream
|access-date = 27 April 2013
|date = 29 January 2012
|publisher = Ustream-Helpers
|archive-date = 21 March 2013
|archive-url = https://web.archive.org/web/20130321161543/http://ustream-helpers.com/how-to/ircclient
|url-status = dead
}}</ref> as well as [[Twitch (service)|Twitch]]'s (formerly Justin.tv).<ref>{{cite web
| url = http://www.liquidsilver.org/2010/06/ustream-v-justin/
| title = Ustream vs. Justin.tv
| access-date = 13 July 2011
| date = 20 June 2010
| publisher = LiquidSilver
| author = Mauldor
}}</ref><ref>{{cite web
|title=Twitch IRC
|url=https://help.twitch.tv/customer/portal/articles/1302780-twitch-irc
|website=Twitch Help Center
|access-date=30 October 2017
|date=7 April 2017
|archive-date=12 February 2019
|archive-url=https://web.archive.org/web/20190212150600/https://help.twitch.tv/customer/portal/articles/1302780-twitch-irc
|url-status=dead
}}</ref>

===Bots===
{{Main|IRC bot}}
A typical use of bots in IRC is to provide [[Internet Relay Chat services|IRC services]] or specific functionality within a channel such as to host a chat-based game or provide notifications of external events. However, some IRC bots are used to launch malicious attacks such as denial of service, spamming, or exploitation.<ref>{{cite web|last1=Canavan|first1=John|title=The Evolution of Malicious IRC Bots|url=http://www.symantec.com/avcenter/reference/the.evolution.of.malicious.irc.bots.pdf|archive-url=https://web.archive.org/web/20060315074124/http://www.symantec.com/avcenter/reference/the.evolution.of.malicious.irc.bots.pdf|url-status=dead|archive-date=15 March 2006|website=[[Broadcom#Symantec enterprise security|Symantec]]|publisher=Symantec Security Response}}</ref>


===Bouncer===
===Bouncer===
{{Main|BNC (software)}}
A program that runs as a [[daemon (computer software)|daemon]] on a [[Server (computing)|Server]] and functions as a persistent [[proxy server|proxy]] is known as a [[bouncer (IRC)|bouncer]]. A bouncer's purpose is to maintain a connection to an IRC server, acting as a relay between it and the connecting client. Should the client lose network connectivity, the bouncer will archive all traffic for later delivery, allowing the user to resume his IRC session without externally perceptible disruption. Two of the most popular bouncers are [http://mind.riot.org/muh/ muh] and [http://www.psybnc.info/ psyBNC]. Muh is exclusively for single user connections, while psyBNC supports multiple users. Another feature-rich bouncer is [http://znc.sourceforge.net ZNC].
A program that runs as a [[daemon (computer software)|daemon]] on a [[Server (computing)|server]] and functions as a persistent [[proxy server|proxy]] is known as a BNC or bouncer. The purpose is to maintain a connection to an IRC server, acting as a relay between the server and client, or simply to act as a proxy.{{Citation needed|date=April 2011}} Should the client lose network connectivity, the BNC may stay connected and archive all traffic for later delivery, allowing the user to resume their IRC session without disrupting their connection to the server.<ref>{{cite web
| url = http://www.psybnc.at/readme.txt
| title = psyBNC Readme
| access-date = 10 April 2011
| publisher = psybnc.at
}}</ref>

Furthermore, as a way of obtaining a bouncer-like effect, an IRC client (typically [[text-based]], for example [[Irssi]]) may be run on an always-on server to which the user connects via [[secure shell|ssh]]. This also allows devices that only have ssh functionality, but no actual IRC client installed themselves, to connect to the IRC, and it allows sharing of IRC sessions.<ref>{{cite web
| url = http://chriscarey.com/wordpress/2009/07/18/irc-with-irssi-proxy-screen/
| title = IRC with irssi-proxy + screen
| access-date = 10 April 2011
| last = Carey
| first = Chris
| date = 18 July 2009
| publisher = chriscarey.com
}}</ref>

To keep the IRC client from quitting when the ssh connection closes, the client can be run inside a [[terminal multiplexer]] such as [[GNU Screen]] or [[tmux]], thus staying connected to the IRC network(s) constantly and able to log conversation in channels that the user is interested in, or to maintain a channel's presence on the network. Modelled after this setup, in 2004 an IRC client following the [[client–server model|client–server]], called [[Smuxi]], was launched.<ref>{{cite web
| url = http://www.smuxi.org/blog/show/Detachable_Frontend_Core_Rewrite__UML__Windows_Port_kicking_Glade
| title = Detachable Frontend (Core Rewrite) / UML / Windows Port (kicking Glade)
| access-date = 25 July 2010
| date = 25 December 2004
| publisher = smuxi.org
}}</ref><ref>{{cite web
| url = http://www.smuxi.org/page/About
| title = About Smuxi
| access-date = 10 April 2011
| publisher = smuxi.org
}}</ref>


==Search engines==
==Search engines==
There are numerous search engines available to aid the user in finding what they are looking for on IRC.<ref>{{cite book
There are numerous search engines available to aid the user in finding what they are looking for on IRC. Generally the search engine consists of two parts. First being the "back-end" or the "spider/crawler". This is the work horse of the search engine. It is responsible for crawling IRC servers to index the information being sent across them. The information that is indexed usually consists solely of channel text (text that is publicly displayed in public channels). The storage method is usually some sort of relational database, like MySQL or Oracle. Which database that is used depends exclusively on the programming language in which the spider bot is written. The second part to the equation is the front-end "search engine". This search engine is the user interface to the database. It supplies the user with a way to search the database of indexed information to retrieve the data they are looking for. These front-end search engines can also be coded in numerous programming languages. The more popular languages for such search engines and indexing spiders are: Perl, PHP, ASP and C. Most search engines have their own spider that is a single application that is responsible for crawling IRC and indexing data itself; however, others are "user based" indexers.
| last = Mutton
| first = Paul
| title = IRC Hacks
| edition = 1st
| date = 27 July 2004
| publisher = [[O'Reilly Media]]
| location = [[Sebastopol, California]]
| isbn = 978-0-596-00687-7
| pages = 44–46
| chapter = Users and Channels
}}</ref><ref>{{cite book |last = Wang
|first = Wallace
|title = Steal this File Sharing Book
|edition = 1st
|date = 25 October 2004
|publisher = [[No Starch Press]]
|location = [[San Francisco, California]]
|isbn = 978-1-59327-050-6
|pages = [https://archive.org/details/stealthisfilesha00wang/page/65 65–67]
|chapter = Instant Messaging and Online Chat Rooms: Internet Relay Chat (IRC)
|chapter-url = https://archive.org/details/stealthisfilesha00wang/page/65
}}</ref> Generally the search engine consists of two parts, a "back-end" (or "spider/crawler") and a front-end "search engine".


The back-end (spider/webcrawler) is the work horse of the search engine. It is responsible for crawling IRC servers to index the information being sent across them. The information that is indexed usually consists solely of channel text (text that is publicly displayed in public channels). The storage method is usually some sort of relational database, like [[MySQL]] or [[Oracle database|Oracle]].{{Citation needed|date=January 2010}}
What this means is that they rely on users to install their "add-on" to their IRC client (like mIRC) and this add-on is what sends the database the channel information of whatever channel[s] the user happens to be on. IRC search engines have completely automated the process of finding information on IRC and have thus contributed greatly to the popularity of IRC in recent years.


The front-end "search engine" is the user interface to the database. It supplies users with a way to search the database of indexed information to retrieve the data they are looking for. These front-end search engines can also be coded in numerous programming languages.
Some of the more popular IRC search engines are:
*[http://www.ircdig.com/ IRCDig]
*[http://www.ircspy.com/ IRCSpy]
*[http://www.gogloom.com/ Gogloom]
*[http://www.searchirc.com/ SearchIRC]
*[http://irc.netsplit.de/ Netsplit.de]


Most search engines have their own spider that is a single application responsible for crawling IRC and indexing data itself; however, others are "user based" indexers. The latter rely on users to install their "add-on" to their IRC client; the add-on is what sends the database the channel information of whatever channels the user happens to be on.{{Citation needed|date=August 2009}}
==Modern IRC==

IRC has changed much over its life on the Internet. New server software has added a multitude of new features.
Many users have implemented their own [[ad hoc]] search engines using the logging features built into many IRC clients. These search engines are usually implemented as bots and dedicated to a particular channel or group of associated channels.


==Character encoding==
*[[IRC services|Services]]: Network-operated bots to facilitate registration of nicknames and channels, sending messages for offline users and network operator functions.
IRC still lacks a single globally accepted standard convention for how to transmit characters outside the 7-bit [[ASCII]] repertoire.
*Extra Modes: While the original IRC system used a set of standard user and channel modes, new servers add many new modes for such features as removing color codes from text, or obscuring a user's [[hostmask]] ("cloaking") to protect from [[denial of service]] attacks.
IRC servers normally{{Clarify|date=July 2009}} transfer messages from a client to another client just as byte sequences, without any interpretation or recoding of [[character (computing)|characters]]. The IRC protocol (unlike e.g. [[MIME]] or [[HTTP]]) lacks mechanisms for announcing and negotiating character encoding options. This has put the responsibility for choosing the appropriate character codec on the client. In practice, IRC channels have largely used the same character encodings that were also used by operating systems (in particular [[Unix]] derivatives) in the respective language communities:
*Proxy Detection: Most modern servers support detection of users attempting to connect through an insecure (misconfigured or exploited) [[proxy]], which can then be denied a connection. An example is the [http://www.blitzed.org/proxy Blitzed Open Proxy Monitor] or BOPM, used by several networks.
* '''7-bit era:''' In the early days of IRC, especially among [[North Germanic languages|Scandinavian]] and [[Finnish language]] users, national variants of [[ISO 646]] were the dominant [[character encoding]]s. These encode non-ASCII characters like Ä Ö Å ä ö å at code positions 0x5B 0x5C 0x5D 0x7B 0x7C 0x7D ([[US-ASCII]]: '''[''' '''\''' ''']''' '''{''' '''|''' '''}'''). That is why these codes are always allowed in nicknames. According to RFC 1459, { | } in nicknames should be treated as lowercase equivalents of [ \ ] respectively.<ref name="rfc 1459 2.2 character codes" /> By the late 1990s, the use of 7-bit encodings had disappeared in favour of [[ISO 8859-1]], and such equivalence mappings were dropped from some IRC daemons.
*Additional Commands: New commands can be such things as shorthand commands to issue commands to Services, to network operator only commands to manipulate a user's hostmask.
* '''8-bit era:''' Since the early 1990s, 8-bit encodings such as [[ISO 8859-1]] have become commonly used for European languages. Russian users had a choice of [[KOI8-R]], [[ISO 8859-5]]{{Citation needed|date=October 2008}}<!-- Some networks offer MacCyrillic under the name «ISO 8859-5». But MacCyrillic has virtually nothing common with ISO 8859-5, this naming confusion just indicates the depth of programmers' ignorance. --Incnis Mrsi --> and [[CP1251]], and since about 2000, modern Russian IRC networks convert between these different commonly used encodings of the [[Cyrillic script]].
*[[Encryption]]: For the client-to-server leg of the connection [[Transport Layer Security|SSL]] might be used (messages cease to be secure once they are relayed to other users on standard connections, but it makes [[Man in the middle attack|eavesdropping]] on or wiretapping an individual's IRC sessions difficult). For client-to-client communication, [[secure Direct Client-to-Client|SDCC]] (Secure [[Direct Client-to-Client|DCC]]) can be used.
* '''Multi-byte era:''' For a long time, East Asian IRC channels with logographic scripts in China, Japan, and Korea have been using multi-byte encodings such as [[Extended Unix Code|EUC]] or [[ISO-2022-JP]]. With the common migration from ISO 8859 to [[UTF-8]] on Linux and Unix platforms since about 2002, UTF-8 has become an increasingly popular substitute for many of the previously used 8-bit encodings in European channels. Some IRC clients are now capable of reading messages both in ISO 8859-1 or UTF-8 in the same channel, heuristically autodetecting which encoding is used. The shift to UTF-8 began in particular on Finnish-speaking IRC ([[:fi:IRC#Merkistö|Merkistö]] <small>(Finnish)</small>).
*[[Ident]]: Provides identification to the IRC server.
*Connection Protocol: IRC can be connected to via [[IPv4]], the current standard version of the [[Internet Protocol]], or by [[IPv6]], the next-generation version of the Protocol.


Today, the UTF-8 encoding of [[Unicode]]/[[ISO 10646]] would be the most likely contender for a single future standard character encoding for all IRC communication, if such standard ever relaxed the 510-byte message size restriction. UTF-8 is ASCII compatible and covers the superset of all other commonly used [[coded character set]] standards.
==Forms of abuse==
Like any network open to the public, people with malicious intent can often be found on IRC networks. These people commonly utilize the following tactics:
* Denial of service attacks and netsplit abuses, described above.
* Responding to requests for help with potentially harmful instructions, such as:
:* Ctrl+Alt+Delete twice (forces a reboot in earlier versions of Windows)
:* Alt+F4 (closes current program in Windows)
:* Ctrl+F4 (closes current active window in mIRC)
:* Alt+Z (closes the current channel window in mIRC)
* Attempting to trick users into typing commands that will cause them to quit the server. For example: "Two friends are sitting in a garden: /exit and /quit. /exit walks away, who is left?"
* Impersonating service bots to trick users into revealing their password. For example: "Your account needs to be identified. Type /msg ChanServ` identify <password> to confirm your identity."
* Advertising channels that end in ",0" (such as #chat,0). A single JOIN request can join multiple channels separated by commas, and joining channel 0 will cause a user to part all channels.
* Taking advantage of some IRC clients' scripting features to hide malicious commands, most notably the mIRC $decode() function. (However this has been locked in later versions.)


==File sharing==
==File sharing==
Using scripts like [http://www.sysreset.com Sysreset], [http://upp.monkey-pirate.com/ UPP], [http://www.polaris-central.com Polaris] and, most commonly, [[OmenServe]], users can create file servers that allow them to share files with others. In addition to the normal pros and cons of file-sharing (see [[Copyright infringement of software]]), there are also groups that set up [[anime]] [[fansub]]bing networks, allowing American audiences to see anime that would normally be unavailable in English or outside of Japan.
Much like conventional [[Peer-to-peer|P2P]] file sharing, users can create file servers that allow them to share files with each other by using customised [[IRC bot]]s or scripts for their [[IRC client]]. Often users will group together to distribute [[warez]] via a network of IRC bots.<ref>{{cite news
| url = http://www.zdnet.com/news/pirated-movies-now-playing-on-a-server-near-you/122663
| title = Pirated movies: Now playing on a server near you
| access-date = 10 April 2011
| last = Vamosi
| first = Robert
| date = 8 May 2002
| work = [[ZDNet]]
}}</ref>


Due to the large number of people who use IRC for [[file sharing]], some think of IRC as a form of [[Peer-to-peer|P2P]] file sharing. Conversely, many users try to defeat this view by persistently discouraging it or refusing to help with it. Technically, IRC provides no file transfer mechanisms itself; file sharing is implemented by IRC ''clients'', typically using the [[Direct Client-to-Client]] (DCC) protocol, in which file transfers are negotiated through the exchange of private messages between clients. The vast majority of IRC clients feature support for DCC file transfers, hence the view that file sharing is an integral feature of IRC.
Technically, IRC provides no [[file transfer]] mechanisms itself; file sharing is implemented by IRC ''clients'', typically using the [[Direct Client-to-Client]] (DCC) protocol, in which file transfers are negotiated through the exchange of private messages between clients. The vast majority of IRC clients feature support for DCC file transfers, hence the view that file sharing is an integral feature of IRC.<ref>{{cite web
| url = http://www.macobserver.com/tip/2002/04/04.1.shtml
| title = IRC 101: What Is It & How Do I Use It?
| access-date = 10 April 2011
| last = Sasaki
| first = Darla
| date = 4 April 2002
| publisher = Macobserver.com
}}</ref> The commonplace usage of this protocol, however, sometimes also causes DCC spam. DCC commands have also been used to exploit vulnerable clients into performing an action such as disconnecting from the server or exiting the client.


==See also==
==See also==
* [[Chat room]]
{{Wikibooks|Internet Technologies|IRC}}
* [[Client-to-client protocol]]
*[[Bash.org]]
* [[Comparison of instant messaging protocols]]
*[[Bulletin board system|BBS]]
* [[Comparison of Internet Relay Chat clients|Comparison of IRC clients]]
*[[Chat]]
* [[Comparison of mobile Internet Relay Chat clients|Comparison of mobile IRC clients]]
*[[Chat room]]
*[[Comparison of IRC clients]]
<!-- * [[Comparison of IRC services]] -->
*[[Depot channel]]
* [[The Hamnet Players]]
* [[Internet slang]]
*[[Direct Client-to-Client]]
* [[List of IRC commands]]
**[[OmenServe]]
* [[Serving channel]]
*[[Idle RPG]] - A role playing game for IRC
* [[Matrix (protocol)]] and [[XMPP]], alternative chat protocols
*[[Instant messaging]]

*[[IRCd]]
== Citations ==
*[[Comparison of IRCds]]
{{Reflist}}
*[[Comparison of IRC services]]

*[[IRC Services]]
== General bibliography ==
** By-service:
* {{cite IETF
*** [[ChanServ]]
| title = A Discussion on Computer Network Conferencing
*** [[NickServ]]
| rfc = 1324
*** [[MemoServ]]
| last = Reed
*** [[OperServ]]
| first = Darren
*** [[StatServ]]
|date=May 1992
*** [[LoveServ]]
| publisher = [[Internet Engineering Task Force|IETF]]
*** [[HelpServ]]
| access-date = 30 October 2009
*** [[HostServ]]
| ref = ietf
** Services daemons:
}}
*** [[Anope]]
* {{cite IETF
*** [[Atheme]]
| title = Internet Relay Chat Protocol
*** [[Epona (IRC services)|Epona]]
| rfc = 1459
*** [[srvx]]
| last1 = Oikarinen
*[[IRCX]]
| first1 = Jarkko
*[[Internet forum]]
| author-link1 = Jarkko Oikarinen
*[[Emoticon|List of smiley codes]]
| last2 = Reed
*[[List of IRC commands]]
| first2 = Darren
*[[List of IRC clients]]
|date=May 1993
*[[Multicast]] - Unlike most other chat systems IRC implements a [[spanning tree protocol|spanning tree]] like multicast strategy.
| publisher = [[Internet Engineering Task Force|IETF]]
*[[Online chat]]
| access-date = 30 October 2009
*[[PalTalk]]
| ref = ietf
*[[Peer-to-peer]]
}}
* Alternatives
* {{cite IETF
**[[PSYC]]
| title = Internet Relay Chat: Architecture
**[[SILC (protocol)|SILC]]
| rfc = 2810
**[[Jabber|XMPP/Jabber]]
| last = Kalt
*[[QDB.US]]
| first = Christophe
*[[XDCC]]
|date=April 2000
*[[Shell account]]
| publisher = [[Internet Engineering Task Force|IETF]]
*[[Ident]]
| access-date = 30 October 2009
| ref = ietf
}}
* {{cite IETF
| title = Internet Relay Chat: Channel Management
| rfc = 2811
| last = Kalt
| first = Christophe
|date=April 2000
| publisher = [[Internet Engineering Task Force|IETF]]
| access-date = 30 October 2009
| ref = ietf
}}
* {{cite web
| last = Loesch
| first = Carl
| date = 17 July 2003
| title = Functionality Provided by Systems for Synchronous Conferencing
| publisher = psyc.eu
| url = http://www.psyc.eu/synconf
| access-date = 10 April 2011
}}

==Further reading==
* {{cite IETF
| title = Internet Relay Chat: Client Protocol
| rfc = 2812
| last = Kalt
| first = Christophe
|date=April 2000
| publisher = [[Internet Engineering Task Force|IETF]]
| access-date = 30 October 2009
}}
* {{cite IETF
| title = Internet Relay Chat: Server Protocol
| rfc = 2813
| last = Kalt
| first = Christophe
|date=April 2000
| publisher = [[Internet Engineering Task Force|IETF]]
| access-date = 30 October 2009
}}
* {{cite web
| url = http://www.ibiblio.org/pub/academic/communications/logs/
| title = Logs of major events in the online community
| access-date = 8 April 2011
| publisher = [[ibiblio]]
| location = [[Chapel Hill, North Carolina]]
}}
* {{cite web
| url = http://www.alien.net.au/irc/
| title = IRC technical information
| access-date = 10 April 2011
| last = Butcher
| first = Simon
| publisher = alien.net.au
}}


==External links==
==External links==
{{Wikibooks|Internet Technologies|IRC}}
*RFC 1459 - Technical Information about the IRC Protocol
{{Commons category|IRC}}
*[http://www.irchelp.org/ Large archive of IRC-related documents, somewhat EFNet biased]
* {{Curlie|Computers/Internet/Chat/IRC|IRC}}
*[http://www.irc.org IRC.org - Technical and Historical IRC6 information]
* [https://defs.ircdocs.horse/defs/numerics.html IRC Numerics List]
* [http://www.irc.org/history.html History of IRC]
* [http://www.irc.org/ IRC.org] – Technical and Historical IRC6 information; Articles on the history of IRC
* [http://www.irchelp.org/ IRChelp.org] – Internet Relay Chat (IRC) help archive; Large archive of IRC-related documents
* [http://ircv3.net/ IRCv3] – Working group of developers, who add new features to the protocol and write specs for them
* [https://irc-source.com/ IRC-Source] {{Webarchive|url=https://web.archive.org/web/20201008234127/https://irc-source.com/ |date=8 October 2020 }} – Internet Relay Chat (IRC) network and channel search engine with historical data
* [https://web.archive.org/web/20190113165832/http://irc.netsplit.de/ irc.netsplit.de] – Internet Relay Chat (IRC) network listing with historical data


{{IRC topics}}
[[Category:IRC|*]]
{{URI scheme}}
[[Category:Virtual communities]]
{{Computer-mediated communication}}
[[Category:On-line chat]]


[[Category:Internet Relay Chat| ]]
[[ar:آي آر سي]]
[[Category:1988 software]]
[[bg:IRC]]
[[Category:Application layer protocols]]
[[ca:IRC]]
[[Category:Internet properties established in 1988]]
[[cs:IRC]]
[[Category:Finnish inventions]]
[[da:IRC]]
[[de:Internet Relay Chat]]
[[Category:Internet terminology]]
[[Category:Virtual communities]]
[[es:Internet Relay Chat]]
[[eo:Interreta relajsa babilo]]
[[eu:IRC]]
[[fa:آی.آر.سی]]
[[fr:Internet Relay Chat]]
[[gl:IRC]]
[[ko:IRC]]
[[hr:IRC]]
[[io:Internet Relay Chat]]
[[id:Internet Relay Chat]]
[[ia:Internet Relay Chat]]
[[is:Internet Relay Chat]]
[[it:Internet Relay Chat]]
[[he:Internet Relay Chat]]
[[sw:IRC]]
[[lv:IRC]]
[[lt:IRC]]
[[hu:IRC]]
[[ms:IRC]]
[[nl:Internet Relay Chat]]
[[ja:インターネット・リレー・チャット]]
[[no:IRC]]
[[nn:Internet Relay Chat]]
[[pl:IRC]]
[[pt:Internet Relay Chat]]
[[ro:IRC]]
[[ru:IRC]]
[[sq:IRC]]
[[simple:IRC]]
[[sk:Internet Relay Chat]]
[[sl:Internet Relay Chat]]
[[sr:ИРЦ]]
[[fi:IRC]]
[[sv:Internet Relay Chat]]
[[th:ไออาร์ซี]]
[[vi:IRC]]
[[tr:Internet Relay Chat]]
[[uk:IRC]]
[[zh:IRC]]

Latest revision as of 07:04, 9 May 2024

Internet Relay Chat
Communication protocol
AbbreviationIRC
PurposeInstant messaging
Developer(s)Jarkko Oikarinen
IntroductionAugust 1988; 35 years ago (1988-08)
InfluencedNot yet superseded
IRCv3 (standards process working group)
OSI layerApplication layer
Port(s)6667, 6697
RFC(s)RFC 1459
The first IRC server, tolsun.oulu.fi, a Sun-3 server on display near the University of Oulu computer centre

IRC (Internet Relay Chat) is a text-based chat system for instant messaging. IRC is designed for group communication in discussion forums, called channels,[1] but also allows one-on-one communication via private messages[2] as well as chat and data transfer,[3] including file sharing.[4]

Internet Relay Chat is implemented as an application layer protocol to facilitate communication in the form of text. The chat process works on a client–server networking model. Users connect, using a client—which may be a web app, a standalone desktop program, or embedded into part of a larger program—to an IRC server, which may be part of a larger IRC network. Examples of programs used to connect include Mibbit, IRCCloud, KiwiIRC, and mIRC.

IRC usage has been declining steadily since 2003, losing 60 percent of its users.[5] In April 2011, the top 100 IRC networks served more than 200,000 users at a time.[6]

History[edit]

IRC was created by Jarkko Oikarinen in August 1988 to replace a program called MUT (MultiUser Talk) on a BBS called OuluBox at the University of Oulu in Finland, where he was working at the Department of Information Processing Science. Jarkko intended to extend the BBS software he administered, to allow news in the Usenet style, real time discussions and similar BBS features. The first part he implemented was the chat part, which he did with borrowed parts written by his friends Jyrki Kuoppala and Jukka Pihl. The first IRC network was running on a single server named tolsun.oulu.fi.[7] Oikarinen found inspiration in a chat system known as Bitnet Relay, which operated on the BITNET.[8]

Jyrki Kuoppala pushed Oikarinen to ask Oulu University to free the IRC code so that it also could be run outside of Oulu, and after they finally got it released, Jyrki Kuoppala immediately installed another server. This was the first "IRC network". Oikarinen got some friends at the Helsinki University and Tampere University to start running IRC servers when his number of users increased and other universities soon followed. At this time Oikarinen realized that the rest of the BBS features probably would not fit in his program.[7]

Oikarinen contacted people at the University of Denver and Oregon State University. They had their own IRC network running and wanted to connect to the Finnish network. They had obtained the program from one of Oikarinen's friends, Vijay Subramaniam—the first non-Finnish person to use IRC. IRC then grew larger and got used on the entire Finnish national network—FUNET—and then connected to Nordunet, the Scandinavian branch of the Internet. In November 1988, IRC had spread across the Internet and in the middle of 1989, there were some 40 servers worldwide.[7]

EFnet[edit]

In August 1990, the first major disagreement took place in the IRC world. The "A-net" (Anarchy net) included a server named eris.berkeley.edu. It was all open, required no passwords and had no limit on the number of connects. As Greg "wumpus" Lindahl explains:[9] "it had a wildcard server line, so people were hooking up servers and nick-colliding everyone". The "Eris Free Network", EFnet, made the eris machine the first to be Q-lined (Q for quarantine) from IRC. In wumpus' words again:[9] "Eris refused to remove that line, so I formed EFnet. It wasn't much of a fight; I got all the hubs to join, and almost everyone else got carried along." A-net was formed with the eris servers, while EFnet was formed with the non-eris servers. History showed most servers and users went with EFnet. Once A-net disbanded, the name EFnet became meaningless, and once again it was the one and only IRC network.[7]

Around that time IRC was used to report on the 1991 Soviet coup d'état attempt throughout a media blackout.[10] It was previously used in a similar fashion during the Gulf War.[11] Chat logs of these and other events are kept in the ibiblio archive.[12]

Undernet fork[edit]

Another fork effort, the first that made a lasting difference, was initiated by "Wildthang" in the United States in October 1992. (It forked off the EFnet ircd version 2.8.10). It was meant to be just a test network to develop bots on but it quickly grew to a network "for friends and their friends". In Europe and Canada a separate new network was being worked on and in December the French servers connected to the Canadian ones, and by the end of the month, the French and Canadian network was connected to the US one, forming the network that later came to be called "The Undernet".[7]

The "undernetters" wanted to take ircd further in an attempt to make it use less bandwidth and to try to sort out the channel chaos (netsplits and takeovers) that EFnet started to suffer from. For the latter purpose, the Undernet implemented timestamps, new routing and offered the CService—a program that allowed users to register channels and then attempted to protect them from troublemakers. The first server list presented, from 15 February 1993, includes servers from the U.S., Canada, France, Croatia and Japan. On 15 August, the new user count record was set to 57 users.[7]

In May 1993, RFC 1459[13] was published and details a simple protocol for client/server operation, channels, one-to-one and one-to-many conversations.[7] A significant number of extensions like CTCP, colors and formats are not included in the protocol specifications, nor is character encoding,[14] which led various implementations of servers and clients to diverge. Software implementation varied significantly from one network to the other, each network implementing their own policies and standards in their own code bases.

DALnet fork[edit]

During the summer of 1994, the Undernet was itself forked. The new network was called DALnet (named after its founder: dalvenjah), formed for better user service and more user and channel protections. One of the more significant changes in DALnet was use of longer nicknames (the original ircd limit being 9 letters). DALnet ircd modifications were made by Alexei "Lefler" Kosut. DALnet was thus based on the Undernet ircd server, although the DALnet pioneers were EFnet abandoners. According to James Ng, the initial DALnet people were "ops in #StarTrek sick from the constant splits/lags/takeovers/etc".[7]

DALnet quickly offered global WallOps (IRCop messages that can be seen by users who are +w (/mode NickName +w)), longer nicknames, Q:Lined nicknames (nicknames that cannot be used i.e. ChanServ, IRCop, NickServ, etc.), global K:Lines (ban of one person or an entire domain from a server or the entire network), IRCop only communications: GlobOps, +H mode showing that an IRCop is a "helpop" etc. Much of DALnet's new functions were written in early 1995 by Brian "Morpher" Smith and allow users to own nicknames, control channels, send memos, and more.[7]

IRCnet fork[edit]

In July 1996, after months of flame wars and discussions on the mailing list, there was yet another split due to disagreement in how the development of the ircd should evolve. Most notably, the "European" (most of those servers were in Europe) side that later named itself IRCnet argued for nick and channel delays whereas the EFnet side argued for timestamps.[7] There were also disagreements about policies: the European side had started to establish a set of rules directing what IRCops could and could not do, a point of view opposed by the US side.[15]

Most (not all) of the IRCnet servers were in Europe, while most of the EFnet servers were in the US. This event is also known as "The Great Split" in many IRC societies. EFnet has since (as of August 1998) grown and passed the number of users it had then. In the (northern) autumn of the year 2000, EFnet had some 50,000 users and IRCnet 70,000.[7]

Modern IRC[edit]

IRC has changed much over its life on the Internet. New server software has added a multitude of new features.

  • Services: Network-operated bots to facilitate registration of nicknames and channels, sending messages for offline users and network operator functions.
  • Extra modes: While the original IRC system used a set of standard user and channel modes, new servers add many new modes for features such as removing color codes from text,[16] or obscuring a user's hostmask ("cloaking") to protect from denial-of-service attacks.[17]
  • Proxy detection: Most modern servers support detection of users attempting to connect through an insecure (misconfigured or exploited) proxy server, which can then be denied a connection. This proxy detection software is used by several networks, although that real time list of proxies is defunct since early 2006.[18]
  • Additional commands: New commands can be such things as shorthand commands to issue commands to Services, to network-operator-only commands to manipulate a user's hostmask.[citation needed]
  • Encryption: For the client-to-server leg of the connection TLS might be used (messages cease to be secure once they are relayed to other users on standard connections, but it makes eavesdropping on or wiretapping an individual's IRC sessions difficult). For client-to-client communication, SDCC (Secure DCC) can be used.[citation needed]
  • Connection protocol: IRC can be connected to via IPv4, the old version of the Internet Protocol, or by IPv6, the current standard of the protocol.

As of 2016, a new standardization effort is under way under a working group called IRCv3, which focuses on more advanced client features such as instant notifications, better history support and improved security.[19] As of 2019, no major IRC networks have fully adopted the proposed standard.[20]

As of June 2021, there are 481 different IRC networks known to be operating,[21] of which the open source Libera Chat, founded in May 2021, has the most users, with 20,374 channels on 26 servers; between them, the top 100 IRC networks share over 100 thousand channels operating on about one thousand servers.[22]

After its golden era during the 1990s and early 2000s (240,000 users on QuakeNet in 2004), IRC has seen a significant decline, losing around 60% of users between 2003 and 2012, with users moving to social media platforms such as Facebook or Twitter,[5] but also to open platforms such as XMPP which was developed in 1999. Certain networks such as Freenode have not followed the overall trend and have more than quadrupled in size during the same period.[5] However, Freenode, which in 2016 had around 90,000 users, has since declined to about 9,300 users.[23]

The largest IRC networks have traditionally been grouped as the "Big Four"[24][25][26][27]—a designation for networks that top the statistics. The Big Four networks change periodically, but due to the community nature of IRC there are a large number of other networks for users to choose from.

Historically the "Big Four" were:[24][25][26]

IRC reached 6 million simultaneous users in 2001 and 10 million users in 2004–2005, dropping to around 350k in 2021.[citation needed]

The top 100 IRC networks have around 230k users connected at peak hours.[28]

Timeline[edit]

Timeline of major servers:

Technical information[edit]

A screenshot of HexChat, an IRC client for GTK environments
Irssi, a text-based IRC client

IRC is an open protocol that uses TCP[13] and, optionally, TLS. An IRC server can connect to other IRC servers to expand the IRC network.[29] Users access IRC networks by connecting a client to a server.[30] There are many client implementations, such as mIRC, HexChat and irssi, and server implementations, e.g. the original IRCd. Most IRC servers do not require users to register an account but a nickname is required before being connected.[31]

IRC was originally a plain text protocol[13] (although later extended), which on request was assigned port 194/TCP by IANA.[32] However, the de facto standard has always been to run IRC on 6667/TCP[33] and nearby port numbers (for example TCP ports 6660–6669, 7000)[34] to avoid having to run the IRCd software with root privileges.

The protocol specified that characters were 8-bit but did not specify the character encoding the text was supposed to use.[14] This can cause problems when users using different clients and/or different platforms want to converse.

All client-to-server IRC protocols in use today are descended from the protocol implemented in the irc2.4.0 version of the IRC2 server, and documented in RFC 1459. Since RFC 1459 was published, the new features in the irc2.10 implementation led to the publication of several revised protocol documents (RFC 2810, RFC 2811, RFC 2812 and RFC 2813); however, these protocol changes have not been widely adopted among other implementations.[citation needed]

Although many specifications on the IRC protocol have been published, there is no official specification, as the protocol remains dynamic. Virtually no clients and very few servers rely strictly on the above RFCs as a reference.[citation needed]

Microsoft made an extension for IRC in 1998 via the proprietary IRCX.[35] They later stopped distributing software supporting IRCX, instead developing the proprietary MSNP.

The standard structure of a network of IRC servers is a tree.[36] Messages are routed along only necessary branches of the tree but network state is sent to every server[37] and there is generally a high degree of implicit trust between servers. However, this architecture has a number of problems. A misbehaving or malicious server can cause major damage to the network[38] and any changes in structure, whether intentional or a result of conditions on the underlying network, require a net-split and net-join. This results in a lot of network traffic and spurious quit/join messages to users[39] and temporary loss of communication to users on the splitting servers. Adding a server to a large network means a large background bandwidth load on the network and a large memory load on the server. Once established, however, each message to multiple recipients is delivered in a fashion similar to multicast, meaning each message travels a network link exactly once.[40] This is a strength in comparison to non-multicasting protocols such as Simple Mail Transfer Protocol (SMTP)[citation needed] or Extensible Messaging and Presence Protocol (XMPP)[citation needed].

An IRC daemon can be used on a local area network (LAN). IRC can thus be used to facilitate communication between people within the local area network (internal communication).[41][42]

Commands and replies[edit]

IRC has a line-based structure. Clients send single-line messages to the server,[43] receive replies to those messages[44] and receive copies of some messages sent by other clients. In most clients, users can enter commands by prefixing them with a '/'. Depending on the command, these may either be handled entirely by the client, or (generally for commands the client does not recognize) passed directly to the server, possibly with some modification.[45]

Due to the nature of the protocol, automated systems cannot always correctly pair a sent command with its reply with full reliability and are subject to guessing.[46]

Channels[edit]

The basic means of communicating to a group of users in an established IRC session is through a channel.[47] Channels on a network can be displayed using the IRC command LIST,[48] which lists all currently available channels that do not have the modes +s or +p set, on that particular network.

Users can join a channel using the JOIN command,[49] in most clients available as /join #channelname. Messages sent to the joined channels are then relayed to all other users.[47]

Channels that are available across an entire IRC network are prefixed with a '#', while those local to a server use '&'.[50] Other less common channel types include '+' channels—'modeless' channels without operators[51]—and '!' channels, a form of timestamped channel on normally non-timestamped networks.[52]

Modes[edit]

Users and channels may have modes that are represented by individual case-sensitive letters[53] and are set using the MODE command.[54] User modes and channel modes are separate and can use the same letter to mean different things (e.g. user mode "i" is invisible mode while channel mode "i" is invite only.[55]) Modes are usually set and unset using the mode command that takes a target (user or channel), a set of modes to set (+) or unset (-) and any parameters the modes need.

Some channel modes take parameters and other channel modes apply to a user on a channel or add or remove a mask (e.g. a ban mask) from a list associated with the channel rather than applying to the channel as a whole.[56] Modes that apply to users on a channel have an associated symbol that is used to represent the mode in names replies[57] (sent to clients on first joining a channel[49] and use of the names command) and in many clients also used to represent it in the client's displayed list of users in a channel or to display an own indicator for a user's modes.

In order to correctly parse incoming mode messages and track channel state the client must know which mode is of which type and for the modes that apply to a user on a channel which symbol goes with which letter. In early implementations of IRC this had to be hard-coded in the client but there is now a de facto standard extension to the protocol called ISUPPORT that sends this information to the client at connect time using numeric 005.[58][59]

There is a small design fault in IRC regarding modes that apply to users on channels: the names message used to establish initial channel state can only send one such mode per user on the channel,[57] but multiple such modes can be set on a single user. For example, if a user holds both operator status (+o) and voice status (+v) on a channel, a new client will be unable to see the mode with less priority (i.e. voice). Workarounds for this are possible on both the client and server side; a common solution is to use IRCv3 "multi-prefix" extension.[60]

Standard (RFC 1459) modes[edit]

User modes
Letter Symbol Description
i Invisible—cannot be seen without a common channel or knowing the exact name
s Receives server notices
w Receives wallops[61]
o User is an IRC operator (ircop)
Channel modes
Letter Symbol Parameter(s) Description
o @ Name of affected user Channel operator—can change channel modes and kick users out of the channel among other things
s Secret channel—not shown in channel list or user whois except to users already on the channel
p Private channel—listed in channel list as "prv" according to RFC 1459
n Users cannot send messages to the channel externally
m Channel is moderated (only those who hold channel operator or voice status on the channel can send messages to it)
i Only users with invites may enter the channel.
t Only channel operators can change the channel topic.
l Limit number Limits number of users able to be on channel (when full, no new users can join)
b Ban mask (nick!user@host with wildcards allowed) Bans hostmasks from channel
v + Name of affected user Gives a user voice status on channel (see +m above)
k New channel key Sets a channel key such that only users knowing the key can enter

Many daemons and networks have added extra modes or modified the behavior of modes in the above list.[62][63][64][65]

Channel operators[edit]

A channel operator is a client on an IRC channel that manages the channel. IRC channel operators can be easily seen by the symbol or icon next to their name (varies by client implementation, commonly a "@" symbol prefix, a green circle, or a Latin letter "+o"/"o"). On most networks, an operator can:

  • Kick a user.
  • Ban a user.
  • Give another user IRC Channel Operator Status or IRC Channel Voice Status.
  • Change the IRC Channel topic while channel mode +t is set.
  • Change the IRC Channel Mode locks.

IRC operators[edit]

There are also users who maintain elevated rights on their local server, or the entire network; these are called IRC operators,[66] sometimes shortened to IRCops or Opers (not to be confused with channel operators). As the implementation of the IRCd varies, so do the privileges of the IRC operator on the given IRCd. RFC 1459[66] claims that IRC operators are "a necessary evil" to keep a clean state of the network, and as such they need to be able to disconnect and reconnect servers. Additionally, to prevent malicious users or even harmful automated programs from entering IRC, IRC operators are usually allowed to disconnect clients and completely ban IP addresses or complete subnets. Networks that carry services (NickServ et al.) usually allow their IRC operators also to handle basic "ownership" matters. Further privileged rights may include overriding channel bans (being able to join channels they would not be allowed to join, if they were not opered), being able to op themselves on channels where they would not be able without being opered, being auto-opped on channels always and so forth.

Hostmasks[edit]

A hostmask is a unique identifier of an IRC client connected to an IRC server.[67][68] IRC servers, services, and other clients, including bots, can use it to identify a specific IRC session.

The format of a hostmask is nick!user@host. The hostmask looks similar to, but should not be confused with an e-mail address.

The nick part is the nickname chosen by the user and may be changed while connected. The user part is the username reported by ident on the client.[69] If ident is not available on the client, the username specified when the client connected is used after being prefixed with a tilde.[70]

The host part is the hostname the client is connecting from. If the IP address of the client cannot be resolved to a valid hostname by the server, it is used instead of the hostname.

Because of the privacy implications of exposing the IP address or hostname of a client, some IRC daemons also provide privacy features, such as InspIRCd or UnrealIRCd's "+x" mode. This hashes a client IP address or masks part of a client's hostname, making it unreadable to users other than IRCops. Users may also have the option of requesting a "virtual host" (or "vhost"), to be displayed in the hostmask to allow further anonymity. Some IRC networks, such as Libera Chat or Freenode, use these as "cloaks" to indicate that a user is affiliated with a group or project.[71]

URI scheme[edit]

There are three provisional recognized uniform resource identifier (URI) schemes for Internet Relay Chat: irc, ircs, and irc6.[72] When supported, they allow hyperlinks of various forms, including

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

(where items enclosed within brackets ([,]) are optional) to be used to (if necessary) connect to the specified host (or network, if known to the IRC client) and join the specified channel.[73] (This can be used within the client itself, or from another application such as a Web browser). irc is the default URI, irc6 specifies a connection to be made using IPv6, and ircs specifies a secure connection.

Per the specification, the usual hash symbol (#) will be prepended to channel names that begin with an alphanumeric character—allowing it to be omitted. Some implementations (for example, mIRC) will do so unconditionally resulting in a (usually unintended) extra (for example, ##channel), if included in the URL.

Some implementations allow multiple channels to be specified, separated by commas.[74]

Challenges[edit]

Issues in the original design of IRC were the amount of shared state data[75][76] being a limitation on its scalability,[77] the absence of unique user identifications leading to the nickname collision problem,[78] lack of protection from netsplits by means of cyclic routing,[79][80] the trade-off in scalability for the sake of real-time user presence information,[81] protocol weaknesses providing a platform for abuse,[82] no transparent and optimizable message passing,[83] and no encryption.[84] Some of these issues have been addressed in Modern IRC.

Attacks[edit]

Because IRC connections may be unencrypted and typically span long time periods, they are an attractive target for DoS/DDoS attackers and hackers. Because of this, careful security policy is necessary to ensure that an IRC network is not susceptible to an attack such as a takeover war. IRC networks may also K-line or G-line users or servers that have a harming effect.

Some IRC servers support SSL/TLS connections for security purposes. This helps stop the use of packet sniffer programs to obtain the passwords of IRC users, but has little use beyond this scope due to the public nature of IRC channels. SSL connections require both client and server support (that may require the user to install SSL binaries and IRC client specific patches or modules on their computers). Some networks also use SSL for server-to-server connections, and provide a special channel flag (such as +S) to only allow SSL-connected users on the channel, while disallowing operator identification in clear text, to better utilize the advantages that SSL provides.[85][86]

IRC served as an early laboratory for many kinds of Internet attacks, such as using fake ICMP unreachable messages to break TCP-based IRC connections (nuking) to annoy users or facilitate takeovers.

Abuse prevention[edit]

One of the most contentious technical issues surrounding IRC implementations, which survives to this day, is the merit of "Nick/Channel Delay" vs. "Timestamp" protocols. Both methods exist to solve the problem of denial-of-service attacks, but take very different approaches. The problem with the original IRC protocol as implemented was that when two servers split and rejoined, the two sides of the network would simply merge their channels. If a user could join on a "split" server, where a channel that existed on the other side of the network was empty, and gain operator status, they would become a channel operator of the "combined" channel after the netsplit ended; if a user took a nickname that existed on the other side of the network, the server would kill both users when rejoining (a "nick collision"). This was often abused to "mass-kill" all users on a channel, thus creating "opless" channels where no operators were present to deal with abuse. Apart from causing problems within IRC, this encouraged people to conduct denial-of-service attacks against IRC servers in order to cause netsplits, which they would then abuse.

The nick delay (ND) and channel delay (CD) strategies aim to prevent abuse by delaying reconnections and renames. After a user signs off and the nickname becomes available, or a channel ceases to exist because all its users parted (as often happens during a netsplit), the server will not allow any user to use that nickname or join that channel, until a certain period of time (the delay) has passed. The idea behind this is that even if a netsplit occurs, it is useless to an abuser because they cannot take the nickname or gain operator status on a channel, and thus no collision of a nickname or "merging" of a channel can occur. To some extent, this inconveniences legitimate users, who might be forced to briefly use a different name after rejoining (appending an underscore is popular).

The timestamp protocol is an alternative to nick/channel delays which resolves collisions using timestamped priority. Every nickname and channel on the network is assigned a timestamp – the date and time when it was created. When a netsplit occurs, two users on each side are free to use the same nickname or channel, but when the two sides are joined, only one can survive. In the case of nicknames, the newer user, according to their TS, is killed; when a channel collides, the members (users on the channel) are merged, but the channel operators on the "losing" side of the split lose their channel operator status.

TS is a much more complicated protocol than ND/CD, both in design and implementation, and despite having gone through several revisions, some implementations still have problems with "desyncs" (where two servers on the same network disagree about the current state of the network), and allowing too much leniency in what was allowed by the "losing" side. Under the original TS protocols, for example, there was no protection against users setting bans or other modes in the losing channel that would then be merged when the split rejoined, even though the users who had set those modes lost their channel operator status. Some modern TS-based IRC servers have also incorporated some form of ND and/or CD in addition to timestamping in an attempt to further curb abuse.

Most networks today use the timestamping approach. The timestamp versus ND/CD disagreements caused several servers to split away from EFnet and form the newer IRCnet. After the split, EFnet moved to a TS protocol, while IRCnet used ND/CD.

In recent versions of the IRCnet ircd, as well as ircds using the TS6 protocol (including Charybdis), ND has been extended/replaced by a mechanism called SAVE. This mechanism assigns every client a UID upon connecting to an IRC server. This ID starts with a number, which is forbidden in nicks (although some ircds, namely IRCnet and InspIRCd, allow clients to switch to their own UID as the nickname).

If two clients with the same nickname join from different sides of a netsplit ("nick collision"), the first server to see this collision will force both clients to change their nick to their UID, thus saving both clients from being disconnected. On IRCnet, the nickname will also be locked for some time (ND) to prevent both clients from changing back to the original nickname, thus colliding again.

Clients[edit]

Client software[edit]

Scheme of an IRC network with normal clients (green), bots (blue) and bouncers (orange)

Client software exists for various operating systems or software packages, as well as web-based or inside games. Many different clients are available for the various operating systems, including Windows, Unix and Linux, macOS and mobile operating systems (such as iOS and Android). On Windows, mIRC is one of the most popular clients.[87] Some Linux distributions come with an IRC client preinstalled, such as Linux Mint which comes with HexChat preinstalled.

Some programs which are extensible through plug-ins also serve as platforms for IRC clients. For instance, a client called ERC, written entirely in Emacs Lisp, is included in v.22.3 of Emacs. Therefore, any platform that can run Emacs can run ERC.

A number of web browsers have built-in IRC clients, such as:

Web-based clients, such as Mibbit and open source KiwiIRC, can run in most browsers.

Games such as War§ow,[89] Unreal Tournament (up to Unreal Tournament 2004),[90] Uplink,[91] Spring Engine-based games, 0 A.D. and ZDaemon have included IRC.[92]

Ustream's chat interface is IRC with custom authentication[93] as well as Twitch's (formerly Justin.tv).[94][95]

Bots[edit]

A typical use of bots in IRC is to provide IRC services or specific functionality within a channel such as to host a chat-based game or provide notifications of external events. However, some IRC bots are used to launch malicious attacks such as denial of service, spamming, or exploitation.[96]

Bouncer[edit]

A program that runs as a daemon on a server and functions as a persistent proxy is known as a BNC or bouncer. The purpose is to maintain a connection to an IRC server, acting as a relay between the server and client, or simply to act as a proxy.[citation needed] Should the client lose network connectivity, the BNC may stay connected and archive all traffic for later delivery, allowing the user to resume their IRC session without disrupting their connection to the server.[97]

Furthermore, as a way of obtaining a bouncer-like effect, an IRC client (typically text-based, for example Irssi) may be run on an always-on server to which the user connects via ssh. This also allows devices that only have ssh functionality, but no actual IRC client installed themselves, to connect to the IRC, and it allows sharing of IRC sessions.[98]

To keep the IRC client from quitting when the ssh connection closes, the client can be run inside a terminal multiplexer such as GNU Screen or tmux, thus staying connected to the IRC network(s) constantly and able to log conversation in channels that the user is interested in, or to maintain a channel's presence on the network. Modelled after this setup, in 2004 an IRC client following the client–server, called Smuxi, was launched.[99][100]

Search engines[edit]

There are numerous search engines available to aid the user in finding what they are looking for on IRC.[101][102] Generally the search engine consists of two parts, a "back-end" (or "spider/crawler") and a front-end "search engine".

The back-end (spider/webcrawler) is the work horse of the search engine. It is responsible for crawling IRC servers to index the information being sent across them. The information that is indexed usually consists solely of channel text (text that is publicly displayed in public channels). The storage method is usually some sort of relational database, like MySQL or Oracle.[citation needed]

The front-end "search engine" is the user interface to the database. It supplies users with a way to search the database of indexed information to retrieve the data they are looking for. These front-end search engines can also be coded in numerous programming languages.

Most search engines have their own spider that is a single application responsible for crawling IRC and indexing data itself; however, others are "user based" indexers. The latter rely on users to install their "add-on" to their IRC client; the add-on is what sends the database the channel information of whatever channels the user happens to be on.[citation needed]

Many users have implemented their own ad hoc search engines using the logging features built into many IRC clients. These search engines are usually implemented as bots and dedicated to a particular channel or group of associated channels.

Character encoding[edit]

IRC still lacks a single globally accepted standard convention for how to transmit characters outside the 7-bit ASCII repertoire. IRC servers normally[clarification needed] transfer messages from a client to another client just as byte sequences, without any interpretation or recoding of characters. The IRC protocol (unlike e.g. MIME or HTTP) lacks mechanisms for announcing and negotiating character encoding options. This has put the responsibility for choosing the appropriate character codec on the client. In practice, IRC channels have largely used the same character encodings that were also used by operating systems (in particular Unix derivatives) in the respective language communities:

  • 7-bit era: In the early days of IRC, especially among Scandinavian and Finnish language users, national variants of ISO 646 were the dominant character encodings. These encode non-ASCII characters like Ä Ö Å ä ö å at code positions 0x5B 0x5C 0x5D 0x7B 0x7C 0x7D (US-ASCII: [ \ ] { | }). That is why these codes are always allowed in nicknames. According to RFC 1459, { | } in nicknames should be treated as lowercase equivalents of [ \ ] respectively.[14] By the late 1990s, the use of 7-bit encodings had disappeared in favour of ISO 8859-1, and such equivalence mappings were dropped from some IRC daemons.
  • 8-bit era: Since the early 1990s, 8-bit encodings such as ISO 8859-1 have become commonly used for European languages. Russian users had a choice of KOI8-R, ISO 8859-5[citation needed] and CP1251, and since about 2000, modern Russian IRC networks convert between these different commonly used encodings of the Cyrillic script.
  • Multi-byte era: For a long time, East Asian IRC channels with logographic scripts in China, Japan, and Korea have been using multi-byte encodings such as EUC or ISO-2022-JP. With the common migration from ISO 8859 to UTF-8 on Linux and Unix platforms since about 2002, UTF-8 has become an increasingly popular substitute for many of the previously used 8-bit encodings in European channels. Some IRC clients are now capable of reading messages both in ISO 8859-1 or UTF-8 in the same channel, heuristically autodetecting which encoding is used. The shift to UTF-8 began in particular on Finnish-speaking IRC (Merkistö (Finnish)).

Today, the UTF-8 encoding of Unicode/ISO 10646 would be the most likely contender for a single future standard character encoding for all IRC communication, if such standard ever relaxed the 510-byte message size restriction. UTF-8 is ASCII compatible and covers the superset of all other commonly used coded character set standards.

File sharing[edit]

Much like conventional P2P file sharing, users can create file servers that allow them to share files with each other by using customised IRC bots or scripts for their IRC client. Often users will group together to distribute warez via a network of IRC bots.[103]

Technically, IRC provides no file transfer mechanisms itself; file sharing is implemented by IRC clients, typically using the Direct Client-to-Client (DCC) protocol, in which file transfers are negotiated through the exchange of private messages between clients. The vast majority of IRC clients feature support for DCC file transfers, hence the view that file sharing is an integral feature of IRC.[104] The commonplace usage of this protocol, however, sometimes also causes DCC spam. DCC commands have also been used to exploit vulnerable clients into performing an action such as disconnecting from the server or exiting the client.

See also[edit]

Citations[edit]

  1. ^ "One-to-many". Internet Relay Chat Protocol. p. 11. sec. 3.2. doi:10.17487/RFC1459. RFC 1459.
  2. ^ "One-To-One Communication". Internet Relay Chat: Architecture. p. 5. sec. 5.1. doi:10.17487/RFC2810. RFC 2810.
  3. ^ Rollo, Troy. "A Description of the DCC Protocol". IRCHelp.org. Retrieved 8 April 2011.
  4. ^ Wang, Wallace (25 October 2004). "Instant Messaging and Online Chat Rooms: Internet Relay Chat (IRC)". Steal this File Sharing Book (1st ed.). San Francisco, California: No Starch Press. pp. 61–67. ISBN 978-1-59327-050-6.
  5. ^ a b c "IRC is dead, long live IRC". Pingdom. 24 April 2012. Archived from the original on 15 August 2017. Retrieved 25 April 2016.
  6. ^ "IRC Networks – Top 100". irc.netsplit.de. Retrieved 26 October 2023.
  7. ^ a b c d e f g h i j k Stenberg, Daniel. "History of IRC (Internet Relay Chat)". Retrieved 25 April 2016. I did not experience all of this. I found information on various places and I received information from various people in order to write this. People that have helped me with this include: Greg "wumpus" Lindahl, Vesa "vesa" Ruokonen, James Ng, Tuomas Heino, Richard (eagle`s on undernet), Ari Lemmke
  8. ^ Oikarinen, Jarkko. "Founding IRC". mIRC. Archived from the original on 27 April 2011. Retrieved 8 April 2011.
  9. ^ a b "History of IRC (Internet Relay Chat)". daniel.haxx.se. Retrieved 22 July 2023.
  10. ^ "IRC transcripts from the time of the 1991 Soviet coup d'état attempt". Chapel Hill, North Carolina: ibiblio. Archived from the original on 28 June 2009. Retrieved 8 April 2011.
  11. ^ "IRC logs of events of the Gulf War". Chapel Hill, North Carolina: ibiblio. Retrieved 8 April 2011.
  12. ^ "Logs of major events in the online community". Chapel Hill, North Carolina: ibiblio. Retrieved 8 April 2011.
  13. ^ a b c "Introduction". Internet Relay Chat Protocol. p. 4. sec. 1. doi:10.17487/RFC1459. RFC 1459.
  14. ^ a b c "Character codes". Internet Relay Chat Protocol. p. 7. sec. 2.2. doi:10.17487/RFC1459. RFC 1459.
  15. ^ Engen, Vegard (May 2000). "The Great Split". IRC.org. Retrieved 25 April 2016.
  16. ^ "Channel Modes". UnrealIRCd documentation wiki. Retrieved 6 January 2018.
  17. ^ "Cloaking". UnrealIRCd documentation wiki. Retrieved 6 January 2018.
  18. ^ "Blitzed Open Proxy Monitor Shuts Down". The Open Proxy Monitor which has been provided by the Blitzed IRC network has been shut down…The database was so large that it is near to impossible for the team to backup, or find a new location to continue the service. Added to that, most of the team members do not possess the time anymore to keep the service running.
  19. ^ "IRCv3". IRCv3 Working Group. 2016. Retrieved 25 April 2016. The IRCv3 Working Group is a collection of IRC client and server software authors working to enhance, maintain and standardize the IRC protocol using backwards-compatible extensions.
  20. ^ "Networks - IRCv3". 2019. Retrieved 9 August 2019.
  21. ^ "IRC Networks - in alphabetical order". netsplit.de. Retrieved 12 January 2022.
  22. ^ "IRC Networks - Top 100". netsplit.de. Retrieved 12 January 2022.
  23. ^ "netsplit.de top 10". Retrieved 15 January 2021.
  24. ^ a b Charalabidis, Alex (15 December 1999). "IRCing On The Macintosh: Ircle". The Book of IRC: The Ultimate Guide to Internet Relay Chat (1st ed.). San Francisco, California: No Starch Press. p. 61. ISBN 978-1-886411-29-6. On large networks such as the Big Four— EFnet, IRCnet, Undernet, and DALnet— trying to list the thousands of channels with Ircle always causes you to disconnect due to the flood of information, while other clients can usually manage the feat, if you are on a direct Ethernet connection.
  25. ^ a b Jones, Steve, ed. (10 December 2002). "Internet Relay Chat". Encyclopedia of New Media: An Essential Reference to Communication and Technology (1st ed.). Thousand Oaks, California: SAGE Publications. p. 257. ISBN 978-0-7619-2382-4. Today there are hundreds of independent IRC networks, but the "Big Four" are EFNet, UnderNet, Dalnet, and IRCnet.
  26. ^ a b Rittner, Don (3 March 1999). The iMac Book (1st ed.). Scottsdale, Arizona: Coriolis Group. p. 215. ISBN 978-1-57610-429-3. There are several large networks: EFnet, UnderNET, DALnet, and IRCnet make up the Big Four.
  27. ^ Turban, Efraim; Leidner, Dorothy; McLean, Ephraim; Wetherbe, James (7 February 2005). "Communication". Information Technology for Management: Transforming Organizations in the Digital Economy (5th ed.). Hoboken, New Jersey: John Wiley & Sons. pp. 106–107. ISBN 978-0-471-70522-2. The largest networks have traditionally been grouped as the "Big Four": EFNet, IrcNet, QuakeNet, and UnderNet.
  28. ^ "IRC Networks – Top 100". irc.netsplit.de. netsplit.de. Retrieved 15 January 2021.
  29. ^ "Servers". Internet Relay Chat Protocol. p. 4. sec. 1.1. doi:10.17487/RFC1459. RFC 1459.
  30. ^ "Clients". Internet Relay Chat: Architecture. p. 3. sec. 2.2. doi:10.17487/RFC2810. RFC 2810.
  31. ^ "Clients". Internet Relay Chat Protocol. p. 5. sec. 1.2. doi:10.17487/RFC1459. RFC 1459.
  32. ^ "Port Numbers". Marina del Rey, California: Internet Assigned Numbers Authority. 6 April 2011. Retrieved 5 April 2021.
  33. ^ "Connect message". Internet Relay Chat Protocol. p. 29. sec. 4.3.5. doi:10.17487/RFC1459. RFC 1459.
  34. ^ Lucas, Mark; Singh, Abhishek; Cantrell, Chris (5 October 2006). "Defining a Firewall". In Henmi, Anne (ed.). Firewall Policies and VPN Configurations. Rockland, Massachusetts: Syngress Publishing. p. 93. ISBN 978-1-59749-088-7.
  35. ^ Abraham, Dalen (June 1998). Extensions to the Internet Relay Chat Protocol (IRCX). IETF. I-D draft-pfenning-irc-extensions-04. Retrieved 8 April 2011.
  36. ^ "Architecture". Internet Relay Chat: Architecture. pp. 3 – 4. sec. 3. doi:10.17487/RFC2810. RFC 2810.
  37. ^ "Introduction". Internet Relay Chat: Architecture. p. 2. sec. 1. doi:10.17487/RFC2810. RFC 2810.
  38. ^ "Algorithms". Internet Relay Chat Protocol. p. 64. sec. 9.3. doi:10.17487/RFC1459. RFC 1459.
  39. ^ "Network Congestion". Internet Relay Chat: Architecture. pp. 7 – 8. sec. 6.3. doi:10.17487/RFC2810. RFC 2810.
  40. ^ "To A Channel". Internet Relay Chat: Architecture. pp. 5 – 6. sec. 5.2.1. doi:10.17487/RFC2810. RFC 2810.
  41. ^ "IRC daemons for LAN". Retrieved 2 October 2014.
  42. ^ "Running an own IRC server". Retrieved 2 October 2014.
  43. ^ "Message format in 'pseudo' BNF". Internet Relay Chat Protocol. p. 8. sec. 2.3.1. doi:10.17487/RFC1459. RFC 1459.
  44. ^ "Numeric replies". Internet Relay Chat Protocol. p. 10. sec. 2.4. doi:10.17487/RFC1459. RFC 1459.
  45. ^ IRC Chat Rooms
  46. ^ "IRC List Modes – List mode extension showing pair confusion for lists". 25 November 2009. Retrieved 8 April 2011.
  47. ^ a b "To a group (channel)". Internet Relay Chat Protocol. p. 11. sec. 3.2.2. doi:10.17487/RFC1459. RFC 1459.
  48. ^ "List message". Internet Relay Chat Protocol. p. 24. sec. 4.2.6. doi:10.17487/RFC1459. RFC 1459.
  49. ^ a b "Join message". Internet Relay Chat Protocol. p. 19. sec. 4.2.1. doi:10.17487/RFC1459. RFC 1459.
  50. ^ "Channel Scope". Internet Relay Chat: Channel Management. pp. 3 – 4. sec. 2.2. doi:10.17487/RFC2811. RFC 2811.
  51. ^ "Channel Properties". Internet Relay Chat: Channel Management. p. 4. sec. 2.3. doi:10.17487/RFC2811. RFC 2811.
  52. ^ "Channel lifetime". Internet Relay Chat: Channel Management. p. 5. sec. 3. doi:10.17487/RFC2811. RFC 2811.
  53. ^ "Channel Modes". Internet Relay Chat: Channel Management. p. 7. sec. 4. doi:10.17487/RFC2811. RFC 2811.
  54. ^ "Mode message". Internet Relay Chat Protocol. p. 21. sec. 4.2.3. doi:10.17487/RFC1459. RFC 1459.
  55. ^ "Channel modes". Internet Relay Chat Protocol. pp. 21 – 22. sec. 4.2.3.1. doi:10.17487/RFC1459. RFC 1459.
  56. ^ "Channel Access Control". Internet Relay Chat: Channel Management. pp. 10 – 11. sec. 4.3. doi:10.17487/RFC2811. RFC 2811.
  57. ^ a b "Command responses: 353 RPL_NAMREPLY". Internet Relay Chat Protocol. p. 51. doi:10.17487/RFC1459. RFC 1459.
  58. ^ Roeckx, Kurt (14 October 2004). "The 005 numeric: ISUPPORT". irc.org. Retrieved 10 April 2011.
  59. ^ Brocklesby, Edward (September 2002). IRC RPL_ISUPPORT Numeric Definition. IETF. I-D draft-brocklesby-irc-isupport-03. Retrieved 10 April 2011.
  60. ^ "'multi-prefix' Extension - IRCv3".
  61. ^ "Operwall message". Internet Relay Chat Protocol. p. 41. sec. 5.6. doi:10.17487/RFC1459. RFC 1459.
  62. ^ Butcher, Simon (12 January 2005). "IRC User Modes List". alien.net.au. Retrieved 10 April 2011.
  63. ^ Butcher, Simon (12 January 2005). "IRC Channel Modes List". alien.net.au. Retrieved 10 April 2011.
  64. ^ Butcher, Simon (12 January 2005). "IRC Server Modes List". alien.net.au. Retrieved 10 April 2011.
  65. ^ Olsen, Tommy. "IRCd Modes". webtoman.com. Archived from the original on 15 October 2011. Retrieved 10 April 2011.
  66. ^ a b "Operators". Internet Relay Chat Protocol. p. 5. sec. 1.2.1. doi:10.17487/RFC1459. RFC 1459.
  67. ^ Thiedeke, Udo (23 September 2003). "Nicola Döring, Alexander Schestag". Virtuelle Gruppen: Charakteristika und Problemdimensionen (in German) (2nd ed.). Springer VS [de]. pp. 314, 337. ISBN 978-3-531-33372-4. Retrieved 30 March 2010.
  68. ^ Rogers, Russ (1 December 2004). "The Mind of Terror". In Devost, Matthew G. (ed.). Hacking a Terror Network: The Silent Threat of Covert Channels (1st ed.). Rockland, Massachusetts: Syngress Publishing. p. 10. ISBN 978-1-928994-98-5. Retrieved 30 March 2010.
  69. ^ Petersen, Julie K., ed. (29 May 2002). "Internet Relay Chat". The Telecommunications Illustrated Dictionary (2nd ed.). CRC Press. p. 500. ISBN 978-0-8493-1173-4. Retrieved 30 March 2010.
  70. ^ "Frequently-Asked Questions". freenode. Archived from the original on 26 March 2010. Retrieved 30 March 2010.
  71. ^ "IRC/Cloaks". Meta-wiki. Retrieved 27 November 2011.
  72. ^ "Uniform Resource Identifier (URI) Schemes". Internet Assigned Numbers Authority. Retrieved 14 October 2012.
  73. ^ Butcher, Simon (January 2003). Uniform Resource Locator Schemes for Internet Relay Chat Entities. IETF. I-D draft-butcher-irc-url-04. Retrieved 10 April 2011.
  74. ^ "node-irc". npm. 26 January 2020. Retrieved 30 July 2021.
  75. ^ "Size". A Discussion on Computer Network Conferencing. pp. 5 – 6. sec. 2.5.1. doi:10.17487/RFC1324. RFC 1324.
  76. ^ "Scalability". Internet Relay Chat: Architecture. p. 7. sec. 6.1. doi:10.17487/RFC2810. RFC 2810.
  77. ^ Loesch 2003 1.2.1 Growth
  78. ^ "User identification". A Discussion on Computer Network Conferencing. p. 10. sec. 5.4.1. doi:10.17487/RFC1324. RFC 1324.
  79. ^ "Trees and cycles". A Discussion on Computer Network Conferencing. p. 10. sec. 5.4.2. doi:10.17487/RFC1324. RFC 1324.
  80. ^ Loesch 2003 1.2.2 Network failures
  81. ^ "State Information problems". A Discussion on Computer Network Conferencing. p. 4. sec. 2.1. doi:10.17487/RFC1324. RFC 1324.
  82. ^ Loesch 2003 1.2.3 Sociological and security aspects
  83. ^ "Message passing". A Discussion on Computer Network Conferencing. p. 7. sec. 5.2.1. doi:10.17487/RFC1324. RFC 1324.
  84. ^ "Conference security". A Discussion on Computer Network Conferencing. p. 8. sec. 5.2.4. doi:10.17487/RFC1324. RFC 1324.
  85. ^ "Getting Help on EsperNet". The EsperNet IRC Network. Retrieved 31 July 2012.
  86. ^ brandon (18 May 2010). "New Feature: SSL For Users". DALnet. Retrieved 31 July 2012.
  87. ^ Smith, Roderick W. (8 April 2000). "The Internet: Using IRC to Get Help". The Multi-Boot Configuration Handbook. Handbook Series. Upper Saddle River, New Jersey: Que Publishing. p. 289. ISBN 978-0-7897-2283-6. Retrieved 25 July 2010. mIRC is one of the most popular Windows IRC clients.
  88. ^ "Opera Browser Wiki: IRC Client". Archived from the original on 17 March 2011. Retrieved 10 April 2011.
  89. ^ "Warsow Wiki: IRC Module". Archived from the original on 25 April 2011. Retrieved 10 April 2011.
  90. ^ Guenter, Daniel (21 June 2004). "UT2004 Review". BCCHardware. Retrieved 10 April 2011.
  91. ^ "The Ultimate Uplink Guide". Retrieved 10 April 2011.
  92. ^ "ZDaemon – The Doom Wiki: Other utilities". Retrieved 10 April 2011.
  93. ^ "How to setup [sic] an IRC client to connect and login [sic] to Ustream". Ustream-Helpers. 29 January 2012. Archived from the original on 21 March 2013. Retrieved 27 April 2013.
  94. ^ Mauldor (20 June 2010). "Ustream vs. Justin.tv". LiquidSilver. Retrieved 13 July 2011.
  95. ^ "Twitch IRC". Twitch Help Center. 7 April 2017. Archived from the original on 12 February 2019. Retrieved 30 October 2017.
  96. ^ Canavan, John. "The Evolution of Malicious IRC Bots" (PDF). Symantec. Symantec Security Response. Archived from the original (PDF) on 15 March 2006.
  97. ^ "psyBNC Readme". psybnc.at. Retrieved 10 April 2011.
  98. ^ Carey, Chris (18 July 2009). "IRC with irssi-proxy + screen". chriscarey.com. Retrieved 10 April 2011.
  99. ^ "Detachable Frontend (Core Rewrite) / UML / Windows Port (kicking Glade)". smuxi.org. 25 December 2004. Retrieved 25 July 2010.
  100. ^ "About Smuxi". smuxi.org. Retrieved 10 April 2011.
  101. ^ Mutton, Paul (27 July 2004). "Users and Channels". IRC Hacks (1st ed.). Sebastopol, California: O'Reilly Media. pp. 44–46. ISBN 978-0-596-00687-7.
  102. ^ Wang, Wallace (25 October 2004). "Instant Messaging and Online Chat Rooms: Internet Relay Chat (IRC)". Steal this File Sharing Book (1st ed.). San Francisco, California: No Starch Press. pp. 65–67. ISBN 978-1-59327-050-6.
  103. ^ Vamosi, Robert (8 May 2002). "Pirated movies: Now playing on a server near you". ZDNet. Retrieved 10 April 2011.
  104. ^ Sasaki, Darla (4 April 2002). "IRC 101: What Is It & How Do I Use It?". Macobserver.com. Retrieved 10 April 2011.

General bibliography[edit]

Further reading[edit]

External links[edit]