⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rfc2813.txt

📁 很多RFC的中文文档
💻 TXT
📖 第 1 页 / 共 3 页
字号:
〈信息〉参数可以包含空格符。

〈希望数值〉是用来告知服务器其他服务器在那里,距离多远。当地的服务器会被
赋为0,每经过一个,值就增加。用一个完整的服务器列表,你可以建立一个完整的服务器
树型网络图,当然,如果有HOSTMASK建立的话,这就行不通了。

〈标志〉参数是服务器用来做标志的无符号数。这个标志符后来被用来表示一个服
务器,在传递服务器之间的用户名和服务信息时。服务器的标志符只有在点对点的服务器之
间连接时才有效,并且对于那个连接是独特的。并不是全球通用的。

服务器信息只有在连接注册时才被允许,或者是连接到其他服务器,在那种情况下,
服务器信息是介绍一个新服务器。

大多数错误都是在服务器信息返回时发生的,原因就是终端服务器中断了连接(目
标服务器)。由于这种事件的严重性,错误回复通常是返回“错误”命令,而不是数字回复。

如果服务器信息被分析,并且它试图向一个已经了解了的服务器介绍服务器时,那
么这个连接,从消息收到的那方,就一定要被关闭(按照正规的顺序)。因为一条通往那个
服务器的路线已经形成,并且会破坏已经形成的irc树型网络。在一些情况下,也可以由发
送消息的那一方停止信息。必须声明的是:这种错误也可能由于服务器的第二次启动产生,
协议中产生了这种问题是不可能修复的,通常需要人类的参与。这种错误是非常阴险的,因
为只要irc服务器中一个被孤立,就会产生这种错误。如果两个服务器中的一个被孤立,那
么连接就不能连接。

数字回复:

错误——已注册

举例
SERVER test.oulu.fi 1 1 :Experimental server ; New server
test.oulu.fi就是在介绍服务器本身,并且试图注册。
:tolsun.oulu.fi SERVER csd.bu.edu 5 34 :BU Central Server ; Server
                       tolsun.oulu.fi是到5步远的csd.bu.edu连接。当连接到csd.bu.edu
时,参数34将被tolsun.oulu.fi调用,来介绍新的用户或服务。

4.1.3呢称
      命令:呢称
      参数:<呢称><希望值><用户名><主机><服务器token><模式><真实姓名>

这种形式的呢称一定不会被使用者接收。但是,它可以作为呢称/使用者的替代,来
向其他服务器介绍新的使用者,刚刚加入irc中的。

这个信息是由三条不同的信息组合成的:呢称,用户,模式[irc——客户]。

希望值这个参数是服务器用来描述使用者距离服务器主机距离的。本地的连接希望值
是0。每次通过一个服务器,希望值就增加。

服务器代码这个参数替代了原来的用户中的参数服务器名。(查看4。1。2可以找到
更多资料)

  例子:
  NICK syrk 5 kalt millennium.stealth.net 34 +i :Christophe Kalt
                                        新的使用者有这个呢称“syrk”,用户名“kalt”,
从主机millennium.stealth.net连接到服务器       
34 ("csd.bu.edu" 根据前一个例子).

:krys NICK syrk                    :呢称信息的另外一种形式,就象irc客户端协
议中定义的一样。在服务器之间使用:用户
krys把他的名字改为syrk。

4.1.4服务信息
 
命令:服务
参数:<服务名称><服务代码><分类><类型><希望值>〈信息〉

服务命令是用来介绍一条新服务。这种形式的服务信息不可以被客户端接受(不管有没有注
册)。但是,它一定要使用于服务器通告于其他服务器,有新信息假如irc网络服务。

服务代码是用来鉴别服务连接到的服务器。(详情请看4。1。2关于服务器代码)

希望值参数是被服务器用来测量,服务与服务器之间距离的。当地连接的希望值是0。每经
过一个服务器,希望值就加一。

分类参数被用来指定服务的明显度。服务只被有着与分类参数相符的服务器了解。因为与之
相匹配的服务器了解了这条服务,在服务器与提供服务的服务器之间的路径,一定要可以分
解成服务器名。没有任何限制时,就使用符号‘*’。

类型参数现在保存下来是为了将来使用。

数字回复:ERR_ALREADYREGISTRED            ERR_NEEDMOREPARAMS
           ERR_ERRONEUSNICKNAME
           RPL_YOURESERVICE                RPL_YOURHOST
           RPL_MYINFO
例子:
服务 dir@irc.fr 9*.fr 0 1:法文r在服务器9中注册,在通知其他服务器。这条服务只有服务
器的名字里有fr时才有效。

4.1.5退出
命令:退出
参数:

客户端的会议通常是以一个退出命令作为结束的。如果客户端发送出退出信息,那么服务器
一定要终止跟客户端的连接。如果退出信息发送出,这个就会被发送出,用来取代默认的信
息,通常是用户名或者服务名。

当网络中断(详情请看4。1。6)发生时,退出信息是由相关的两个服务器的名字组成的,
中间用一个空格分开。第一个名字,是还在连接的那个服务器的名字,第二个是已经断开的
服务器名字,或者是那个客户端连接到的服务器。
<Quit Message> =  ":" servername SPACE servername

由于"quit message"对“netsplits”来说有一个特殊意义,服务器不允许客户端使用“quit 
message”,用上面的形式。

如果,由于某些原因,在还没有任何“quit message”客户端连接被终止了(客户端停止,
或者是发生断线),服务器需要用一些信息来填补退出信息,这些信息导致了中断的发生。
比较常见的,通常报告系统特殊错误。

数字回复:
         无。

例子::WiZ QUIT :Gone to have lunch   ; Preferred message format

4.1.6服务器退出信息

命令:SQUIT
参数:<服务器><注释>
它有两种用法::

第一(详情请看Internet Relay Chat: Client Protocol)允许操作员断开当地的或者远程的连接。
这种形式的信息也是服务器用来断开连接的最后手段。

第二种用法被用来通知其他服务器,当网络中断发生时。换句话,就是告诉其他服务器有那
些服务器坏了。如果一个服务器想终止与其他服务器的连接,它就必须向其他服务器发送
SQUIT信息,用其他服务器名做参数,就是它想关闭连接的哪个。

注释通常用来存放那些可以放错误或者是相似信息的服务器。

被断开的两端的服务器都需要发出一个SQUIT信息(给所有与它们连接的服务器),给那些
连接背后的服务器。

同样的,QUIT信息可能被发送给其他还连接的服务器,为了所有连接的客户端。作为补充,
这条已经损失了一个成员的信道上的所有成员,都必须发送一个退出信息。信息是由这些成
员的服务器发出的。

如果一个服务器的连接断开了(另外一端的服务器死机了),那么监测到这个断开的服务器
就需要通知其他网络,连接已断开并且用恰当的文字填充注释。

当客户端由于SQUIT被中断,服务器就要把这个客户端的呢称加入已断开的名单,防止发
生呢称冲突。详情看5。7(跟踪最近使用的呢称)。

数字回复:
ERR_NOPRIVILEGES                ERR_NOSUCHSERVER
           ERR_NEEDMOREPARAMS
例子:SQUIT tolsun.oulu.fi :Bad Link ?  ;服务器tolsun。Oulu。fi由于错误连接被中断。
:Trillian SQUIT cm22.eng.umd.edu:Server out of control ;从trillian发送出的信息由于
服务器失去控制而被中断。

4.2信道操作:

这组信息和操作信道有关,他们的道具(信道模式),并且他们的内容(典型用户)。在这些
道具中,大量的关于信道状态是不可避免的,尤其是当使用者对反对断开作出连接的时候。
同时,它需要服务器保留一个呢称记录,来确定呢称在那里使用过,只要资料一更改,服务
器就会检测历史记录。

4.2.1加入信息
命令:JOIN
参数:<channel>[ %x7 <modes> ]
*( "," <channel>[ %x7 <modes> ] )
JOIN命令是客户端用来加入一个特殊信道时使用的。客户端是否被允许加入,就只由当地
的服务器鉴定产生结果:其他服务器只是单纯的填加这个用户,当它们收到这条信息时。

通常,用户在信道上的状态(信道模式0,o,v)可以加在信道名后面,用g分隔开。如果
这种信息不是被服务器接收到,那么这种数据通常是被忽略的。这种格式也不可以发送给客
户端,它只能用在服务器之间传输,并且应该被消除。

JOIN命令一定要通知所有服务器,因此服务器才知道如何找到信道上的用户。它允许理想
的PRIVMSG和NOTICE信息在信道上传输。

数字回复: ERR_NEEDMOREPARAMS              ERR_BANNEDFROMCHAN
           ERR_INVITEONLYCHAN               ERR_BADCHANNELKEY
           ERR_CHANNELISFULL                 ERR_BADCHANMASK
           ERR_NOSUCHCHANNEL                ERR_TOOMANYCHANNELS
           ERR_TOOMANYTARGETS               ERR_UNAVAILRESOURCE
           RPL_TOPIC
例子:
   :WiZ JOIN #Twilight_zone        WIZ的JOIN 信息

4.2.2N加入信息
命令:NJOIN
参数:<channel <nickname>
                         *( "," [ "@@" / "@" ] [ "+" ] <nickname> )

NJOIN命令只用在服务器之间。如果接受到这种信息是从客户端发送的,信息就会被忽略。
它主要用于服务器之间交换用户及信道信息。

