📄 rfc2813.txt
字号:
〈信息〉参数可以包含空格符。
〈希望数值〉是用来告知服务器其他服务器在那里,距离多远。当地的服务器会被
赋为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 + -