ZMODEM
ZMODEM是由Chuck Forsberg於1986年在由Telenet資助的項目中開發的文件傳輸協議 ,用於改進其X.25網絡上的文件傳輸。 除了與舊協議相比顯着提高的性能外,ZMODEM還提供可重新啟動的傳輸,發送器自動啟動,擴展的32位CRC以及支持8位乾淨傳輸的控制字符引用 ,支持無法傳輸控制字符的網絡。 20世紀90年代初,ZMODEM在公告板系統 (BBS)上變得非常流行,取代了早期的協議,如XMODEM和YMODEM 。
改進
編輯ZMODEM的關鍵改進是引入了滑動窗口支持以提高性能。 通常,文件傳輸協議將文件分解為一系列數據包 ,然後一次一個地發送到接收方。 每個數據包都帶有校驗和 ,可用於確定數據包是否被正確接收。 如果正確接收到分組,則發送ACK消息,然後發送方開始發送下一個分組。
但是,通信系統中存在延遲,干擾了這個過程。 即使接收方立即發送ACK ,通信系統中的延遲也意味着在發送方收到確認並發送下一個數據包之前總會有一段時間。 隨着調製解調器速度的增加,在延遲期間可發送的包數目越來越大,這降低了信道效率 。
滑動窗口協議通過允許發送機器在不等待ACK的情況下繼續處理下一個數據包來避免此問題。 接收方發送ACK (或者如果有錯誤則發送NAK )以及它正在確認的分組號。 發送方可以隨意處理這些內容,根據需要重新發送數據包。 這有效地消除了沒有錯誤發生時的確認延遲,只留下了數據傳輸和錯誤檢測的延遲。
ZMODEM的性能比以前的通用協議有了很大提高,它甚至可以替代YMODEM-g這樣的特殊協議,YMODEM-g根本不包含糾錯,而是依賴於調製解調器維護的無差錯鏈路。 儘管YMODEM-g明顯更快,但缺乏其他功能(如可重新啟動的傳輸)使其不那麼吸引人。
自動啟動管理通過允許發送方啟動傳輸來簡化這個過程。 以前,用戶必須首先向發送方請求文件,將其置於「等待」狀態,然後返回其本地程序並調用命令以開始傳輸。 通過自動傳輸,他們只需要請求文件,然後發件人就會自動觸發用戶程序中的傳輸過程。
重新啟動是另一個增強,允許在線路被中斷或用戶時間用完之後重新啟動傳輸。
變種
編輯出現了許多ZMODEM的修改版本。 ZedZap是ZMODEM的一種變體,帶有8 kbyte塊,可在高速調製解調器上獲得更好的性能。 LeechZmodem是一個惡作劇的ZMODEM變種(在類似的XMODEM和YMODEM衍生品中),它欺騙了BBS下載配額。 ADONTEC在2002年和2007年創建了具有32千字節和64千字塊長度的ZMODEM向後兼容擴展,以提高ISDN或TCP / IP網絡等高速無差錯連接的性能。
最值得注意的ZMODEM實現時來自 Chuck Forsberg 的 Omen Technology,Inc. 包括DSZ(DOS Send ZMODEM),GSZ(圖形化ZMODEM發送協議),以及無所不在(l)rzsz Unix變體。
在更新的時代, Synchronet的開發人員已經創建了一個名為SEXYZ的現代X/Y/ZMODEM實現,它基於zmtx / zmrx軟件包,該軟件包支持Windows和Unix變體,支持長文件名,更快,提供更可靠的數據傳輸。 SEXYZ的ZMODEM實現也已整合到SyncTERM項目中。 Synchronet,SEXYZ和SyncTERM都是開源,跨平台,以BBS為中心的項目。
Forsberg自己收集了許多ZMODEM-90的改進。 第一個是MobyTurbo,它刪除了控制字符轉義以進一步提高性能,約提高了15%。 即使在會「吃掉」控制字符的網絡上,ZMODEM-90也可以定製為僅轉義網絡實際吃的那些字符,而不是每個控制字符。 類似的改進允許ZMODEM-90在7bit網絡上工作,而早期的協議(除了Kermit之外 )都要求8bit到或更多。 最後,ZMODEM-90包括一個基本的遊程編碼壓縮系統,以進一步提高傳輸未壓縮文件的性能。
局限性
編輯- 一些ZMODEM數據包(例如 ZACK,ZRPOS)在傳輸的文件中嵌入一個字節的32位無符號整數,作為偏移量。 此設計限制了ZMODEM只能可靠地傳輸大小不超過4GB的文件。
- 即使協議允許它,引用(l)rzsz實現也不能編碼任何非控制字符(例如'〜'),這些字符經常被TCP / IP連接程序(如telnet和ssh)用作客戶端「終端轉義」字符。 用戶必須禁用終端轉義功能才能在這些類型的連結上實現可靠的傳輸,例如ssh -e none user@hostname。