rfc2813.txt

来自「RFC 的详细文档!」· 文本 代码 · 共 1,460 行 · 第 1/4 页

TXT
1,460
字号






Network Working Group                                           C. Kalt
Request for Comments: 2813                                   April 2000
Updates: 1459
Category: Informational


                  Internet Relay Chat: Server Protocol

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

   While based on the client-server model, the IRC (Internet Relay Chat)
   protocol allows servers to connect to each other effectively forming
   a network.

   This document defines the protocol used by servers to talk to each
   other.  It was originally a superset of the client protocol but has
   evolved differently.

   First formally documented in May 1993 as part of RFC 1459 [IRC], most
   of the changes brought since then can be found in this document as
   development was focused on making the protocol scale better.  Better
   scalability has allowed existing world-wide networks to keep growing
   and reach sizes which defy the old specification.


















Kalt                         Informational                      [Page 1]

RFC 2813          Internet Relay Chat: Server Protocol        April 2000


Table of Contents

   1.  Introduction ...............................................   3
   2.  Global database ............................................   3
      2.1  Servers ................................................   3
      2.2  Clients ................................................   4
         2.2.1  Users .............................................   4
         2.2.2  Services ..........................................   4
      2.3  Channels ...............................................   4
   3.  The IRC Server Specification ...............................   5
      3.1  Overview ...............................................   5
      3.2  Character codes ........................................   5
      3.3  Messages ...............................................   5
         3.3.1  Message format in Augmented BNF ...................   6
      3.4  Numeric replies ........................................   7
   4.  Message Details ............................................   7
      4.1  Connection Registration ................................   8
         4.1.1  Password message ..................................   8
         4.1.2  Server message ....................................   9
         4.1.3  Nick ..............................................  10
         4.1.4  Service message ...................................  11
         4.1.5  Quit ..............................................  12
         4.1.6  Server quit message ...............................  13
      4.2  Channel operations .....................................  14
         4.2.1  Join message ......................................  14
         4.2.2  Njoin message .....................................  15
         4.2.3  Mode message ......................................  16
   5.  Implementation details  ....................................  16
      5.1  Connection 'Liveness' ..................................  16
      5.2  Accepting a client to server connection ................  16
         5.2.1  Users .............................................  16
         5.2.2  Services ..........................................  17
      5.3  Establishing a server-server connection. ...............  17
         5.3.1  Link options ......................................  17
            5.3.1.1  Compressed server to server links ............  18
            5.3.1.2  Anti abuse protections .......................  18
         5.3.2  State information exchange when connecting ........  18
      5.4  Terminating server-client connections ..................  19
      5.5  Terminating server-server connections ..................  19
      5.6  Tracking nickname changes ..............................  19
      5.7  Tracking recently used nicknames .......................  20
      5.8  Flood control of clients ...............................  20
      5.9  Non-blocking lookups ...................................  21
         5.9.1  Hostname (DNS) lookups ............................  21
         5.9.2  Username (Ident) lookups ..........................  21
   6.  Current problems ...........................................  21
      6.1  Scalability ............................................  21
      6.2  Labels .................................................  22



Kalt                         Informational                      [Page 2]

RFC 2813          Internet Relay Chat: Server Protocol        April 2000


         6.2.1  Nicknames .........................................  22
         6.2.2  Channels ..........................................  22
         6.2.3  Servers ...........................................  22
      6.3  Algorithms .............................................  22
   7.  Security Considerations ....................................  23
      7.1  Authentication .........................................  23
      7.2  Integrity ..............................................  23
   8.  Current support and availability ...........................  24
   9.  Acknowledgements ...........................................  24
   10.  References ................................................  24
   11.  Author's Address ..........................................  25
   12. Full Copyright Statement ...................................  26

1. Introduction

   This document is intended for people working on implementing an IRC
   server but will also be useful to anyone implementing an IRC service.

   Servers provide the three basic services required for realtime
   conferencing defined by the "Internet Relay Chat: Architecture"
   [IRC-ARCH]: client locator (via the client protocol [IRC-CLIENT]),
   message relaying (via the server protocol defined in this document)
   and channel hosting and management (following specific rules [IRC-
   CHAN]).

2. Global database

   Although the IRC Protocol defines a fairly distributed model, each
   server maintains a "global state database" about the whole IRC
   network.  This database is, in theory, identical on all servers.

2.1 Servers

   Servers are uniquely identified by their name which has a maximum
   length of sixty three (63) characters.  See the protocol grammar
   rules (section 3.3.1) for what may and may not be used in a server
   name.

   Each server is typically known by all other servers, however it is
   possible to define a "hostmask" to group servers together according
   to their name.  Inside the hostmasked area, all the servers have a
   name which matches the hostmask, and any other server with a name
   matching the hostmask SHALL NOT be connected to the IRC network
   outside the hostmasked area.  Servers which are outside the area have
   no knowledge of the individual servers present inside the area,
   instead they are presented with a virtual server which has the
   hostmask for name.




Kalt                         Informational                      [Page 3]

RFC 2813          Internet Relay Chat: Server Protocol        April 2000


2.2 Clients

   For each client, all servers MUST have the following information: a
   netwide unique identifier (whose format depends on the type of
   client) and the server to which the client is connected.

2.2.1 Users

   Each user is distinguished from other users by a unique nickname
   having a maximum length of nine (9) characters.  See the protocol
   grammar rules (section 3.3.1) for what may and may not be used in a
   nickname.  In addition to the nickname, all servers MUST have the
   following information about all users: the name of the host that the
   user is running on, the username of the user on that host, and the
   server to which the client is connected.