尽管如此,同样的函数用JOIN也可以完成,但这条信息可以用来取代JOIN,并且比它更
有效。前缀“@@”表明用户是信道的创造者,符号“@”表明了信道的操作者,符号“+”
表明用户有权发声。

数字回复:ERR_NEEDMOREPARAMS              ERR_NOSUCHCHANNEL
           ERR_ALREADYREGISTRED
例子::ircd.stealth.net NJOIN #Twilight_zone :@WiZ,+syrk,avalon
从ircd.stealth.net发送来的NJION信息说明用户正在加入#Twilight_zone channel: WiZ并且表
明了信道操作者的状态,syrk有发声权利,而avalon没有。

4.3模式信息
MODEL信息是irc中双重意义的命令。它允许用户名和信道的模式改变。

当解析MODEL信息时,建议先解析完整的信息,然后在进行改变。

这里需要服务器来改变信道模式,所以“channel creator”和“channel operator”都可以建立。

5.执行细节

在写入时,这个协议当前执行的就是irc服务器,version 2。1。0。早期的版本也可以执行
这篇文档中介绍的这些命令,但要注意数字回复的位置都改变了。不幸的是:预计向后兼容,
但是这篇文章中的某些操作在老版本中会被认为是不规则的。一个很明显的不同:
*信息中出现的LF和CR都标志着这条信息的结束。(取代了原来的CRLF)

文章余下的部分对于那些想要运行服务器的人来说相当重要,但当中的某些部分对服务器一
样适用。

5.1连接失效

想要监测什么时候一个连接已经中断,服务器一定要检测它的每一个连接。命令PING(看
irc客户端协议)可以被使用,如果其他服务器没有在指定时间回复信息。

如果一个连接没有及时回复,那么这个连接就会被用适当的程序终止。

5.2接受客户端到服务器的连接

5.2.1用户

如果服务器成功的注册了一个用户的连接,那么它就需要发送一条关于用户的明确的状态信
息:用户特征,被用来注册的那个(RPL——WELCOME),服务器名字和版本号(RPL—
—HOST),服务器产生信息(RPL——CREATED),可以信赖的用户和信道模式(RPL——
MYINFO),并且可以发送任何被认为是合理的信息。

特别的,服务器应该发送当前的用户/服务/服务器的值(作为每一个LUSER的回复),最后
加上MOTD(如果有的话,作为MOTD的回复)。

注册完成后,服务器一定要向其他服务器发送刚刚注册好的用户名(NICK 信息),以及其
他信息(USER 信息)就象它自己的一样,并且象服务器发现的那样(从DNS服务器发出)。
服务器不可以发送这种信息,成对的USER和NICK信息(就象irc——CLIENT中定义的
那样),但是一定要用扩展的NICK来替代,就象4。1。3中定义的那样。

5.2.2服务

在成功的注册了一个服务器的连接之后,服务器对于用户来说,就象是必须的。服务则有些
须不同,只有下面的信息被发送:
RPL_YOURESERVICE, RPL_YOURHOST, RPL_MYINFO

处理完这个,服务器一定要向其他服务器发送信息(SERVICE 信息),主要是服务的名字
和其他提供的信息(SERVICE 信息),还有服务器可以发觉的(从DNS服务器)。

5.3终结一个服务器到服务器的连接

终结一个服务器到服务器的连接是有危险的,因为这中间可能发生错误的地方太多了,——
最起码也会有信道状态问题。

当服务器接收到一个连接跟随着一个PASS/SERVER,被认为是可以信赖的,服务器就会回
复它自己的PASS/SERVER的信息,作为对那条信息的回复,就象是下面描述的一样。

当开始的服务器接收到一个PASS/SERVER信息时,在确认那个服务器的连接是否可信之
前,要先检测那个服务器的回复是否合理。

5.3.1连接设置

服务器连接是以一个普通的协议为基础的(这篇文章中定义的),但是对于特殊的连接,就
会有特殊的设置,用PASS信息(请看4。1。2)。

5.3.1.1压缩的服务器到服务器的连接

如果服务器想中断与其他服务器之间的连接,它就必须设置Z符号在PASS信息的参数前。
如果两个服务器需要压缩,并且两个服务器都能够初始化压缩串,那么剩余的连接都可以被
压缩。如果其中一个服务器不能初始化,那就会发送一个不能初始化的错误信息给另外一个
服务器,并且切断连接。

用于压缩的数据形式在IRC——1950(ZLIP),IRC——1951(DEFLATE),IRC——1952
(GZIP)中描述的那样。

5.3.1.2反对滥用保护

大多数服务器执行各式各样的保护,来反对可能滥用的行为(典型用户)。在一些网络工作
中,这些保护是必不可少的,但在其他工作中,则是多余的。为了所有服务器都能够执行,

⌨️ 快捷键说明

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