mirror of
git://git.acid.vegas/archive.git
synced 2024-11-22 16:16:41 +00:00
564 lines
19 KiB
Plaintext
564 lines
19 KiB
Plaintext
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Network Working Group C. Kalt
|
|||
|
Request for Comments: 2810 April 2000
|
|||
|
Updates: 1459
|
|||
|
Category: Informational
|
|||
|
|
|||
|
|
|||
|
Internet Relay Chat: Architecture
|
|||
|
|
|||
|
Status of this Memo
|
|||
|
|
|||
|
This memo provides information for the Internet community. It does
|
|||
|
not specify an Internet standard of any kind. Distribution of this
|
|||
|
memo is unlimited.
|
|||
|
|
|||
|
Copyright Notice
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
|||
|
|
|||
|
Abstract
|
|||
|
|
|||
|
The IRC (Internet Relay Chat) protocol is for use with text based
|
|||
|
conferencing. It has been developed since 1989 when it was originally
|
|||
|
implemented as a mean for users on a BBS to chat amongst themselves.
|
|||
|
|
|||
|
First formally documented in May 1993 by RFC 1459 [IRC], the protocol
|
|||
|
has kept evolving. This document is an update describing the
|
|||
|
architecture of the current IRC protocol and the role of its
|
|||
|
different components. Other documents describe in detail the
|
|||
|
protocol used between the various components defined here.
|
|||
|
|
|||
|
Table of Contents
|
|||
|
|
|||
|
1. Introduction ............................................... 2
|
|||
|
2. Components ................................................. 2
|
|||
|
2.1 Servers ................................................ 2
|
|||
|
2.2 Clients ................................................ 3
|
|||
|
2.2.1 User Clients ...................................... 3
|
|||
|
2.2.2 Service Clients ................................... 3
|
|||
|
3. Architecture ............................................... 3
|
|||
|
4. IRC Protocol Services ...................................... 4
|
|||
|
4.1 Client Locator ......................................... 4
|
|||
|
4.2 Message Relaying ....................................... 4
|
|||
|
4.3 Channel Hosting And Management ......................... 4
|
|||
|
5. IRC Concepts ............................................... 4
|
|||
|
5.1 One-To-One Communication ............................... 5
|
|||
|
5.2 One-To-Many ............................................ 5
|
|||
|
5.2.1 To A Channel ...................................... 5
|
|||
|
5.2.2 To A Host/Server Mask ............................. 6
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Kalt Informational [Page 1]
|
|||
|
|
|||
|
RFC 2810 Internet Relay Chat: Architecture April 2000
|
|||
|
|
|||
|
|
|||
|
5.2.3 To A List ......................................... 6
|
|||
|
5.3 One-To-All ............................................. 6
|
|||
|
5.3.1 Client-to-Client .................................. 6
|
|||
|
5.3.2 Client-to-Server .................................. 7
|
|||
|
5.3.3 Server-to-Server .................................. 7
|
|||
|
6. Current Problems ........................................... 7
|
|||
|
6.1 Scalability ............................................ 7
|
|||
|
6.2 Reliability ............................................ 7
|
|||
|
6.3 Network Congestion ..................................... 7
|
|||
|
6.4 Privacy ................................................ 8
|
|||
|
7. Security Considerations .................................... 8
|
|||
|
8. Current Support And Availability ........................... 8
|
|||
|
9. Acknowledgements ........................................... 8
|
|||
|
10. References ................................................ 8
|
|||
|
11. Author's Address .......................................... 9
|
|||
|
12. Full Copyright Statement .................................. 10
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
The IRC (Internet Relay Chat) protocol has been designed over a
|
|||
|
number of years for use with text based conferencing. This document
|
|||
|
describes its current architecture.
|
|||
|
|
|||
|
The IRC Protocol is based on the client-server model, and is well
|
|||
|
suited to running on many machines in a distributed fashion. A
|
|||
|
typical setup involves a single process (the server) forming a
|
|||
|
central point for clients (or other servers) to connect to,
|
|||
|
performing the required message delivery/multiplexing and other
|
|||
|
functions.
|
|||
|
|
|||
|
This distributed model, which requires each server to have a copy
|
|||
|
of the global state information, is still the most flagrant problem
|
|||
|
of the protocol as it is a serious handicap, which limits the maximum
|
|||
|
size a network can reach. If the existing networks have been able to
|
|||
|
keep growing at an incredible pace, we must thank hardware
|
|||
|
manufacturers for giving us ever more powerful systems.
|
|||
|
|
|||
|
2. Components
|
|||
|
|
|||
|
The following paragraphs define the basic components of the IRC
|
|||
|
protocol.
|
|||
|
|
|||
|
2.1 Servers
|
|||
|
|
|||
|
The server forms the backbone of IRC as it is the only component
|
|||
|
of the protocol which is able to link all the other components
|
|||
|
together: it provides a point to which clients may connect to talk to
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Kalt Informational [Page 2]
|
|||
|
|
|||
|
RFC 2810 Internet Relay Chat: Architecture April 2000
|
|||
|
|
|||
|
|
|||
|
each other [IRC-CLIENT], and a point for other servers to connect to
|
|||
|
[IRC-SERVER]. The server is also responsible for providing the basic
|
|||
|
services defined by the IRC protocol.
|
|||
|
|
|||
|
2.2 Clients
|
|||
|
|
|||
|
A client is anything connecting to a server that is not another
|
|||
|
server. There are two types of clients which both serve a different
|
|||
|
purpose.
|
|||
|
|
|||
|
2.2.1 User Clients
|
|||
|
|
|||
|
User clients are generally programs providing a text based
|
|||
|
interface that is used to communicate interactively via IRC. This
|
|||
|
particular type of clients is often referred as "users".
|
|||
|
|
|||
|
2.2.2 Service Clients
|
|||
|
|
|||
|
Unlike users, service clients are not intended to be used manually
|
|||
|
nor for talking. They have a more limited access to the chat
|
|||
|
functions of the protocol, while optionally having access to more
|
|||
|
private data from the servers.
|
|||
|
|
|||
|
Services are typically automatons used to provide some kind of
|
|||
|
service (not necessarily related to IRC itself) to users. An example
|
|||
|
is a service collecting statistics about the origin of users
|
|||
|
connected on the IRC network.
|
|||
|
|
|||
|
3. Architecture
|
|||
|
|
|||
|
An IRC network is defined by a group of servers connected to each
|
|||
|
other. A single server forms the simplest IRC network.
|
|||
|
|
|||
|
The only network configuration allowed for IRC servers is that of
|
|||
|
a spanning tree where each server acts as a central node for the rest
|
|||
|
of the network it sees.
|
|||
|
|
|||
|
1--\
|
|||
|
A D---4
|
|||
|
2--/ \ /
|
|||
|
B----C
|
|||
|
/ \
|
|||
|
3 E
|
|||
|
|
|||
|
Servers: A, B, C, D, E Clients: 1, 2, 3, 4
|
|||
|
|
|||
|
[ Fig. 1. Sample small IRC network ]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Kalt Informational [Page 3]
|
|||
|
|
|||
|
RFC 2810 Internet Relay Chat: Architecture April 2000
|
|||
|
|
|||
|
|
|||
|
The IRC protocol provides no mean for two clients to directly
|
|||
|
communicate. All communication between clients is relayed by the
|
|||
|
server(s).
|
|||
|
|
|||
|
4. IRC Protocol Services
|
|||
|
|
|||
|
This section describes the services offered by the IRC protocol. The
|
|||
|
combination of these services allow real-time conferencing.
|
|||
|
|
|||
|
4.1 Client Locator
|
|||
|
|
|||
|
To be able to exchange messages, two clients must be able to locate
|
|||
|
each other.
|
|||
|
|
|||
|
Upon connecting to a server, a client registers using a label which
|
|||
|
is then used by other servers and clients to know where the client is
|
|||
|
located. Servers are responsible for keeping track of all the labels
|
|||
|
being used.
|
|||
|
|
|||
|
4.2 Message Relaying
|
|||
|
|
|||
|
The IRC protocol provides no mean for two clients to directly
|
|||
|
communicate. All communication between clients is relayed by the
|
|||
|
server(s).
|
|||
|
|
|||
|
4.3 Channel Hosting And Management
|
|||
|
|
|||
|
A channel is a named group of one or more users which will all
|
|||
|
receive messages addressed to that channel. A channel is
|
|||
|
characterized by its name and current members, it also has a set of
|
|||
|
properties which can be manipulated by (some of) its members.
|
|||
|
|
|||
|
Channels provide a mean for a message to be sent to several clients.
|
|||
|
Servers host channels, providing the necessary message multiplexing.
|
|||
|
Servers are also responsible for managing channels by keeping track
|
|||
|
of the channel members. The exact role of servers is defined in
|
|||
|
"Internet Relay Chat: Channel Management" [IRC-CHAN].
|
|||
|
|
|||
|
5. IRC Concepts
|
|||
|
|
|||
|
This section is devoted to describing the actual concepts behind the
|
|||
|
organization of the IRC protocol and how different classes of
|
|||
|
messages are delivered.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Kalt Informational [Page 4]
|
|||
|
|
|||
|
RFC 2810 Internet Relay Chat: Architecture April 2000
|
|||
|
|
|||
|
|
|||
|
5.1 One-To-One Communication
|
|||
|
|
|||
|
Communication on a one-to-one basis is usually performed by clients,
|
|||
|
since most server-server traffic is not a result of servers talking
|
|||
|
only to each other. To provide a means for clients to talk to each
|
|||
|
other, it is REQUIRED that all servers be able to send a message in
|
|||
|
exactly one direction along the spanning tree in order to reach any
|
|||
|
client. Thus the path of a message being delivered is the shortest
|
|||
|
path between any two points on the spanning tree.
|
|||
|
|
|||
|
The following examples all refer to Figure 1 above.
|
|||
|
|
|||
|
Example 1: A message between clients 1 and 2 is only seen by server
|
|||
|
A, which sends it straight to client 2.
|
|||
|
|
|||
|
Example 2: A message between clients 1 and 3 is seen by servers A &
|
|||
|
B, and client 3. No other clients or servers are allowed see the
|
|||
|
message.
|
|||
|
|
|||
|
Example 3: A message between clients 2 and 4 is seen by servers A, B,
|
|||
|
C & D and client 4 only.
|
|||
|
|
|||
|
5.2 One-To-Many
|
|||
|
|
|||
|
The main goal of IRC is to provide a forum which allows easy and
|
|||
|
efficient conferencing (one to many conversations). IRC offers
|
|||
|
several means to achieve this, each serving its own purpose.
|
|||
|
|
|||
|
5.2.1 To A Channel
|
|||
|
|
|||
|
In IRC the channel has a role equivalent to that of the multicast
|
|||
|
group; their existence is dynamic and the actual conversation carried
|
|||
|
out on a channel MUST only be sent to servers which are supporting
|
|||
|
users on a given channel. Moreover, the message SHALL only be sent
|
|||
|
once to every local link as each server is responsible to fan the
|
|||
|
original message to ensure that it will reach all the recipients.
|
|||
|
|
|||
|
The following examples all refer to Figure 2.
|
|||
|
|
|||
|
Example 4: Any channel with 1 client in it. Messages to the channel
|
|||
|
go to the server and then nowhere else.
|
|||
|
|
|||
|
Example 5: 2 clients in a channel. All messages traverse a path as if
|
|||
|
they were private messages between the two clients outside a
|
|||
|
channel.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Kalt Informational [Page 5]
|
|||
|
|
|||
|
RFC 2810 Internet Relay Chat: Architecture April 2000
|
|||
|
|
|||
|
|
|||
|
Example 6: Clients 1, 2 and 3 in a channel. All messages to the
|
|||
|
channel are sent to all clients and only those servers which must
|
|||
|
be traversed by the message if it were a private message to a
|
|||
|
single client. If client 1 sends a message, it goes back to
|
|||
|
client 2 and then via server B to client 3.
|
|||
|
|
|||
|
5.2.2 To A Host/Server Mask
|
|||
|
|
|||
|
To provide with some mechanism to send messages to a large body of
|
|||
|
related users, host and server mask messages are available. These
|
|||
|
messages are sent to users whose host or server information match
|
|||
|
that of the mask. The messages are only sent to locations where
|
|||
|
users are, in a fashion similar to that of channels.
|
|||
|
|
|||
|
5.2.3 To A List
|
|||
|
|
|||
|
The least efficient style of one-to-many conversation is through
|
|||
|
clients talking to a 'list' of targets (client, channel, mask). How
|
|||
|
this is done is almost self explanatory: the client gives a list of
|
|||
|
destinations to which the message is to be delivered and the server
|
|||
|
breaks it up and dispatches a separate copy of the message to each
|
|||
|
given destination.
|
|||
|
|
|||
|
This is not as efficient as using a channel since the destination
|
|||
|
list MAY be broken up and the dispatch sent without checking to make
|
|||
|
sure duplicates aren't sent down each path.
|
|||
|
|
|||
|
5.3 One-To-All
|
|||
|
|
|||
|
The one-to-all type of message is better described as a broadcast
|
|||
|
message, sent to all clients or servers or both. On a large network
|
|||
|
of users and servers, a single message can result in a lot of traffic
|
|||
|
being sent over the network in an effort to reach all of the desired
|
|||
|
destinations.
|
|||
|
|
|||
|
For some class of messages, there is no option but to broadcast it to
|
|||
|
all servers so that the state information held by each server is
|
|||
|
consistent between servers.
|
|||
|
|
|||
|
5.3.1 Client-to-Client
|
|||
|
|
|||
|
There is no class of message which, from a single message, results in
|
|||
|
a message being sent to every other client.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Kalt Informational [Page 6]
|
|||
|
|
|||
|
RFC 2810 Internet Relay Chat: Architecture April 2000
|
|||
|
|
|||
|
|
|||
|
5.3.2 Client-to-Server
|
|||
|
|
|||
|
Most of the commands which result in a change of state information
|
|||
|
(such as channel membership, channel mode, user status, etc.) MUST be
|
|||
|
sent to all servers by default, and this distribution SHALL NOT be
|
|||
|
changed by the client.
|
|||
|
|
|||
|
5.3.3 Server-to-Server
|
|||
|
|
|||
|
While most messages between servers are distributed to all 'other'
|
|||
|
servers, this is only required for any message that affects a user,
|
|||
|
channel or server. Since these are the basic items found in IRC,
|
|||
|
nearly all messages originating from a server are broadcast to all
|
|||
|
other connected servers.
|
|||
|
|
|||
|
6. Current Problems
|
|||
|
|
|||
|
There are a number of recognized problems with this protocol, this
|
|||
|
section only addresses the problems related to the architecture of
|
|||
|
the protocol.
|
|||
|
|
|||
|
6.1 Scalability
|
|||
|
|
|||
|
It is widely recognized that this protocol does not scale
|
|||
|
sufficiently well when used in a large arena. The main problem comes
|
|||
|
from the requirement that all servers know about all other servers,
|
|||
|
clients and channels and that information regarding them be updated
|
|||
|
as soon as it changes.
|
|||
|
|
|||
|
6.2 Reliability
|
|||
|
|
|||
|
As the only network configuration allowed for IRC servers is that of
|
|||
|
a spanning tree, each link between two servers is an obvious and
|
|||
|
quite serious point of failure. This particular issue is addressed
|
|||
|
more in detail in "Internet Relay Chat: Server Protocol" [IRC-
|
|||
|
SERVER].
|
|||
|
|
|||
|
6.3 Network Congestion
|
|||
|
|
|||
|
Another problem related to the scalability and reliability issues, as
|
|||
|
well as the spanning tree architecture, is that the protocol and
|
|||
|
architecture for IRC are extremely vulnerable to network congestions.
|
|||
|
This problem is endemic, and should be solved for the next
|
|||
|
generation: if congestion and high traffic volume cause a link
|
|||
|
between two servers to fail, not only this failure generates more
|
|||
|
network traffic, but the reconnection (eventually elsewhere) of two
|
|||
|
servers also generates more traffic.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Kalt Informational [Page 7]
|
|||
|
|
|||
|
RFC 2810 Internet Relay Chat: Architecture April 2000
|
|||
|
|
|||
|
|
|||
|
In an attempt to minimize the impact of these problems, it is
|
|||
|
strongly RECOMMENDED that servers do not automatically try to
|
|||
|
reconnect too fast, in order to avoid aggravating the situation.
|
|||
|
|
|||
|
6.4 Privacy
|
|||
|
|
|||
|
Besides not scaling well, the fact that servers need to know all
|
|||
|
information about other entities, the issue of privacy is also a
|
|||
|
concern. This is in particular true for channels, as the related
|
|||
|
information is quite a lot more revealing than whether a user is
|
|||
|
online or not.
|
|||
|
|
|||
|
7. Security Considerations
|
|||
|
|
|||
|
Asides from the privacy concerns mentioned in section 6.4 (Privacy),
|
|||
|
security is believed to be irrelevant to this document.
|
|||
|
|
|||
|
8. Current Support And Availability
|
|||
|
|
|||
|
Mailing lists for IRC related discussion:
|
|||
|
General discussion: ircd-users@irc.org
|
|||
|
Protocol development: ircd-dev@irc.org
|
|||
|
|
|||
|
Software implementations:
|
|||
|
ftp://ftp.irc.org/irc/server
|
|||
|
ftp://ftp.funet.fi/pub/unix/irc
|
|||
|
ftp://coombs.anu.edu.au/pub/irc
|
|||
|
|
|||
|
Newsgroup: alt.irc
|
|||
|
|
|||
|
9. Acknowledgements
|
|||
|
|
|||
|
Parts of this document were copied from the RFC 1459 [IRC] which
|
|||
|
first formally documented the IRC Protocol. It has also benefited
|
|||
|
from many rounds of review and comments. In particular, the
|
|||
|
following people have made significant contributions to this
|
|||
|
document:
|
|||
|
|
|||
|
Matthew Green, Michael Neumayer, Volker Paulsen, Kurt Roeckx, Vesa
|
|||
|
Ruokonen, Magnus Tjernstrom, Stefan Zehl.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Kalt Informational [Page 8]
|
|||
|
|
|||
|
RFC 2810 Internet Relay Chat: Architecture April 2000
|
|||
|
|
|||
|
|
|||
|
10. References
|
|||
|
|
|||
|
[KEYWORDS] Bradner, S., "Key words for use in RFCs to Indicate
|
|||
|
Requirement Levels", BCP 14, RFC 2119, March 1997.
|
|||
|
|
|||
|
[IRC] Oikarinen, J. and D. Reed, "Internet Relay Chat
|
|||
|
Protocol", RFC 1459, May 1993.
|
|||
|
|
|||
|
[IRC-CLIENT] Kalt, C., "Internet Relay Chat: Client Protocol", RFC
|
|||
|
2812, April 2000.
|
|||
|
|
|||
|
[IRC-SERVER] Kalt, C., "Internet Relay Chat: Server Protocol", RFC
|
|||
|
2813, April 2000.
|
|||
|
|
|||
|
[IRC-CHAN] Kalt, C., "Internet Relay Chat: Channel Management", RFC
|
|||
|
2811, April 2000.
|
|||
|
|
|||
|
11. Author's Address
|
|||
|
|
|||
|
Christophe Kalt
|
|||
|
99 Teaneck Rd, Apt #117
|
|||
|
Ridgefield Park, NJ 07660
|
|||
|
USA
|
|||
|
|
|||
|
EMail: kalt@stealth.net
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Kalt Informational [Page 9]
|
|||
|
|
|||
|
RFC 2810 Internet Relay Chat: Architecture April 2000
|
|||
|
|
|||
|
|
|||
|
12. Full Copyright Statement
|
|||
|
|
|||
|
Copyright (C) The Internet Society (2000). All Rights Reserved.
|
|||
|
|
|||
|
This document and translations of it may be copied and furnished to
|
|||
|
others, and derivative works that comment on or otherwise explain it
|
|||
|
or assist in its implementation may be prepared, copied, published
|
|||
|
and distributed, in whole or in part, without restriction of any
|
|||
|
kind, provided that the above copyright notice and this paragraph are
|
|||
|
included on all such copies and derivative works. However, this
|
|||
|
document itself may not be modified in any way, such as by removing
|
|||
|
the copyright notice or references to the Internet Society or other
|
|||
|
Internet organizations, except as needed for the purpose of
|
|||
|
developing Internet standards in which case the procedures for
|
|||
|
copyrights defined in the Internet Standards process must be
|
|||
|
followed, or as required to translate it into languages other than
|
|||
|
English.
|
|||
|
|
|||
|
The limited permissions granted above are perpetual and will not be
|
|||
|
revoked by the Internet Society or its successors or assigns.
|
|||
|
|
|||
|
This document and the information contained herein is provided on an
|
|||
|
"AS IS" basis and THE INTERNET SOCIETY AND THE INTERNET ENGINEERING
|
|||
|
TASK FORCE DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING
|
|||
|
BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE INFORMATION
|
|||
|
HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
|
|||
|
MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
|||
|
|
|||
|
Acknowledgement
|
|||
|
|
|||
|
Funding for the RFC Editor function is currently provided by the
|
|||
|
Internet Society.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Kalt Informational [Page 10]
|
|||
|
|