客户端至客户端协议

历史

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

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

VERSION HexChat 2.9.1 [x86] / Windows 8 [1.46GHz]

TIME

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

TIME Fri 23 Nov 2019 19:26:42 AEST

PING

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

CTCP PING 23152511
在之后，根据所获样本差异产生的结果：

Ping reply from <nickname>: 0.53 second(s)