Difference between revisions of "Internet Relay Chat"

From IRC Wiki
Jump to navigation Jump to search
 
(20 intermediate revisions by 4 users not shown)
Line 1: Line 1:
<Rating comment=false>
 
Rate This!
 
1 (Hate it)
'''Internet Relay Chat''' (common abbreviation: ''IRC'') is a chat protocol that implements text-based<ref name="rfc 2810 introduction">[http://tools.ietf.org/html/rfc2810#section-1 RFC 2810: Section 1: Introduction]</ref> realtime chat for users using [[IRC client]]s to connect to central [[IRC server]]s<ref name="role of servers">[http://tools.ietf.org/html/rfc1459#section-1.1 RFC 1459: Section 1.1: Servers]</ref> that form an [[IRC network]].<ref name="network architecture">[http://tools.ietf.org/html/rfc2810#section-3 RFC 1459: Section 3: Architecture]</ref> It has been mainly designed for multi-user conferences<ref name="rfc 2810 introduction"/> but may also be used to send private messages to another user<ref>[http://tools.ietf.org/html/rfc2810#section-5.1 RFC 2810: Section 5.1: One-To-One Communication]</ref> that get routed through the network.<ref>[http://tools.ietf.org/html/rfc2810#section-4.2 RFC 2810: Section 4.2: Message Relaying]</ref> It is a plain text protocol and has first been used by Jarkko "WiZ" Oikarinen in 1988 who wrote the first client and server software ("[[IRC daemon]]") named [[IRCd]] for it.<ref name="history1">[http://daniel.haxx.se/irchistory.html History of IRC]</ref>
2 (Dislike it)
 
3 (It's ok)
== History ==
4 (Like it)
The first [[IRC daemon|IRC server software]] that allowed chatters to connect to it was the original [[IRCd]] developed by Jarkko Oikarinen, the inventor of the IRC protocol. Inspired by several Bulletin Board System chat programs, he wanted to do some more powerful realtime chat on his own and consequently invented the now well-known chat protocol.<ref name="history1"/> The first bigger IRC servers were hosted by Tampere University of Technology and Helsinki University of Technology, later other universities joined.<ref>[http://www.livinginternet.com/r/ri_irc.htm Internet Relay Chat (IRC) History - How invented, Jarkko Oikarinen]</ref>
5 (Love it)
 
</Rating>[[Category:High-importance Articles]]
In 1989, there were already 40 servers world-wide run by different people.<ref name="history1"/> The original [http://EFnet.org] is still in place today, [http://Undernet.org] and [http://Dalnet.org] were founded when EFnet had more strict linking conditions so interested people got more and more turned away.<ref>[http://www.livinginternet.com/r/ri_net.htm IRC History -- Networks, First EFnet, Internet Relay Chat]</ref> Over the dispute of time based channel status and nickname protection or the delay technique, favoured by the original IRCd developers, [[ircu]], one of the first forks, split off from the original IRCd server project.
'''Internet Relay Chat''' (common abbreviation: ''IRC'') is a chat protocol that implements text-based<ref name="rfc 2810 introduction">[http://tools.ietf.org/html/rfc2810#section-1 RFC 2810: Section 1: Introduction]</ref> realtime chat for users using [[IRC client]]s to connect to central [[IRC server]]s<ref name="role of servers">[http://tools.ietf.org/html/rfc1459#section-1.1 RFC 1459: Section 1.1: Servers]</ref> that form an [[IRC network]]<ref name="network architecture">[http://tools.ietf.org/html/rfc2810#section-3 RFC 1459: Section 3: Architecture]</ref>. It has been mainly designed for multi-user conferences<ref name="rfc 2810 introduction"/> but may also be used to send private messages to another user<ref>[http://tools.ietf.org/html/rfc2810#section-5.1 RFC 2810: Section 5.1: One-To-One Communication]</ref> that get routed through the network<ref>[http://tools.ietf.org/html/rfc2810#section-4.2 RFC 2810: Section 4.2: Message Relaying]</ref>. It is a plain text protocol and has first been used by Jarkko "WiZ" Oikarinen in 1988 who wrote the first client and server software ("[[IRC daemon]]") named [[IRCd]] for it.<ref name="history1">[http://daniel.haxx.se/irchistory.html History of IRC]</ref>
 
Since the documentation through the RFCs, of which only the original RFC 1459 is strictly followed by most server software developers, the protocol can easily be implemented by anyone to create new [[IRC server]] software or [[IRC client]]s. Today, there are hundreds of different server softwares, thousands of networks and which consist of as little as one to as many as 20 servers and allow chatters to connect and talk about various aspects of life.


== Protocol ==
== Protocol ==
The IRC protocol is a plain text protocol mostly used on TCP/IP<ref>[http://tools.ietf.org/html/rfc1459#page-4 RFC 1459: Page 4]</ref> port 6667<ref name="port 6667"/> to which the clients connect, but also other ports are in use. Due to it's plain text nature, it can also easily be used "manually" through a telnet tool as the most simple client,<ref name="rfc main site"/> but a specifically crafted IRC client makes usage, especially when being on many channels or even networks at once, much more comfortable.
The IRC protocol is a plain text protocol mostly used on TCP/IP<ref>[http://tools.ietf.org/html/rfc1459#page-4 RFC 1459: Page 4]</ref> port 6667<ref name="port 6667"/> to which the clients connect, but also other ports are in use. Due to it's plain text nature, it can also easily be used "manually" through a telnet tool as the most simple client,<ref name="rfc main site"/> but a specifically crafted IRC client makes usage, especially when being on many channels or even networks at once, much more comfortable.


The main RFC 1459 which describes the protocol has been released in May 1993,<ref name="rfc main site">[http://tools.ietf.org/html/rfc1459 RFC 1459]</ref> RFC 2810, RFC 2811, RFC 2812 and RFC 2813, although some commands and changes introduced with the RFCs following the original RFC 1459 haven't been adopted by all [[IRC daemon|IRC server software]] developers.{{Source}}
The main RFC 1459 which describes the protocol has been released in May 1993,<ref name="rfc main site">[http://tools.ietf.org/html/rfc1459 RFC 1459]</ref> RFC 2810, RFC 2811, RFC 2812 and RFC 2813, although some commands and changes introduced with the RFCs following the original RFC 1459 haven't been adopted by all [[IRC daemon|IRC server software]] developers.{{Source}}


=== Ways to communicate ===
Internet Assigned Numbers Authority has assigned port 194 for IRC, but it is practically not in use - even RFC 1459 lists port 6667 as an example.<ref name="port 6667">[http://tools.ietf.org/html/rfc1459#page-30 RFC 1459: Page 30]</ref> Technically, any ports may be used but port 6667 is the most common - also the common search engine [http://www.searchirc.com SearchIRC] won't index any networks not allowing this port for clients.<ref>[http://searchirc.com/help.php?id=146 Search IRC, the most advanced IRC search engine.]</ref>
Messages from '''one user to another user''' get simply routed to the target user's server that will sent them to the user itself.
 
=== Ways of communication ===
Messages from ''one user to another user'' get simply routed to the target user's server that will sent them to the target user.


Communication from '''one user to many users''' is realized through discussion places called "''channels''". Those can be global and messages will be routed to all servers in a network where users are in the channel of the talking user so everyone will receive the message.<ref>[http://tools.ietf.org/html/rfc2810#section-5.2.1 RFC 2810: Section 5.2.1: To A Channel]</ref>
Communication from ''one user to many users'' is realized through discussion places called "''channels''". Those can be globally available on all servers of a [[IRC network|network]] and messages will be routed to all servers where users are inside the channel to which a message has been sent.<ref>[http://tools.ietf.org/html/rfc2810#section-5.2.1 RFC 2810: Section 5.2.1: To A Channel]</ref>
 
Generally, everything gets routed through a server (or multiple servers in case of a [[IRC network|network]]). Directly communicating with another user is only possible if the server or the user themselves reveals the user's real origin and the user's client allows some sort of direct communication. The IRC protocol doesn't specify or assume any sort of direct communication between users.<ref name="network architecture"/> There exist some extending protocols for direct user-to-user connections though, most notably [[DCC]] which is designed e.g. for direct chats or file transfers.


=== Networks ===
=== Networks ===
{{Main article|IRC network}}
{{Main article|IRC network}}
An [[IRC network]] is a cloud of servers (more specifically, a ''[[Internet Relay Chat#Linking structure|tree]]'') which are [[Server linking|linked together]] and make up a uniform chat place.
An [[IRC network]] is a cloud of servers (more specifically, a ''[[Internet Relay Chat#Linking structure|tree]]'') which are [[Server linking|linked together]] and make up a uniform chat place.<ref name="network architecture"/>


For the user, it's not much different than a single server except that he or she may choose to connect to any of the servers in the network instead of just a single server. Channels are commonly opened globally on all servers so that it doesn't make a difference on which server a single person resides.
For the user, it's not much different than a single server except that he or she may choose to connect to any of the servers in the network instead of just a single server. Channels are commonly opened globally on all servers so that it doesn't make a difference on which server a single person resides.
Line 27: Line 32:
Only in case of a [[netsplit]], multiple servers make a clearly visible difference to a single machine.
Only in case of a [[netsplit]], multiple servers make a clearly visible difference to a single machine.


== History ==
==== Linking structure ====
The first [[IRC daemon|IRC server software]] that allowed chatters to connect to it was the original [[IRCd]] developed by Jarkko Oikarinen, the inventor of the IRC protocol. Inspired by several Bulletin Board System chat programs, he wanted to do some more powerful realtime chat on his own and consequently invented the now well-known chat protocol.<ref name="history1">[http://daniel.haxx.se/irchistory.html History of IRC]</ref> The first bigger IRC servers were hosted by Tampere University of Technology and Helsinki University of Technology, later other universities joined.<ref>[http://www.livinginternet.com/r/ri_irc.htm Internet Relay Chat (IRC) History - How invented, Jarkko Oikarinen]</ref>
{{Main article|Server linking}}
Up to today, IRC servers are mostly [[Server linking#Tree linking|linked in trees]], that means in a non-cyclic manner.<ref name="network architecture"/>
 
This causes a weak point in IRC, because a single server-to-server connection dropping out can separate a huge branch of servers in a network which aren't reachable anymore including the users on them.


In 1989, there were already 40 servers world-wide run by different people.<ref name="history1">[http://daniel.haxx.se/irchistory.html History of IRC]</ref> The original [[EFnet]] is still in place today, [[Undernet]] and [[Dalnet]] were founded when EFnet had more strict linking conditions so interested people got more and more turned away.<ref>[http://www.livinginternet.com/r/ri_net.htm IRC History -- Networks, First EFnet, Internet Relay Chat]</ref> Over the dispute of time based channel status and nickname protection or the delay technique, favoured by the original IRCd developers, [[ircu]], one of the first forks, split off from the original IRCd server project.
This makes IRC vulnerable to [[netsplit]]s, where two separate copies of the global network data exist in two separate, splitted subnets and users might do [[Netsplit#Channel takeover attempts|channel takeover]] attempts when the data is merged again and one of the two versions overridden. Malicious users can abuse this to override the previously present privilegues of a user in a channel by obtaining privilegues themselves in a splitted subnet and keeping them when the net is merging again.


Since the documentation through the RFCs, of which only the original RFC 1459 is strictly followed by most server software developers, the protocol can easily be implemented by anyone to create new [[IRC Server]] software or [[IRC Client]]s. Today, there are hundreds of different server softwares, thousands of networks and which consist of as little as one to as many as 20 servers and allow chatters to connect and talk about various aspects of life.
There are techniques to fight this, which still doesn't remove the disruption caused by netsplits which result in high-traffic quit and join events when the net splits up and merges again.


== Technical details ==
=== Encryption ===
=== Encryption ===
Apart from plain TCP connections, IRC also supports TLS for secure connections. They are only effective in channels though when everyone in the channel uses them, as the messages are also sent to those channel members not having a secure connection and enable a malicious listeners to get them as plain text by spying on their plain text connections to the server when they are just receiving it.
Apart from plain TCP connections, IRC also supports [http://en.wikipedia.org/wiki/Transport_Layer_Security TLS] for secure connections.


=== Assigned Ports ===
The availability of this encryption generally depends on the used [[IRC daemon|IRC server software]], since not all of them support this feature.
Internet Assigned Numbers Authority has assigned port 194 for IRC, but it is basically not in use - even RFC 1459 lists port 6667 as an example.<ref name="port 6667">[http://tools.ietf.org/html/rfc1459#page-30 RFC 1459: Page 30]</ref> Technically, any ports may be used but port 6667 is the most common - also the search engine [[SearchIRC]] won't index any networks not allowing this port for clients.<ref>[http://searchirc.com/help.php?id=146 Search IRC, the most advanced IRC search engine.]</ref>


=== Linking structure ===
Encryption only effectively works in channels when everyone in the channel uses them, as the messages are also sent to those channel members not having a secure connection as normal plain text.
{{Main article|Server linking}}
 
Up to today, IRC servers are mostly [[Server linking#Tree linking|linked in trees]], that means in a non-cyclic manner. This causes a weak point in IRC, because a single server-to-server connection dropping out can separate a huge branch of servers in a network which aren't reachable anymore including the users on them. They are vulnerable to [[Netsplit]]s, where two separate copies of the global network data exist in two separate subnets and users might do [[Netsplit#Channel takeover attempts|Channel Takeover]] attempts. There are techniques to fight this, which still doesn't remove the disruption caused by netsplits which result in high-traffic quit and join events when the net splits up and merges again.
=== Character sets ===
IRC doesn't specify a character set, so transmitting non-ASCII characters can lead to problems. Some clients attempt to guess the correct charset of a transmitted character, but since many values are valid in multiple charsets which have different meanings and interpretations, this approach is error-prone and agreeing on a used charset e.g. on a per-channel basis is helpful (although it can't be technically enforced).
 
A commonly used charset is UTF-8 due to its wide range of supported characters and languages.
 
== Fragmentation ==
Since many open-source and free-to-use [[IRC daemon|server software]] and [[IRC client|clients]] exist, anyone with enough knowledge can startup an own network/server. Therefore, tons of small networks run by individuals exist<ref name="smallnetworksnumbers">http://searchirc.com/network-size/1</ref> which has met some criticism of the IRC community{{Source}}. Also the diversity of networks has probably increased the wide range of slightly differing implementations of the protocol with differing features, leading to issues with compatibility of clients.{{Source}}


== References ==
== References ==
Line 49: Line 61:


== External links ==
== External links ==
Here are a few sites were you can find more information about IRC:
Here are a few sites where you can find more information about IRC:
* http://www.irchelp.org/
* http://www.irchelp.org/
* http://www.irc.org/
* http://www.irc.org/

Latest revision as of 05:08, 18 November 2012


Internet Relay Chat (common abbreviation: IRC) is a chat protocol that implements text-based[1] realtime chat for users using IRC clients to connect to central IRC servers[2] that form an IRC network.[3] It has been mainly designed for multi-user conferences[1] but may also be used to send private messages to another user[4] that get routed through the network.[5] It is a plain text protocol and has first been used by Jarkko "WiZ" Oikarinen in 1988 who wrote the first client and server software ("IRC daemon") named IRCd for it.[6]

History

The first IRC server software that allowed chatters to connect to it was the original IRCd developed by Jarkko Oikarinen, the inventor of the IRC protocol. Inspired by several Bulletin Board System chat programs, he wanted to do some more powerful realtime chat on his own and consequently invented the now well-known chat protocol.[6] The first bigger IRC servers were hosted by Tampere University of Technology and Helsinki University of Technology, later other universities joined.[7]

In 1989, there were already 40 servers world-wide run by different people.[6] The original [1] is still in place today, [2] and [3] were founded when EFnet had more strict linking conditions so interested people got more and more turned away.[8] Over the dispute of time based channel status and nickname protection or the delay technique, favoured by the original IRCd developers, ircu, one of the first forks, split off from the original IRCd server project.

Since the documentation through the RFCs, of which only the original RFC 1459 is strictly followed by most server software developers, the protocol can easily be implemented by anyone to create new IRC server software or IRC clients. Today, there are hundreds of different server softwares, thousands of networks and which consist of as little as one to as many as 20 servers and allow chatters to connect and talk about various aspects of life.

Protocol

The IRC protocol is a plain text protocol mostly used on TCP/IP[9] port 6667[10] to which the clients connect, but also other ports are in use. Due to it's plain text nature, it can also easily be used "manually" through a telnet tool as the most simple client,[11] but a specifically crafted IRC client makes usage, especially when being on many channels or even networks at once, much more comfortable.

The main RFC 1459 which describes the protocol has been released in May 1993,[11] RFC 2810, RFC 2811, RFC 2812 and RFC 2813, although some commands and changes introduced with the RFCs following the original RFC 1459 haven't been adopted by all IRC server software developers.[Source?]

Internet Assigned Numbers Authority has assigned port 194 for IRC, but it is practically not in use - even RFC 1459 lists port 6667 as an example.[10] Technically, any ports may be used but port 6667 is the most common - also the common search engine SearchIRC won't index any networks not allowing this port for clients.[12]

Ways of communication

Messages from one user to another user get simply routed to the target user's server that will sent them to the target user.

Communication from one user to many users is realized through discussion places called "channels". Those can be globally available on all servers of a network and messages will be routed to all servers where users are inside the channel to which a message has been sent.[13]

Generally, everything gets routed through a server (or multiple servers in case of a network). Directly communicating with another user is only possible if the server or the user themselves reveals the user's real origin and the user's client allows some sort of direct communication. The IRC protocol doesn't specify or assume any sort of direct communication between users.[3] There exist some extending protocols for direct user-to-user connections though, most notably DCC which is designed e.g. for direct chats or file transfers.

Networks

See also the main article → IRC network

An IRC network is a cloud of servers (more specifically, a tree) which are linked together and make up a uniform chat place.[3]

For the user, it's not much different than a single server except that he or she may choose to connect to any of the servers in the network instead of just a single server. Channels are commonly opened globally on all servers so that it doesn't make a difference on which server a single person resides.

Only in case of a netsplit, multiple servers make a clearly visible difference to a single machine.

Linking structure

See also the main article → Server linking

Up to today, IRC servers are mostly linked in trees, that means in a non-cyclic manner.[3]

This causes a weak point in IRC, because a single server-to-server connection dropping out can separate a huge branch of servers in a network which aren't reachable anymore including the users on them.

This makes IRC vulnerable to netsplits, where two separate copies of the global network data exist in two separate, splitted subnets and users might do channel takeover attempts when the data is merged again and one of the two versions overridden. Malicious users can abuse this to override the previously present privilegues of a user in a channel by obtaining privilegues themselves in a splitted subnet and keeping them when the net is merging again.

There are techniques to fight this, which still doesn't remove the disruption caused by netsplits which result in high-traffic quit and join events when the net splits up and merges again.

Encryption

Apart from plain TCP connections, IRC also supports TLS for secure connections.

The availability of this encryption generally depends on the used IRC server software, since not all of them support this feature.

Encryption only effectively works in channels when everyone in the channel uses them, as the messages are also sent to those channel members not having a secure connection as normal plain text.

Character sets

IRC doesn't specify a character set, so transmitting non-ASCII characters can lead to problems. Some clients attempt to guess the correct charset of a transmitted character, but since many values are valid in multiple charsets which have different meanings and interpretations, this approach is error-prone and agreeing on a used charset e.g. on a per-channel basis is helpful (although it can't be technically enforced).

A commonly used charset is UTF-8 due to its wide range of supported characters and languages.

Fragmentation

Since many open-source and free-to-use server software and clients exist, anyone with enough knowledge can startup an own network/server. Therefore, tons of small networks run by individuals exist[14] which has met some criticism of the IRC community[Source?]. Also the diversity of networks has probably increased the wide range of slightly differing implementations of the protocol with differing features, leading to issues with compatibility of clients.[Source?]

References

External links

Here are a few sites where you can find more information about IRC:

Other IRC related sites are: