因特网中继聊天-IRC
2024-05-17 10:46:50 阿炯

IRC(Internet Relay Chat,因特网中继聊天)是一种应用层的协议。其主要用于群体聊天,但同样也可以用于个人对个人的聊天。IRC使用的服务器端口有6667(明文传输,如irc://irc.libera.chat)、6697(SSL加密传输,如ircs://irc.libera.chat:6697)等。

由芬兰人亚尔科·奥伊卡里宁(Jarkko Oikarinen)于1988年8月创建,IRC最初用来取代一个叫做MUT的程序。

IRC是一种公开的协议,采用TCP和SSL协议。一个IRC服务器可以连接其他的IRC服务器以扩展为一个IRC网络。IRC用户透过客户端软件和服务器相连。大多数的IRC服务器不需要客户注册登录,虽然在连接前必须设定好昵称(nickname),但客户端一般都会为用户自动分配一个。对该服务的使用非常简单,只要在自己的PC上运行客户端软件,然后通过因特网以IRC协议连接到一台IRC服务器上即可。它的特点是速度非常之快,聊天时几乎没有延迟的现象,并且只占用很小的带宽资源。所有用户可以在一个被称为Channel(频道)的地方就某一话题进行交谈或密谈。每个IRC的使用者都有一个Nickname(昵称)。

IRC是一个分布式的客户端/服务器架构。连接到一个IRC服务器后可以访问这个服务器的频道以及它所连接的其他服务器上的频道。要使用IRC服务,必须先登录到一个IRC服务器上,最常见的为irc.freenode.net和irc.libra.chat。运行了IRC守护进程的服务器提供基础的IRC聊天服务,与IRC服务相连接就能提供诸如NickServ等服务,与其他服务器互联便可以组成IRC服务网络,这便是IRC中继。频道存在于一个IRC服务器上,一个频道类似于一个聊天室,频道名称必须以#符号开始,例如#irchelp。

IRC的最大特点是实现了在线实时交谈,速度快、功能多的优点使它比电子邮件或新闻组等联络沟通方式更具吸引力。可以设置单独的频道,在这个频道内,输出的文字可供所有人都看到。这样,来自世界不同角落的人能同时得到有关信息。而如果是两个人之间的单独交谈,甚至可以不用通过服务器,以保证谈话的保密性。随着网络带宽的增加和技术的发展,有一些IRC不仅可以传输文字信息,还能传输声音或图像信息,这样的功能就更强了。其作为其中一种交流形式,表现出来的即时交流、在线学习、良性互动和迅速反馈等优势为促进语言学习者学习目标语提供了许多便利。

应用场景:

社区交流:IRC广泛应用于各种开源社区、技术论坛等,提供了一个实时的交流平台。
团队协作:IRC可以用于团队内部的即时沟通和协作,方便成员之间的交流和讨论。
在线支持:一些网站和服务提供IRC频道,用于用户之间的互助和技术支持。

最简教程:

连接服务器:使用IRC客户端软件通过指定服务器地址和端口连接到IRC服务器。例如,使用命令/server irc.example.com 6667连接到名为irc.example.com的服务器。

注册昵称:在连接到服务器后,需要选择一个昵称(nickname)来标识自己。使用命令/nick nickname来设置昵称。如果昵称已被他人使用,你需要选择一个不同的昵称。

加入频道:IRC服务器上有许多频道,可以通过加入频道与其他用户进行交流。使用命令/join #channel来加入一个频道。例如,使用命令/join #chat加入名为#chat的频道。

发送消息:一旦加入了频道,可以发送消息给其他频道成员。使用命令/msg #channel message来发送消息。例如,使用命令/msg #chat Hello, everyone!向#chat频道发送消息。

私聊:除了在频道中交流,你还可以与其他用户进行私聊。使用命令/msg nickname message向特定用户发送私聊消息。例如,使用命令/msg John How are you?向昵称为John的用户发送私聊消息。

离开频道:如果你想离开一个频道,使用命令/part #channel。例如,使用命令/part #chat离开#chat频道。

断开连接:当你完成聊天后,使用命令/quit断开与IRC服务器的连接。

优势:

实时性:IRC提供了即时通讯的能力,用户可以实时地与其他用户进行交流。
分布式环境:IRC服务器是分布式的,允许用户连接到不同的服务器,并加入不同的频道。
开放性:IRC是一个开放的协议,任何人都可以搭建自己的IRC服务器,并创建自己的频道。


IRC 的工作原理是将用户的输入通过服务器转发给其他用户,实现多用户之间的实时交流;用户通过客户端软件连接到 IRC 服务器,然后加入不同的频道(channel),在频道中与其他用户进行交流。主要特点包括:
1. 多用户和多频道:IRC 支持多个用户同时在线,用户可以加入或创建频道,与其他用户进行交流。

2. 匿名性:IRC 用户可以选择匿名加入频道,这意味着用户可以在不透露自己身份的情况下与其他用户交流。

3. 实时性:IRC 提供了实时的文字交流功能,用户可以实时看到其他用户的输入和回复。

4. 文件传输:IRC 支持用户之间直接传输文件,用户可以在频道中分享文件。

5. 分布式架构:IRC 采用了分布式架构,用户可以通过不同的服务器进行连接和交流。

IRC 曾经是非常流行的网络通讯方式,但随着其他实时通讯工具(如即时通讯软件和社交媒体平台)的兴起,IRC 的使用率有所下降。尽管如此,IRC 仍然在一些特定的社区和技术群体中保持流行,尤其是在开源项目和技术讨论中。

其典型应用场景包括:
1. 团队通讯:在开发协作中,实时通信对于解决问题和分享进度非常重要。其提供了一个集中式的平台,让团队成员可以通过IRC渠道保持联系。

2. 社区互动:论坛、项目或兴趣小组等社区可以利用其搭建自己的聊天室,增强用户互动性。

3. 个人用途:对于喜欢IRC的个人用户,它是理想的客户端,适用于桌面、手机和平板设备,可以随时随地接入IRC网络。

4. 线上活动:网络研讨会、直播问答等活动可以利用它让参与者便捷地进行互动。


IRC服务(守护)进程

IRC守护进程是托管该服务所用的软件,使用最多的是UnrealIRCd。以下是几款常见的IRCd:
UnrealIRCd、InspIRCd、Hybrid、ngircd、IRCNet

客户端分为本地应用程序和网页端两种。

应用程序
mIRC 曾被认为是Windows操作系统下最受欢迎、应用最广的IRC客户端软件。
ChatZilla 是Mozilla浏览器下的IRC客户端程序,基于JavaScript和XUL语言编写的。
Opera 浏览器有内置的IRC客户端软件。
Pidgin 支持IRC网络。
XChat 跨平台IRC客户端软件。
HydraIRC 是GPL授权对应Windows系统的IRC客户端软件。
KVIrc 是一款基于Qt并注重图形体验的GPL授权IRC客户端软件。
Irssi 类UNIX系统下命令行界面的IRC客户端,常常与Screen一起搭配使用。
Colloquy 是Mac OS X下的免费IRC客户端,界面设计友好,还有Console可以监控背后针对每个频道执行所有IRC命令。
WeeChat 是一款类UNIX系统下的CLI界面的IRC客户端。
QuasselIRC 是一款多平台下IRC客户端。
HexChat 支持Windows、Linux、OSX平台,并且开放源代码。
LimeChat 由日本人开发多平台IRC客户端软件。
HoloIRC 是由tilal6991开发的安卓客户端,界面采用了质感设计。
Empathy Linux即时聊天程序。


网页端
Kiwi IRC
The Lounge 自托管的网页IRC客户端,支持多设备的同步使用。


CTCP(客户端至客户端协议)

是互联网中继聊天(IRC)客户端之间的一种特殊类型的通信,是现今使用的大多数IRC客户端支持的一种常见协议。CTCP扩展了原始的IRC协议,允许用户查询其他客户端或频道(使频道中所有客户端都回复CTCP特殊信息)。此外,CTCP可以用来编码信息,发送原始IRC协议的链路不允许发送的信息,例如包含换行或字节值为0(NULL)的信息。CTCP不在客户端之间建立直接连接,但它通常用于协商DCC连接。

CTCP允许用户查询远程客户端正在使用的客户端版本(通过CTCP VERSION)或时间(CTCP TIME)等信息。它还实现了/me命令(通过CTCP ACTION)。ircII是第一个实现了CTCP和DCC协议的IRC客户端。Michael Sandrof在1990年将CTCP协议在ircII 2.1版中实现,Troy Rollo在1991年将DCC协议在2.1.2版本中实现。

CTCP采用一条PRIVMSG与NOTICE消息实现,消息中的第一个和最后一个字符是ASCII值0x01。此外,IRC协议中不允许的字符将被转义。由于NOTICE按标准应产生一条回复,CTCP消息采用PRIVMSG发送,而回复采用NOTICE而非PRIVMSG实现。

CTCP查询在大多数客户端上按下列方式初始化:
CTCP <target> <command> <arguments>

其中<target>是目标的昵称或频道名称,<command> 是CTCP命令(例如VERSION),<arguments> 是发送给<target>的额外信息。

常用CTCP命令

请注意,下列CTCP命令和回复因客户端而不同,但大多数主要的IRC客户端支持它们。因您的IRC客户端不同,传入特定CTCP命令后,您可能会收到或不会收到自动的回复或响应,并且这些自动响应可能因客户端不同而有差异。

VERSION
请求将返回目标正在使用的IRC客户端的名称和版本,某些情况下还提供一些技术信息,诸如操作系统、时钟频率、CPU制造商和CPU架构/指令集。下面是将一个CTCP VERSION请求发送到运行有HexChat客户端(XChat的一个复刻)的回复:
VERSION HexChat 2.9.1 [x86] / Windows 8 [1.46GHz]

TIME
请求将返回目标计算机的本地时间。决于IRC客户端,回复可能是包含日期、时间(12小时格式或24小时格式),年(例如2019)以及某种时区(例如AEST)。下面是将一个CTCP TIME发送到使用ChatZilla客户端后的回复:
TIME Fri 23 Nov 2019 19:26:42 AEST

PING
请求将测量现有两个客户端之间的直接ping速率(不算服务器)。CTCP PING命令采用的方式是,发送一个整数参数(一个时间戳)到目标客户端,然后目标客户端提供完全相同的数字参数来响应。之后计算原始时间戳与当前时间戳的差异,将结果显示给发起CTCP PING的用户。在过程中通常使用毫秒级的时间戳,因为大多数用户使用的宽带互联网连接通常只有1秒以下的ping延迟。

一个CTCP PING请求的示例,从XChat客户端发送给目标<nickname>:
CTCP PING 23152511

在之后,根据所获样本差异产生的结果:
Ping reply from <nickname>: 0.53 second(s)

DCC(客户端至客户端)

IRC软件中的文件传输协议(Direct Client to Client)。


IRC机器人是一些运行在后台或者服务器上的程序,通过登录某一个频道,分析接受到的内容并做出相应的动作。最著名的是mobibot,其可以通过命令:mobibot: weather ZBAA,来查询天气预报。ChanServ提供IRC频道注册与登录服务的功能,也可以透过它获取频道管理者的权限。

IRC 用户在 IRC 网络上的活动无非是两类:执行命令和聊天。而在 IRC 上,聊天的实质也是通过命令将消息传递给其他的用户(users)或频道(channels)。因此 IRC 的各种命令是 IRC 用户最基本的操作手段,其所有功能均通过命令来实现。

注册用户名

IRC可以直接使用昵称加入频道,但是有重名用户登录时,你就会被挤出服务器,在服务器上注册一下自己的用户名可以防止被冒用,注意注册用户只对当前的服务器有效,换服务器的话需要重新注册。

/nick <name> #昵称不能有空格

/msg NickServ REGISTER <name> <passwd> <email> #注册用户名

使用邮箱里收到的命令激活账户,有效期一天,激活以后就可以使用密码认证身份了,也可以在客户端配置用户名及密码自动认证。
/msg NickServ identify <password>

开始聊天

找到自己需要的频道加入:
/join #test

私聊:
/msg <user_nick> ...

单开窗口私聊:
/query <user_nick> ...

但是一般IRC的用户不喜欢私聊,正确的方式是直接在群聊里ping他就可以,比如:
<user_nick> : hi

常用命令

与Unix下的Tab键功能,通用的补齐指令,/开头时补齐命令,文字开头时补齐用户名。

/help    #查看所有命令
/help <command>    #命令使用帮助
/connect <server>    #连接服务器
/join #<channel>    #加入频道
/part    #离开频道
/quit    #退出服务器
/nick <name>    #修改昵称
/whois <name>    #查看用户资料
/msg <name> ...    #私聊
/query <name>    #小窗口私聊
/away <reason>    #设置离开状态
/away    #取消离开
/clear    #清屏
/ignore <name>    #忽略某人的聊天内容
/list    #查看服务器所有频道列表,/help list查看可用参数


另外不得不提到的是Zephyr这个IM协议

Zephyr是一套由麻省理工学院设计的即时通讯协议,具有浓厚的Unix背景。协议由几个独立的应用程序协同工作从而构成一套完整的即时通讯系统。它与IRC是最早得到广泛使用的基于IP的即时通讯协议。如果已经在互联网上无法找到其更多信息了。

Zephyr allows users to send messages to other users or to groups of users. Users can view incoming Zephyr messages as windowgrams (transient X windows) or as text on a terminal. Zephyr can optionally make use of the Kerberos version 4 security library or the Hesiod service name resolution library.


在2020年后,Zephyr仍然可见于美国的一些大学院校。通过Zephyr关键在搜索引擎中查找时,更多的是一种加密货币,或物联网操作系统

如今,除了 Geeks 圈子,IRC 已经很难再大流行了,但它依然有快速、便捷、轻量等优点。现在的微信、QQ类社交软件变得越来越臃肿而成为一种累赘,人们是否会回归当年的初心,回归简约……


参考链接:
IRC官方网站

IRCv3 – IRC开发人员工作组,为IRC协议添加新功能并编写规范。