Internet Relay Chat

From IRC Wiki
(Redirected from IRC)
Jump to: navigation, search


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

  1. 1.0 1.1 RFC 2810: Section 1: Introduction
  2. RFC 1459: Section 1.1: Servers
  3. 3.0 3.1 3.2 3.3 RFC 1459: Section 3: Architecture
  4. RFC 2810: Section 5.1: One-To-One Communication
  5. RFC 2810: Section 4.2: Message Relaying
  6. 6.0 6.1 6.2 History of IRC
  7. Internet Relay Chat (IRC) History - How invented, Jarkko Oikarinen
  8. IRC History -- Networks, First EFnet, Internet Relay Chat
  9. RFC 1459: Page 4
  10. 10.0 10.1 RFC 1459: Page 30
  11. 11.0 11.1 RFC 1459
  12. Search IRC, the most advanced IRC search engine.
  13. RFC 2810: Section 5.2.1: To A Channel
  14. http://searchirc.com/network-size/1

External links

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

Other IRC related sites are: