客戶端至客戶端協(xié)議(英語:Client-to-client protocol ,簡稱CTCP)是互聯(lián)網(wǎng)中繼聊天(IRC)客戶端之間的一種特殊類型的通信。
CTCP是現(xiàn)今使用的大多數(shù)IRC客戶端支持的一種常見協(xié)議。CTCP擴(kuò)展了原始的IRC協(xié)議,允許用戶查詢其他客戶端或頻道(使頻道中所有客戶端都回復(fù)CTCP特殊信息)。此外,CTCP可以用來編碼信息,發(fā)送原始IRC協(xié)議的鏈路不允許發(fā)送的信息,例如包含換行或字節(jié)值為0(NULL)的信息。CTCP不在客戶端之間創(chuàng)建直接連接,但它通常用于協(xié)商DCC連接。
CTCP允許用戶查詢遠(yuǎn)程客戶端正在使用的客戶端版本(通過CTCP VERSION)或時間(CTCP TIME)等信息。它還實現(xiàn)了/me命令(通過CTCP ACTION)。
歷史ircII是第一個實現(xiàn)了CTCP和DCC協(xié)議的IRC客戶端。Michael Sandrof在1990年將CTCP協(xié)議在ircII 2.1版中實現(xiàn),Troy Rollo在1991年將DCC協(xié)議在2.1.2版本中實現(xiàn)。1
結(jié)構(gòu)CTCP采用一條PRIVMSG與NOTICE消息實現(xiàn),消息中的第一個和最后一個字符是ASCII值0x01。此外,IRC協(xié)議中不允許的字符將被轉(zhuǎn)義。由于NOTICE按標(biāo)準(zhǔn)應(yīng)產(chǎn)生一條回復(fù),CTCP消息采用PRIVMSG發(fā)送,而回復(fù)采用NOTICE而非PRIVMSG實現(xiàn)。
CTCP查詢在大多數(shù)客戶端上按下列方式初始化:
CTCP
其中是目標(biāo)的昵稱或頻道名稱,是CTCP命令(例如VERSION),是發(fā)送給的額外信息。1
常用CTCP命令請注意,下列CTCP命令和回復(fù)因客戶端而不同,但大多數(shù)主要的IRC客戶端支持它們。因您的IRC客戶端不同,傳入特定CTCP命令后,您可能會收到或不會收到自動的回復(fù)或響應(yīng),并且這些自動響應(yīng)可能因客戶端不同而有差異。2
VERSIONCTCP VERSION請求將返回目標(biāo)正在使用的IRC客戶端的名稱和版本,某些情況下還提供一些技術(shù)信息,諸如操作系統(tǒng)、時鐘頻率、CPU制造商和CPU架構(gòu)/指令集。
下面是將一個CTCP VERSION請求發(fā)送到運行有HexChat客戶端(XChat的一個復(fù)刻)的回復(fù):
VERSION HexChat 2.9.1 [x86] / Windows 8 [1.46GHz]2
TIMECTCP TIME請求將返回目標(biāo)計算機(jī)的本地時間。決于IRC客戶端,回復(fù)可能是包含日期、時間(12小時格式或24小時格式),年(例如2019)以及某種時區(qū)(例如AEST)。
下面是將一個CTCP TIME發(fā)送到使用ChatZilla客戶端后的回復(fù):
TIME Fri 23 Nov 2019 19:26:42 AEST2
PINGCTCP PING請求將測量現(xiàn)有兩個客戶端之間的直接ping速率(不算服務(wù)器)。CTCP PING命令采用的方式是,發(fā)送一個整數(shù)參數(shù)(一個時間戳)到目標(biāo)客戶端,然后目標(biāo)客戶端提供完全相同的數(shù)字參數(shù)來響應(yīng)。之后計算原始時間戳與當(dāng)前時間戳的差異,將結(jié)果顯示給發(fā)起CTCP PING的用戶。在過程中通常使用毫秒級的時間戳,因為大多數(shù)用戶使用的寬帶互聯(lián)網(wǎng)連接通常只有1秒以下的ping延遲。
一個CTCP PING請求的示例,從XChat客戶端發(fā)送給目標(biāo):
CTCP PING 23152511
在之后,根據(jù)所獲樣本差異產(chǎn)生的結(jié)果:
Ping reply from : 0.53 second(s)2
本詞條內(nèi)容貢獻(xiàn)者為:
李嘉騫 - 博士 - 同濟(jì)大學(xué)