2.2.2 Services

   Each service is distinguished from other services by a service name
   composed of a nickname and a server name.  The nickname has a maximum
   length of nine (9) characters.  See the protocol grammar rules
   (section 3.3.1) for what may and may not be used in a nickname.  The
   server name used to compose the service name is the name of the
   server to which the service is connected.  In addition to this
   service name all servers MUST know the service type.

   Services differ from users by the format of their identifier, but
   more importantly services and users don't have the same type of
   access to the server: services can request part or all of the global
   state information that a server maintains, but have a more restricted
   set of commands available to them (See "IRC Client Protocol" [IRC-
   CLIENT] for details on which) and are not allowed to join channels.
   Finally services are not usually subject to the "Flood control"
   mechanism described in section 5.8.

2.3 Channels

   Alike services, channels have a scope [IRC-CHAN] and are not
   necessarily known to all servers.  When a channel existence is known
   to a server, the server MUST keep track of the channel members, as
   well as the channel modes.










Kalt                         Informational                      [Page 4]

RFC 2813          Internet Relay Chat: Server Protocol        April 2000


3. The IRC Server Specification

3.1 Overview

   The protocol as described herein is for use with server to server
   connections.  For client to server connections, see the IRC Client
   Protocol specification.

   There are, however, more restrictions on client connections (which
   are considered to be untrustworthy) than on server connections.

3.2 Character codes

   No specific character set is specified. The protocol is based on a a
   set of codes which are composed of eight (8) bits, making up an
   octet.  Each message may be composed of any number of these octets;
   however, some octet values are used for control codes which act as
   message delimiters.

   Regardless of being an 8-bit protocol, the delimiters and keywords
   are such that protocol is mostly usable from US-ASCII terminal and a
   telnet connection.

   Because of IRC's Scandinavian origin, the characters {}|^ are
   considered to be the lower case equivalents of the characters []\~,
   respectively. This is a critical issue when determining the
   equivalence of two nicknames, or channel names.

3.3 Messages

   Servers and clients send each other messages which may or may not
   generate a reply.  Most communication between servers do not generate
   any reply, as servers mostly perform routing tasks for the clients.

   Each IRC message may consist of up to three main parts: the prefix
   (OPTIONAL), the command, and the command parameters (maximum of
   fifteen (15)).  The prefix, command, and all parameters are separated
   by one ASCII space character (0x20) each.

   The presence of a prefix is indicated with a single leading ASCII
   colon character (':', 0x3b), which MUST be the first character of the
   message itself.  There MUST be NO gap (whitespace) between the colon
   and the prefix.  The prefix is used by servers to indicate the true
   origin of the message.  If the prefix is missing from the message, it
   is assumed to have originated from the connection from which it was
   received.  Clients SHOULD not use a prefix when sending a message
   from themselves; if they use one, the only valid prefix is the
   registered nickname associated with the client.



Kalt                         Informational                      [Page 5]

RFC 2813          Internet Relay Chat: Server Protocol        April 2000


   When a server receives a message, it MUST identify its source using
   the (eventually assumed) prefix.  If the prefix cannot be found in
   the server's internal database, it MUST be discarded, and if the
   prefix indicates the message comes from an (unknown) server, the link
   from which the message was received MUST be dropped.  Dropping a link
   in such circumstances is a little excessive but necessary to maintain
   the integrity of the network and to prevent future problems.  Another
   common error condition is that the prefix found in the server's
   internal database identifies a different source (typically a source
   registered from a different link than from which the message
   arrived).  If the message was received from a server link and the
   prefix identifies a client, a KILL message MUST be issued for the
   client and sent to all servers.  In other cases, the link from which
   the message arrived SHOULD be dropped for clients, and MUST be
   dropped for servers.  In all cases, the message MUST be discarded.

   The command MUST either be a valid IRC command or a three (3) digit
   number represented in ASCII text.

   IRC messages are always lines of characters terminated with a CR-LF
   (Carriage Return - Line Feed) pair, and these messages SHALL NOT
   exceed 512 characters in length, counting all characters including
   the trailing CR-LF. Thus, there are 510 characters maximum allowed
   for the command and its parameters.  There is no provision for
   continuation message lines.  See section 5 for more details about
   current implementations.

3.3.1 Message format in Augmented BNF

   The protocol messages must be extracted from the contiguous stream of
   octets.  The current solution is to designate two characters, CR and
   LF, as message separators.  Empty messages are silently ignored,
   which permits use of the sequence CR-LF between messages without
   extra problems.

   The extracted message is parsed into the components <prefix>,
   <command> and list of parameters (<params>).

   The Augmented BNF representation for this is found in "IRC Client
   Protocol" [IRC-CLIENT].

   The extended prefix (["!" user "@" host ]) MUST NOT be used in server
   to server communications and is only intended for server to client
   messages in order to provide clients with more useful information
   about who a message is from without the need for additional queries.






Kalt                         Informational                      [Page 6]

RFC 2813          Internet Relay Chat: Server Protocol        April 2000


3.4 Numeric replies

   Most of the messages sent to the server generate a reply of some
   sort.  The most common reply is the numeric reply, used for both
   errors and normal replies.  The numeric reply MUST be sent as one
   message consisting of the sender prefix, the three digit numeric, and
   the target of the reply.  A numeric reply is not allowed to originate
   from a client; any such messages received by a server are silently
   dropped. In all other respects, a numeric reply is just like a normal
   message, except that the keyword is made up of 3 numeric digits
   rather than a string of letters.  A list of different replies is
   supplied in "IRC Client Protocol" [IRC-CLIENT].

4. Message Details

   All the messages recognized by the IRC server and client are
   described in the IRC Client Protocol specification.

   Where the reply ERR_NOSUCHSERVER is returned, it means that the
   target of the message could not be found.  The server MUST NOT send
   any other replies after this error for that command.

   The server to which a client is connected is required to parse the

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?