, an IRC client for
GTK environments , a text-based IRC client IRC is an open
protocol that uses
TCP Users access IRC networks by connecting a client to a server. 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. IRC was originally a
plain text protocol However, the
de facto standard has always been to run IRC on 6667/TCP and nearby port numbers (for example TCP ports 6660–6669, 7000) 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. 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. 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. Microsoft made an extension for IRC in 1998 via the proprietary
IRCX. They later stopped distributing software supporting IRCX, instead developing the proprietary
MSNP. The standard structure of a network of IRC servers is a
tree. Messages are routed along only necessary branches of the tree but network state is sent to every server 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 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 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. This is a strength in comparison to non-multicasting protocols such as
Simple Mail Transfer Protocol (SMTP) or
Extensible Messaging and Presence Protocol (XMPP). 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).
Commands and replies IRC has a line-based structure. Clients send single-line messages to the server, receive replies to those messages 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. 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.
Channels The basic means of communicating to a group of users in an established IRC session is through a
channel. Channels on a network can be displayed using the IRC command
LIST, 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, in most clients available as
/join #channelname. Messages sent to the joined channels are then relayed to all other users. Other less common channel types include '+' channels—'modeless' channels without operators—and '!' channels, a form of
timestamped channel on normally non-timestamped networks.
Modes Users and channels may have
modes that are represented by individual case-sensitive letters and are set using the
MODE command. 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.) 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. Modes that apply to users on a channel have an associated symbol that is used to represent the mode in names replies (sent to clients on first joining a channel 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,
Standard (RFC 1459) modes Many daemons and networks have added extra modes or modified the behavior of modes in the above list.
Channel operators 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.
Operators There are also users who maintain elevated rights on their local server, or the entire network; these are called IRC operators, 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 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, distinguished by the ! to indicate a command and the Nickname. 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. If ident is not available on the client, the username specified when the client connected is used after being prefixed with a
tilde. 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.
URI scheme There are three provisional recognized
uniform resource identifier (URI) schemes for Internet Relay Chat: irc, ircs, and irc6. When supported, they allow
hyperlinks of various forms, including irc://[:]/
? ircs://[:]/
? irc6://[:]/
? (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. (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. ==Challenges==