Difference between revisions of "Internet Relay Chat"

From IRC Wiki
Jump to navigation Jump to search
 
(25 intermediate revisions by 5 users not shown)
Line 1: Line 1:
<Rating comment=false>
Rate This!
1 (Hate it)
2 (Dislike it)
3 (It's ok)
4 (Like it)
5 (Love it)
</Rating>


==What is IRC?==
*Internet Relay Chat (Commonly known as IRC) is a real-time instant messaging tool that allows group messaging via what is known as a channel, or one-to-one private messaging were one user can contact another use privately.


==Who thought of/created IRC?==
'''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>
* Jarkko Oikarinen of Finland created IRC in August 1988.
* Oikarinen was inspired by a chat service known as Bitnet, Bitnet had some basic function similar to todays IRC such as commands being executed by the / and the ability to send messages to a user.


==What can IRC do?==
== History ==
* IRC gives the user the ability to converse with other IRC users in what is known as a channel, or in a private message.
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>


==How does IRC work?==
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.
* IRC works by somebody running software known as an IRCd, this is what is known as the IRC Server,


==How do I use IRC?==
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.
* To use IRC you need an IRC Client
* You then connect to the IRC Server and join IRC Channels


==What are IRC Servers?==
== Protocol ==
* IRC Servers are what the user connects to via an IRC Client.
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.
* There are many different type of IRC servers but they all offer the same basic functionality.
* IRC Servers are capable of linking to other IRC Servers to form a larger IRC Network
* One of example of an IRC Server is [http://www.quakenet.org QuakeNet]
* A few examples of the IRC Server (IRCd) software are:
** [[InspIRCd]]
** [[UnrealIRCd]]


* IRC Servers are also capable of connecting to IRC Services,
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}}


==What are IRC Services?==
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>
* IRC Services are what is used to control IRC Servers.
* IRC Services offer many different functions depending on the service package but most offer similar functions, such as:
** Nickname Registration ([[NickServ]])
** Channel Registration ([[ChanServ]])


* There are many more service functions and they can be found [http://www.irc-wiki.org/Service_Bots here]
=== Ways of communication ===
* Services link to servers the same way as servers link to one another
Messages from ''one user to another user'' get simply routed to the target user's server that will sent them to the target user.
* A few examples of the different type of services are:
** [[Anope]]
** [[Atheme]]
** [[Epona]]
** [[srvx]]


* There are also a different class of services that are known as Extended Services,
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>


==What are Extended Services?==
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.
* Extended Services provide extra features and protection to IRC Servers depending on what service package is used.
* Certain services can protect Servers by scanning for proxys and preventing flood attacks on the Server.
* Services that provide protection are:
** [[BOPM]]
** [[Defender]]
** [[Omega]]


* Services that provide features like games, channel monitoring and channel logging, along with channel statistic generation.
=== Networks ===
* Services that provide extra features are:
{{Main article|IRC network}}
** [[Denora]]
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"/>
** [[NeoStats]]
** [[Omega]]


* A lot of these features are usable via the IRC Channel
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.


==What are IRC Channels?==
==== Linking structure ====
* IRC Channels are were the magic happens, this is the main place that IRC users come to chat
{{Main article|Server linking}}
* IRC Channels can be moderated too depending on the IRCd, this means that abusive or aggressive users can be banned and kicked out of channels to restore enjoyment for users.
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"/>


==What is an IRC Client?==
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.
* An IRC Client is whats used to connect to the IRC Server, there are three main types of IRC Client,
** Client
** Mobile Client
** Web Client


* Each client has different features that make them all truly unique,
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.
* The most common web client today is [[Mibbit]] which also included twitter usability to ensure users make the most of their online time.
* an example of a mobile client is [[jmIrc]] this is a client that can be used from a hand-held mobile phone.
* The most common client is the stand-alone client, these are truly unique because some have their own scripting languages which can enhance the usability and functions of the client.
* A few IRC Clients are:
** [[XChat]]
** [[Irssi]]
** [[mIRC]]


==IRC Info Sites==
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.
Here are a few sites were you can find more information about IRC:
 
=== Encryption ===
Apart from plain TCP connections, IRC also supports [http://en.wikipedia.org/wiki/Transport_Layer_Security TLS] for secure connections.
 
The availability of this encryption generally depends on the used [[IRC daemon|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 [[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 ==
{{Reflist}}
 
== External links ==
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: