基於 Telnet 的文本 MUD 遊戲中的協定和通信

  • 文字 MUD 以 Telnet 為基礎,將可讀文字與 IAC 位元組標識的控制命令混合在一起,以協商選項和功能。
  • 與客戶端(包括行動用戶端)的兼容性取決於正確實現 DO/DONT/WILL/WONT、子協商 (SB/SE) 以及 GMCP 或 MSSP 等擴展。
  • 伺服器必須能夠處理文字格式(CRLF、適度的 ANSI、分頁),並容忍網路特殊性,例如網路中斷、中間代理和受限連接埠。
  • 遵循這些約定,就可以建立自己的 MUD 伺服器,而該伺服器可以與大多數現有的 Telnet 用戶端無縫協作。

行動裝置上的文字類別MUD遊戲和Telnet客戶端

如果你已經擺弄它一段時間了 行動裝置上的文字類別MUD遊戲和Telnet客戶端你可能也遇到過同樣的問題:大家都在談論 Telnet 的歷史、懷舊情懷和各種軼事……但幾乎沒有人清楚地解釋客戶端和伺服器究竟是如何通訊的。本文旨在填補這一空白:深入探討 Telnet 協定、訊息、控制序列,以及如何讓你的 MUD 伺服器與現有客戶端無縫協作。

讓我們回顧一下 對典型的基於 Telnet 的 MUD 協定的工作原理進行全面而實用的解釋本文解釋了業界使用的擴充功能(GMCP、MSSP、壓縮等)、訊息格式、行動用戶端期望看到的內容,以及伺服器需要發送哪些資訊才能確保一切順利運行,而無需從頭開始建立協定。所有內容均以標準西班牙語(西班牙)解釋,並配有清晰的範例,避免使用不必要的術語。

1. 以 Telnet 為基礎:大多數 MUD 遊戲實際使用的協議

大多數經典的MUD遊戲並沒有發明新的交通方式:它們依賴… Telnet 作為客戶端與伺服器之間的通訊層這意味著,最終發送的是透過 TCP 發送的位元組流,其中普通文字與以位元組 255 (0xFF) 開頭的特殊 Telnet 命令混合在一起。

從網路角度來看,MUD伺服器的行為就像… 具有許多可選擴展功能的基本 Telnet 伺服器客戶端(無論是行動裝置、桌面裝置或透過系統進行的簡單 Telnet 連接)與 MUD 連接埠(通常是 23、4000、5000 等)建立 TCP 連接,然後選擇權交易的簡單流程就開始了。

在最初的談判中,雙方互相派遣代表。 Telnet 控制序列 「WILL」、「WONT」、「DO」和「DONT」類型的指令用於啟動或停用諸如迴聲、視窗大小、GMCP等附加協定、壓縮等功能。所有這些都與遊戲文字混合在一起,但客戶端可以區分它們,因為控制命令用熟悉的0xFF標記。

使用 Tasker 實現區域網路喚醒
相關文章:
透過 Android 裝置遠端喚醒:使用 Tasker 啟動您的電腦

2. MUD 使用的 Telnet 協定框架

在 Telnet 中,任何控制命令都以位元組開頭。 IAC(解釋為命令,值 255)接下來是一個或多個字節,用於指示命令類型,在許多情況下,還會有一個選項代碼。在標準的 MUD 協定層,您主要會遇到:

  • IAC DO“我希望您(客戶)啟用此選項。”
  • IAC 不“我不希望你選擇這個方案。”
  • IAC 會“我(伺服器)可以而且想要使用這個選項。”
  • IAC不會“我不會選擇這個方案。”

這些選項以數位標識;有些是較早的 Telnet 標準,有些是 MUD 社群中約定的擴展(例如)。 GMCP、MSSP、COMPRESS2這些協定並未出現在經典的 Telnet RFC 中,但由於主要客戶端支援它們,因此已成為事實上的「偽標準」。

在MUD遊戲中,你通常會透過發送訊息來發起對話。 IAC DO / IAC WILL 序列 為了測試用戶端支援的功能,例如是否接受 GMCP、是否需要壓縮、是否提供終端資訊等等,用戶端會根據情況傳回 WILL/WONT 或 DO/DONT。伺服器必須尊重這些回應,如果客戶端不支援,則不得使用相應的選項。

3. 遊戲文字與 Telnet 控制的分離

一個典型的問題是如何區分… 控制命令的正常遊戲文本規則很簡單:任何不以 0xFF 開頭的字元都被視為文字。 Telnet 指令總是以這個特殊位元組開頭,正是為了避免混淆。

概念範例(無需逐字複製,僅用於視覺化):伺服器可以發送 描述環境的幾行文字,後面跟著 IAC 序列 進行期權交易。客戶端逐字節讀取:當遇到 0xFF 時,它進入“命令模式”;其餘時間,它將其視為文本,並在適當情況下應用 ANSI 顏色並顯示出來。

如果在任何時候你需要發送位元組 0xFF 作為文字的一部分(這種情況非常罕見,但並非不可能),你必須 透過複製來“逃避它”換句話說,要在用戶空間資料流中發送字面意義上的 0xFF,需要連續發送兩個 0xFF,客戶端會正確地將它們解釋為「單個 0xFF 文本,而不是命令」。

4. 簡訊格式:行、換行符和顏色

你的MUD發送的大部分內容是 可讀文字訊息:描述、對話、物品清單和命令雖然這看起來很微不足道,但還是值得注意一些細節,以便 Telnet 用戶端(尤其是在行動裝置上)能夠正確顯示它。

總的來說,MUD遊戲繼續沿用經典的風格。 以 CRLF (\r\n) 結尾的行有些用戶端只支援 LF (\n),但為了獲得最佳相容性,請始終發送回車符後跟換行符。

對於顏色和格式,MUD 通常使用 ANSI 轉義碼 嵌入在文字中的字元。例如,以 ESC (0x1B) 開頭,並以“[31m”表示紅色文本,“[1m”表示粗體文本,等等的序列。這些字元本身並非 Telnet 協定的一部分,但大多數終端機和高級 MUD 用戶端(包括許多行動用戶端)都能識別它們。

5. 透過 Telnet 擴展的 MUD:GMCP、MSSP 和公司

除了純文字之外,如今許多MUD遊戲也將Telnet與 用於與客戶交換結構化資料的額外協議這使得行動用戶端能夠顯示比簡單文字流更豐富的介面。

最常見的擴展名包括:

  • GMCP(通用MUD通訊協定):以 JSON 格式(雖然不總是 100% 標準)發送有關角色、地圖、頻道等的資訊。
  • MSSP(Mud 伺服器狀態協定)旨在向清單服務和感興趣的客戶提供伺服器資料(MUD 名稱、玩家數量、性別等)。
  • 壓縮 / 壓縮2資料壓縮可以減少頻寬佔用,在連線速度較慢的情況下尤其重要。

這些擴充功能的協商方式與其他 Telnet 選項相同:伺服器通常會傳送 IAC 將會 GMCP 或 IAC 將會執行 GMCP 然後等待響應。一旦達成一致,擴充本身會定義如何封裝資料(例如,GMCP 位於 Telnet 子協商中:IAC SB)。 … IAC SE)。

6. 分包談判(SB 和 SE):封裝特殊數據

當 Telnet 選項需要發送的資料不僅僅是簡單的「是/否」時,將使用以下方法: 次級談判規律是:

  • IAC SB IAC SE

在該區塊內,您可以發送 擴展名定義的字串、數字或特定結構。例如,GMCP 通常發送的內容看起來很像 JSON 對象,包含引號、花括號和值。

當客戶端收到 IAC SB GMCP 時,它就知道 IAC SE 之前的所有內容都是 GMCP 封包的一部分,而不是普通的遊戲文字流。因此,它可以 將發送到圖形使用者介面的內容與發送到傳統文字「緩衝區」的內容明確區分開來。.

7. MUD 伺服器發送的內容:典型的通訊流程

想像一下玩家從…連結開始的序列 手機 Telnet 用戶端連接到您的 MUD 伺服器:

  1. 客戶端開啟與 MUD 連接埠的 TCP 連線。
  2. 伺服器會向您發送歡迎橫幅(文字)以及一些其他內容。 用於交易選擇權的 IAC 序列 (迴聲、GMCP、壓縮…)
  3. 客戶透過接受或拒絕這些選項來回應,表示「願意/不願意」和「可以/不可以」。
  4. 伺服器隨後發送登入介面(文字),並處理玩家輸入的命令。

伺服器必須始終能夠 讀取客戶端輸入,輸入內容為文字和 Telnet 命令的混合體。就像客戶端處理你的輸出一樣。例如,當玩家輸入「north」並按下回車鍵時,客戶端通常會發送這個字串,後面跟著一個回車符和一個換行符。你的伺服器會讀取到行尾,並將其解釋為來自玩家的命令。

如果客戶決定啟動任何選項(例如,觸發視窗大小協商),您也必須做好接收的準備。 來自客戶端的 IAC 序列 而且要給出正確的答案,而不僅僅是答案。

行動裝置上的文字類別MUD遊戲和Telnet客戶端

8. Telnet 用戶端(包括行動用戶端)所發送的內容

從伺服器的角度來看,標準的 Telnet 用戶端(行動端或桌面端)基本上會向您發送兩種類型的內容: 使用者文字和 Telnet 命令文字通常為 ASCII 或 UTF-8 編碼,取決於客戶端;如今建議至少假定為 UTF-8 編碼。

您將收到的 Telnet 命令主要是: 對您談判請求的回應如果你發送 IAC DO GMCP,客戶端會根據其是否支援 GMCP 協定來回應 IAC WILL GMCP,如果不支援則回應 IAC WONT GMCP。客戶端也可以自行發起一些協商(例如,關於終端類型的協商)。

對於行動相容性而言,一個重要的細節是許多現代客戶端 它們根據配置逐個字元或逐行解釋傳輸內容。最常見的方法是逐行解析,因此在建立命令輸入解析器時,請考慮用 \r\ 而不是 \n 分隔的完整行,而不是單一字元。

9. 在受限網路中使用代理程式和MUD網路時遇到的問題

在某些環境(例如,企業網路、園區或某些行動營運商)中,典型的MUD高連接埠可能是 防火牆阻止在這些情況下,玩家會發現他們無法直接連接到 MUD 端口,即使 Telnet 本身在標準端口上是允許的。

經典的解決方案是使用 監聽允許連接埠的中間代理 (例如 Telnet 連接埠 23 或 FTP 連接埠 21)並將連線轉送至 MUD 的實際連接埠。代理伺服器充當橋樑:客戶端連接到代理伺服器,代理伺服器再開啟與遊戲伺服器的連線。

擁有永久網路連線的同事也常常會遇到這種情況。 在您的電腦上安裝代理程式。 並離開其他玩家 透過您的 IP 位址進入 MUD 遊戲但是,共享IP位址需要格外小心:如果多個帳號使用同一個IP位址連接,某些MUD遊戲可能會將其視為非法多人遊戲並進行處罰。理想情況下,如果您打算長期共享IP位址,您應該通知遊戲管理員。

10. 代理在MUD的限制和風險

雖然代理伺服器在非常封閉的網路中可以保護你,但如今 可靠的公共匿名代理並不多見。 而剩下的少數幾個網站通常都過載、當機或因安全性原因而被停用。

此外,那些阻塞高埠的網路也可能 埠 8080 已被阻塞這在HTTP代理中非常常見。因此,如果有人設定了私有代理來存取MUD,建議將其放在幾乎不會被過濾的連接埠上(例如23、21或相關網路上其他非常常見且允許的連接埠)。

使用手機作為FTP伺服器進行快速傳輸
相關文章:
使用手機作為FTP伺服器進行快速傳輸

別忘了這些設定會帶來安全隱憂:流量會經過中間機器,會話、密碼等資訊可能會被記錄。從MUD伺服器設計的角度來看,協定本身沒有改變,但你需要… 假設許多連接都是透過代理「包裝」進來的。可能會出現額外的延遲或更頻繁的斷線。

11. 文本MUD中的敘事互動範例

除了技術層面之外,基於文字的MUD遊戲還基於… 豐富的描寫與氛圍許多遊戲都包含標誌性的文字片段、文學引語或近乎詩意的片段,伺服器會將這些內容原封不動地發送給客戶端,以增強玩家的沉浸感。

例如,螢幕上可能會出現某種[不清楚] “對抗恐懼的禱文” 當角色面臨關鍵時刻時,就會出現這段文字。從技術層面來說,它只是一系列帶有適當換行符的文本,如果你願意,還可以添加一些顏色或格式。但就使用者體驗而言,它卻有著顯著的影響。

即使這種類型的文字不會改變 Telnet 協議,它也會限制你想要的方式。 管理行間距、分頁和刷新如果一次顯示多段長文字,在小螢幕(例如手機)上會變得難以閱讀。因此,許多伺服器都實作了「分頁」系統,在顯示一定行數後停止輸出,等待使用者按鍵繼續。

12. 外部資源和補充技術文檔

與其他高度標準化的協議不同,MUD生態系統的發展動力源於… 零散的文件、學術PDF和零散的文章 其中描述了 MUD 環境中的變體、擴展提案和互動研究。

大學資源庫和數位圖書館中有一些分析相關的作品。 MUD 的客戶端伺服器架構,從裸 Telnet 到豐富協定的演變……甚至包括文字介面中的使用者體驗問題。雖然這些文件大多沒有逐行講解如何格式化訊息,但它們確實提供了有用的背景信息,有助於理解為什麼採用某些協議以及如何組合使用這些協議。

為配合實施,建議也應進行審查 熱門MUD客戶端的文檔 (包括桌面和行動裝置),它們通常會詳細說明它們支援的副檔名(GMCP、MXP、MSDP 等)、它們處理的字元集、它們如何處理 ANSI 顏色以及它們在小螢幕上的限制。

13. 海量域名和主機名稱:基礎設施的顯而易見的混亂

如果你曾經查看過大型主機提供者的 DNS 記錄,你會看到類似這樣的大量名稱清單。 www、mail、ftp、webmail、smtp、pop3、imap、panel、cpanel、admin、dev、test 以及其他各種變體雖然這看起來像是噪音,但這反映了託管許多 MUD 和相關服務的基礎設施的實際組織方式。

一個域名可以連結到數百個子域名: 資料庫伺服器、測試機、代理伺服器、負載平衡器、統計服務、電子郵件平台、儲存、VPN……而且通常情況下,這正是MUD遊戲監聽的移植版。有些情況下,遊戲位於一個獨立的子網域上;而有些情況下,它則與論壇、維基和管理面板等一系列服務共用同一個IP位址。

如果你正在考慮以下問題,那麼名稱的激增就顯得尤為重要: 將你的MUD遊戲發佈到共享伺服器上 或在為玩家設定特定代理程式時:您必須仔細協調哪些子網域指向哪台機器,開啟哪些連接埠以及如何管理安全性,以便 Telnet 流量不會與其他關鍵服務危險地混合。

14. 行動裝置上 Telnet 使用者的實際注意事項

與…一起玩耍或發展 行動裝置上的 Telnet 用戶端 它增加了一層複雜性:小螢幕、觸控鍵盤、可能頻繁的網路斷開連接,有時客戶本身在擴展支援方面也有限制。

在設計MUD伺服器時,請記住以下幾點:

  • 避免排隊段落要短小精悍,這樣使用者就不必左右滾動頁面了。
  • 適度使用ANSI規範 也要確保它們不會破壞那些不太會解讀這些佈局的客戶的操作體驗。
  • 謹慎處理分頁問題。 這樣一來,閱讀體驗就不會變成難以理解的文字牆。
  • 實施軟重連在行動裝置上,訊號遺失和重新連線很容易發生;你的伺服器應該能夠容忍這種情況,而不應該在第一次短暫中斷時就中斷玩家的會話。

一些專門用於MUD遊戲的行動用戶端已經包含了對GMCP和其他擴充功能的支持,因此如果您在伺服器上實現它們,您就可以… 提供結構化訊息,客戶可以將其顯示為儀表板、健康條形圖和快速地圖。 以及經典文字上方的其他視覺輔助材料。

15. 建立您自己的與現有客戶端相容的MUD伺服器

如果你決定從零開始編寫自己的MUD伺服器,避免孤立感的關鍵在於… 尊重 Telnet 作為基礎層,並正確協商你的選項。你不需要重新發明協議,而應該遵循已經證明有效的慣例。

簡而言之,為了與大多數常見客戶相容,您應該:

  • 實施 Telnet 指令解析 (IAC、DO、DONT、WILL、WONT、SB、SE)。
  • 支援至少一些常用選項: 迴聲、局部迴聲抑制、GMCP 如果您需要更豐富的數據,或許還需要壓縮數據。
  • 發送 以使用者友善格式呈現的文本CRLF,ANSI 可選,避免使用過長的行。
  • 接受線上模式的輸入,並正確處理行動用戶端發送的換行符。

在此基礎上,您可以擴展伺服器,添加其他協議,甚至開發自己的客戶端,但從這個基礎開始,您可以… 使用現有的 Telnet 用戶端測試您的遊戲 並充分利用多年來圍繞 MUD 創建的整個生態系統。

什麼是中間人瀏覽器以及它的攻擊方式是怎麼樣的?
相關文章:
什麼是中間人瀏覽器攻擊以及如何保護自己?

Telnet、擴充、代理、主機名稱和行動用戶端的各種特性乍看之下可能令人困惑,但如果一步一步地分析,你會發現其核心其實很簡單:一個包含幾個定義明確的控制序列的文字流。透過理解這些訊息是如何產生的、選項是如何協商的,以及典型的客戶期望看到什麼,你就能牢牢掌握這個系統。 建立一個強大、相容且令人愉悅的 MUD 伺服器所需的必要工具,該伺服器可透過任何 Telnet 用戶端訪問,無論是在行動裝置還是桌上型電腦上。.


新增為首選來源