โมเด็ม Z
ZMODEMเป็นโปรโตคอลการถ่ายโอนไฟล์ แบบอินไลน์ ที่พัฒนาโดยChuck Forsbergในปี 1986 ในโครงการที่ได้รับทุนสนับสนุนจากTelenetเพื่อปรับปรุงการถ่ายโอนไฟล์บน เครือข่าย X.25 ของพวกเขา นอกเหนือจากประสิทธิภาพที่ได้รับการปรับปรุงอย่างมากเมื่อเทียบกับโปรโตคอลรุ่นเก่าแล้ว ZMODEM ยังมีคุณสมบัติการถ่ายโอนที่สามารถเริ่มต้นใหม่ได้ การเริ่มต้นอัตโนมัติโดยผู้ส่ง CRC 32 บิตที่ขยายใหญ่ขึ้นและการอ้างอิงอักขระควบคุมที่รองรับ การถ่ายโอน แบบสะอาด 8 บิตทำให้สามารถใช้งานได้บนเครือข่ายที่ไม่รองรับอักขระควบคุม
แตกต่างจากโปรโตคอลการถ่ายโอนข้อมูลส่วนใหญ่ที่พัฒนาขึ้นสำหรับระบบกระดานข่าว (BBS) ZMODEM ไม่ได้อิงตามหรือเข้ากันได้กับXMODEM โดยตรง มีการพัฒนา XMODEM หลายเวอร์ชันเพื่อแก้ไขข้อบกพร่องอย่างน้อยหนึ่งข้อ และส่วนใหญ่ยังคงเข้ากันได้กับเวอร์ชันก่อนหน้า และสามารถถ่ายโอนข้อมูลได้สำเร็จด้วยการใช้งาน XMODEM แบบ "คลาสสิก" ซึ่งรวมถึง YMODEMของ Forsberg เองด้วย
ZMODEM เลือกที่จะไม่คำนึงถึงความเข้ากันได้กับเวอร์ชันเก่า แต่เน้นไปที่การสร้างโปรโตคอลที่ดีขึ้นอย่างมาก มันทำงานได้ดีไม่แพ้ XMODEM รุ่นประสิทธิภาพสูงใดๆ และใช้งานได้กับลิงก์ที่ก่อนหน้านี้ใช้งานไม่ได้เลย เช่น X.25 หรือมีประสิทธิภาพต่ำ เช่น โมเด็ม Telebitอีกทั้งยังมีคุณสมบัติที่เป็นประโยชน์ซึ่งหาได้ยากในโปรโตคอลอื่นๆ ZMODEM ได้รับความนิยมอย่างมากในระบบกระดานข่าว (BBS) ในช่วงต้นทศวรรษ 1990 และกลายเป็นมาตรฐานที่แพร่หลายเช่นเดียวกับ XMODEM ก่อนหน้านี้
การปรับปรุง
ระบบรุ่นเก่า
โดยทั่วไป โปรโตคอลการถ่ายโอนไฟล์ในยุคแรกๆ จะแบ่งไฟล์ออกเป็นแพ็กเก็ต หลายๆ แพ็กเก็ ต แล้วส่งทีละแพ็กเก็ตไปยังผู้รับ ส่วนหลักของแพ็กเก็ต หรือเพย์โหลดคือข้อมูลจำนวนหนึ่งไบต์จากไฟล์ที่กำลังส่ง หลังจากเพย์โหลดจะเป็นค่า ตรวจสอบความถูกต้อง ( checksum ) หรือการตรวจสอบความซ้ำซ้อนแบบวนรอบ (CRC) ซึ่งใช้ตรวจสอบว่าได้รับเพย์โหลดอย่างถูกต้องหรือไม่ หากได้รับแพ็กเก็ตอย่างถูกต้อง ผู้รับจะส่ง ข้อความ ACKและผู้ส่งก็จะเริ่มส่งแพ็กเก็ตถัดไป
ระบบโทรศัพท์ทำให้เกิดความล่าช้าเล็กน้อยที่เรียกว่าความหน่วงซึ่งรบกวนกระบวนการนี้ แม้ว่าผู้รับจะส่งACKทันที แต่ความล่าช้าในสายโทรศัพท์หมายความว่าจะมีช่วงเวลาหนึ่งก่อนที่ผู้ส่งจะได้รับและส่งแพ็กเก็ตถัดไป เมื่อ ความเร็ว ของโมเด็มเพิ่มขึ้น ความล่าช้านี้จะส่งผลให้จำนวนแพ็กเก็ตที่สามารถส่งได้ในช่วงเวลาล่าช้าเพิ่มมากขึ้น ส่งผลให้ประสิทธิภาพของช่องสัญญาณ ลดลง
XMODEMใช้เพย์โหลดขนาด 128 ไบต์ พร้อมเฮดเดอร์ 3 ไบต์ และเช็คซัม 1 ไบต์ รวมเป็น 132 ไบต์ต่อแพ็กเก็ต ในยุคของโมเด็ม 300 บิต /วินาที การส่งแพ็กเก็ตใช้เวลาประมาณ 4 วินาที และความหน่วงโดยทั่วไปอยู่ที่ประมาณ1/10 วินาทีดังนั้นภาระด้านประสิทธิภาพจึงไม่มากนัก เมื่อความเร็วเพิ่มขึ้น ปัญหาก็จะเริ่มร้ายแรงขึ้น ที่ความเร็ว 2400 บิต/วินาที การส่งแพ็กเก็ตใช้เวลาประมาณ 0.55 วินาที ดังนั้นแบนด์วิดท์ประมาณ1/5ของแบนด์วิดท์ที่มีอยู่จึงสูญเปล่าไปกับการรอACK ที่ ความเร็ว 9600 บิต/วินาที การส่งแพ็กเก็ ตใช้เวลาเพียง 0.13 วินาที ดังนั้นแบนด์วิดท์ประมาณ 1/2 จึงสูญเปล่าไป
วินโดวส์และการสตรีมมิ่ง
วิธีแก้ปัญหาอย่างหนึ่งคือการใช้หน้าต่างเลื่อน (sliding window ) โปรโตคอลเหล่านี้จัดการกับปัญหาความหน่วงโดยอนุญาตให้ผู้ส่งส่งแพ็กเก็ตต่อไปได้เรื่อยๆ โดยไม่ต้องรอการยืนยัน (ACK ) จำนวนแพ็กเก็ตที่อนุญาตให้ส่งต่อไปได้เรียกว่า "หน้าต่าง" (window) ซึ่งโดยทั่วไปจะมีค่าอยู่ระหว่างสองถึงสิบหกแพ็กเก็ตในระบบส่วนใหญ่ XMODEM เวอร์ชันใหม่หลายเวอร์ชันที่รองรับหน้าต่างเลื่อนได้ปรากฏขึ้นในช่วงต้นทศวรรษ 1980
การใช้หน้าต่างเลื่อน (Sliding windows) มีประโยชน์สำหรับความหน่วงที่อยู่ในระดับหลายแพ็กเก็ต ซึ่งเป็นกรณีของ XMODEM บนสายโทรศัพท์ทั่วไป อย่างไรก็ตาม วิธีนี้ไม่เพียงพอที่จะจัดการกับความหน่วงที่นานกว่านั้นที่พบในการโทรทางไกล การเชื่อมต่อผ่านดาวเทียม หรือบริการ X.25 เช่นPC Pursuitซึ่งความหน่วงอาจอยู่ในระดับหนึ่งวินาทีหรือนานกว่านั้น ในกรณีอื่นๆ ที่ช่องสัญญาณรับส่งช้ากว่าช่องสัญญาณส่งมาก เช่นเดียวกับกรณีของ โมเด็ม TelebitหรือUSRobotics แม้แต่จำนวน ACKเพียงเล็กน้อยก็อาจทำให้ช่องสัญญาณรับส่ง ทำงานหนักเกินไป และทำให้การถ่ายโอนหยุดชะงักได้
ZMODEM แก้ปัญหาเหล่านี้โดยการขจัดความจำเป็นในการส่ง ACKออกไป ทำให้ผู้ส่งสามารถส่งข้อมูลได้อย่างต่อเนื่องตราบใดที่ผู้รับตรวจไม่พบข้อผิดพลาด จะต้องส่ง NAK ก็ต่อเมื่อมีปัญหาเกิดขึ้นเท่านั้น เนื่องจาก ZMODEM มักใช้กับลิงก์ที่มี ระบบแก้ไขข้อผิดพลาดในตัวเช่น X.25 ผู้รับจึงมักไม่ส่งข้อความใดๆ กลับไปยังผู้ส่ง ส่งผลให้ระบบจะส่งไฟล์ทั้งหมดในรูปแบบสตรีมต่อเนื่อง และ ZMODEM จึงเรียกตัวเองว่า "โปรโตคอลแบบสตรีมมิ่ง"
ประสิทธิภาพของ ZMODEM ดีขึ้นกว่าโปรโตคอลทั่วไปก่อนหน้านี้มาก จนโดยทั่วไปแล้วมันเข้ามาแทนที่โปรโตคอลเฉพาะทางอย่างYMODEM-gซึ่งไม่มีระบบแก้ไขข้อผิดพลาดเลย และอาศัยการเชื่อมต่อที่ปราศจากข้อผิดพลาดซึ่งดูแลโดยโมเด็มแทน แม้ว่า YMODEM-g จะเร็วกว่า (และได้รับความนิยมในหมู่ " ผู้ใช้ระดับสูง ") แต่การขาดคุณสมบัติอื่นๆ เช่น การถ่ายโอนข้อมูลที่สามารถเริ่มต้นใหม่ได้ ทำให้มันไม่น่าสนใจเท่าที่ควร
เริ่มใหม่
XMODEM และโปรโตคอลส่วนใหญ่ที่ใช้พื้นฐานจาก XMODEM จัดการลำดับของแพ็กเก็ตโดยการใส่หมายเลขแพ็กเก็ตนำหน้าข้อมูลตั้งแต่ 1 ถึง 255 เวอร์ชันแบบ Windowed จะใช้หมายเลขแพ็กเก็ตนี้เพื่อระบุว่าแพ็กเก็ตใดได้รับการรับอย่างถูกต้อง หรือระบุแพ็กเก็ตที่ไม่ได้รับ เนื่องจากแพ็กเก็ตมี ความยาว 128 ไบต์ นั่นหมายความว่าปริมาณข้อมูลสูงสุดที่สามารถถ่ายโอนได้ก่อนที่หมายเลขแพ็กเก็ตจะวนกลับคือ 32 KB
ZMODEM แทนที่หมายเลขแพ็กเก็ตด้วยตำแหน่งจริงในไฟล์ ซึ่งระบุด้วยตัวเลข 32 บิต วิธีนี้ทำให้สามารถส่ง ข้อความ NAKเพื่อย้อนกลับการถ่ายโอนไปยังจุดที่เกิดข้อผิดพลาดได้ ไม่ว่าไฟล์จะยาวแค่ไหนก็ตาม คุณสมบัติเดียวกันนี้ยังใช้เพื่อเริ่มต้นการถ่ายโอนใหม่หากล้มเหลวหรือถูกขัดจังหวะโดยเจตนา ในกรณีนี้ ผู้รับจะตรวจสอบว่าได้รับข้อมูลไปแล้วเท่าใด จากนั้นจะส่งข้อความNAKพร้อมตำแหน่งนั้น ซึ่งจะทำให้ผู้ส่งเริ่มต้นจากจุดนั้นโดยอัตโนมัติ
เริ่มอัตโนมัติ
การเริ่มต้นอัตโนมัติช่วยให้การจัดการง่ายขึ้น โดยอนุญาตให้เครื่องส่งเริ่มการถ่ายโอนได้เอง ก่อนหน้านี้ ผู้ใช้ต้องขอไฟล์จากผู้ส่งก่อน ทำให้ไฟล์อยู่ในสถานะ "รอ" จากนั้นจึงกลับไปยังโปรแกรมของตนเองและเรียกใช้คำสั่งเพื่อเริ่มการถ่ายโอน แต่ด้วยการถ่ายโอนอัตโนมัติ ผู้ใช้เพียงแค่ขอไฟล์ ผู้ส่งก็จะเริ่มการถ่ายโอนในโปรแกรมของผู้ใช้โดยอัตโนมัติ
การเปลี่ยนแปลง
มีการพัฒนา ZMODEM เวอร์ชันดัดแปลงขึ้นมาหลายเวอร์ชัน โดยเวอร์ชันที่โดดเด่นที่สุดมาจากบริษัท Omen Technology, Inc. ของ Chuck Forsberg ซึ่งรวมถึง DSZ (DOS Send ZMODEM), GSZ (Graphical Send ZMODEM) และ (l)rzsz ที่ใช้กันอย่างแพร่หลายในระบบปฏิบัติการUnix
ZedZap เป็นเวอร์ชันหนึ่งของ ZMODEM ที่ใช้บล็อกขนาด 8 KB เพื่อประสิทธิภาพที่ดีขึ้นบนโมเด็มความเร็วสูง ต่อมาในปี 2002 และ 2007 ADONTEC ได้สร้างส่วนขยายของ ZMODEM ที่ใช้งานร่วมกับเวอร์ชันก่อนหน้าได้ โดยมีขนาดบล็อก 32 KB และ 64 KB เพื่อเพิ่มประสิทธิภาพในการเชื่อมต่อความเร็วสูงที่ปราศจากข้อผิดพลาด เช่นเครือข่ายISDNหรือTCP/IP
Forsberg เองได้รวบรวมการปรับปรุงหลายอย่างไว้ใน ZMODEM-90 การปรับปรุงแรกคือ MobyTurbo ซึ่งได้ลบการอ้างอิงอักขระควบคุมออกเพื่อปรับปรุงประสิทธิภาพให้ดียิ่งขึ้นไปอีกประมาณ 15% แม้แต่ในเครือข่ายที่ "กิน" อักขระควบคุม ZMODEM-90 ก็สามารถปรับแต่งให้อ้างอิงเฉพาะอักขระที่เครือข่ายกินจริง ๆ เท่านั้น แทนที่จะอ้างอิงทุกอักขระที่เป็นไปได้ การปรับปรุงที่คล้ายกันนี้ทำให้ ZMODEM-90 สามารถทำงานบนเครือข่าย 7 บิตได้ ในขณะที่โปรโตคอลรุ่นก่อนหน้า (ยกเว้นKermit ที่โดดเด่น ) ล้วนต้องการ 8 บิตในระดับหนึ่ง สุดท้าย ZMODEM-90 ยังมี ระบบ การบีบอัดแบบเข้ารหัสความยาว พื้นฐาน เพื่อปรับปรุงประสิทธิภาพเพิ่มเติมสำหรับไฟล์ที่ไม่ได้บีบอัด
ในปัจจุบัน นักพัฒนาของSynchronetได้สร้างการใช้งาน X/Y/ZMODEM ที่ทันสมัยขึ้นมา โดยใช้ชื่อว่า SEXYZ ซึ่งอิงตามแพ็กเกจ zmtx/zmrx อย่างคร่าวๆ โดยสามารถทำงานได้บน ระบบปฏิบัติการ Windowsและ Unix รองรับชื่อไฟล์ยาวและถ่ายโอนข้อมูลได้รวดเร็วและน่าเชื่อถือยิ่งขึ้น การใช้งาน ZMODEM จาก SEXYZ ยังถูกนำไปรวมไว้ในโครงการ SyncTERM ด้วย Synchronet, SEXYZ และ SyncTERM ล้วนเป็น โครงการ โอเพนซอร์สข้ามแพลตฟอร์มและมุ่งเน้นไปที่ระบบ BBS
LeechZmodem เป็น ZMODEM เวอร์ชันที่ก่อกวน (รวมถึงเวอร์ชันที่คล้ายคลึงกันของ XMODEM และ YMODEM) ซึ่งโกงโควต้าการดาวน์โหลดของBBS
ข้อจำกัด
- แพ็กเก็ต ZMODEM บางส่วน (เช่น ZACK, ZRPOS) จะฝังค่าออฟเซ็ตไบต์ไว้ในไฟล์ที่ถ่ายโอนในรูปแบบจำนวนเต็ม 32 บิตที่ไม่ระบุเครื่องหมาย การออกแบบนี้จำกัดความเป็นไปได้ที่ ZMODEM จะสามารถถ่ายโอนไฟล์ที่มีขนาดต่ำกว่า 4GB ได้อย่างน่าเชื่อถือเท่านั้น
- แม้ว่าโปรโตคอลจะอนุญาต แต่การใช้งาน rzsz อ้างอิงไม่สามารถเข้ารหัสอักขระที่ไม่ใช่ตัวควบคุมโดยพลการ (เช่น '~') ซึ่งมักใช้โดยโปรแกรมเชื่อมต่อ TCP/IP เช่นtelnetและsshเป็นอักขระ "หลีกเลี่ยงเทอร์มินัล" ฝั่งไคลเอ็นต์ ผู้ใช้ต้องปิดใช้งานคุณสมบัติการหลีกเลี่ยงเทอร์มินัลเพื่อให้การถ่ายโอนที่เชื่อถือได้ผ่านลิงก์ประเภทนี้ เช่น ssh -e none user@hostname
ลิงก์ภายนอก
- วิวัฒนาการและการคัดเลือกโปรโตคอลการถ่ายโอนไฟล์