YMODEM
YMODEM هو بروتوكول لنقل الملفات يُستخدم بين الحواسيب الصغيرة المتصلة ببعضها عبر المودم . استُخدم في الأساس لنقل الملفات من وإلى أنظمة لوحات الإعلانات . طُوّر YMODEM بواسطة تشاك فورسبيرغ كامتداد لـ XMODEM ، وطُبّق لأول مرة في برنامج YAM الخاص به لنظام CP/M . عُرف في البداية أيضًا باسم YAM، ثم أُطلق عليه رسميًا اسم "YMODEM" عام 1985 من قِبل وارد كريستنسن ، مؤلف XMODEM الأصلي.
طوّر بروتوكول YMODEM بروتوكول XMODEM بثلاث طرق، جامعًا بين ميزات موجودة في أنواع أخرى من XMODEM الموسّعة. وكما في XMODEM-CRC، استبدل YMODEM مجموع التحقق ذي 8 بتات بفحص التكرار الدوري (CRC) ذي 16 بتًا ، وجعله الشكل الافتراضي للتصحيح بدلًا من كونه اختياريًا. ومن TeLink، أضاف YMODEM رأس "block 0" الذي يرسل اسم الملف وحجمه، مما أتاح نقل الملفات دفعة واحدة (ملفات متعددة في جلسة واحدة) وألغى الحاجة إلى إضافة حشو في نهاية الملف. وأخيرًا، سمح YMODEM بزيادة حجم الكتلة من 128 بايتًا من البيانات إلى 1024 بايتًا، كما في XMODEM-1k ، مما حسّن بشكل كبير من معدل نقل البيانات على أجهزة المودم الأسرع.
وضع فورسبيرغ المعيار مع توفير جميع هذه الميزات كخيارات تشغيل، مما يسمح لبرنامج تشغيل بروتوكول واحد بالرجوع إلى XMODEM-CRC أو حتى XMODEM عند الاتصال بأنظمة غير YAM. كان يعتقد أن المبرمجين سيرغبون في تطبيق أكبر عدد ممكن من هذه الميزات على أي منصة. لكنه شعر بخيبة أمل عندما وجد أن معظم التطبيقات لا توفر في الواقع سوى حجم كتلة 1 كيلوبايت مع CRC-16، حيث فشلت في تطبيق "الكتلة 0" مع استمرار استخدام اسم YMODEM. نتج عن ذلك إصدار العديد من تطبيقات YMODEM غير المتوافقة، واستخدام اسم YMODEM Batch للإشارة بوضوح إلى الإصدارات التي تدعم المعيار بالكامل.
سمات
إكس مودم
كان بروتوكول XMODEM الأصلي بسيطًا للغاية، وهذا سر نجاحه؛ إذ كان بالإمكان تطبيقه على أي جهاز تقريبًا في ذلك الوقت، حتى تلك ذات المعالجات وسعة التخزين المحدودة. كان يعمل بتقسيم البيانات المراد إرسالها إلى حزم بحجم 128 بايت ، وإضافة رأسية بحجم 3 بايت وتذييل بحجم بايت واحد للتحقق من المجموع الاختباري، ثم إرسال الحزم الناتجة بحجم 132 بايت بالتسلسل. يقوم الحاسوب المُستقبِل بإعادة حساب المجموع الاختباري من البيانات الـ 128 بايت، فإذا تطابق مع المجموع الاختباري المُرسَل في التذييل، يُرسِل إشعار تأكيد (ACK ) ، وإذا لم يتطابق، يُرسِل إشعار رفض ( NAK) . عندما يتلقى المُرسِل إشعار تأكيد (ACK)، يُرسِل الحزمة التالية، بينما يُعيد إرسال الحزمة السابقة عند تلقي إشعار رفض (NAK) .
كان هناك عدد من المشاكل في البروتوكول. استخدام مجموع اختباري بسيط يعني إمكانية مرور بعض الأخطاء الشائعة دون ملاحظة. صغر حجم الحزمة وضرورة انتظار تأكيد الاستلام (ACK) أو رفض الاستلام (NAK) أدّيا إلى بطء الأداء على الروابط عالية السرعة أو تلك ذات زمن الاستجابة الكبير. وأخيرًا، نظرًا لعدم احتواء عملية النقل على أي تفاصيل عن الملف، كان لا بد من بدء كل ملف يدويًا، وهو ما قد يكون مرهقًا عند نقل العديد من الملفات الصغيرة.
طُوّرت حلول لهذه المشاكل خلال أوائل ثمانينيات القرن العشرين. استبدلت تقنية XMODEM-CRC مجموع التحقق بفحص التكرار الدوري (CRC) ذي 16 بت، والذي كان أكثر مقاومة للأخطاء الشائعة. وزادت تقنية XMODEM-1k حجم الحزمة من 128 بايت إلى 1024 بايت، مما حسّن الأداء على الاتصالات عالية السرعة، بينما قدمت تقنيات أخرى، مثل WXMODEM وSEAlink، أنظمة النافذة المنزلقة لمعالجة كل من الأداء وزمن الاستجابة، على حساب بعض التعقيد. وأضافت تقنيات أخرى، مثل TeLink وMODEM7، معلومات الملفات بحيث يمكن أن تحتوي عملية نقل واحدة على ملفات متعددة، مما يسمح بإرسال مجموعات من الملفات بأمر واحد.
YMODEM
قرر تشاك فورسبيرغ ، مؤلف برنامج "Yet Another Modem program" (YAM) لنظام CP/M ، كتابة برنامج تشغيل بروتوكول واحد يدعم العديد من الميزات مقارنةً بـ XMODEM، وأطلق عليه اسم YMODEM. عند بدء المستخدمين عملية نقل البيانات، يمكنهم تحديد الخيارات التي يرغبون بها عبر سطر الأوامر، على سبيل المثال، تحديد رغبتهم في استخدام CRC. صُمم البروتوكول بحيث يحاول تطبيق هذا الأسلوب، ولكنه يعود بسلاسة إلى استخدام الإمكانيات التي يوفرها البرنامج البعيد.
إجهاض
كانت إحدى مشكلات بروتوكول XMODEM الأصلي عدم وجود طريقة محددة لإيقاف عملية الإرسال بعد بدئها. وكان الحل المعتاد هو إرسال إشعار رفض (NAK ) مع كل حزمة بيانات لاحقة إذا طلب المستخدم ذلك. ولأن بروتوكول XMODEM حدد حدًا أقصى لعشرة إشعارات رفض لإيقاف الإرسال، ولأن كل حزمة بيانات قد تستغرق ثانية واحدة للإرسال، فقد كان هذا يعني وجود تأخير لمدة عشر ثوانٍ حيث كان المرسل يرسل بيانات يتم تجاهلها ببساطة.
أضافت بعض التطبيقات إمكانية إرسال إشارة CAN بدلاً من ACK أو NAK في نهاية الحزمة المستلمة للإشارة إلى الإلغاء. مع ذلك، كان هناك احتمال أن تُولّد إشارة CAN بسبب تشويش الخط، مما يؤدي إلى الإلغاء. لذا، عدّل YAM هذا الأمر قليلاً ليتطلب إرسال إشارتي CAN متتاليتين، ما يُتيح إجراء "إلغاء سلس" فوري من جانب المُرسِل.
CRC
تم إدخال دعم CRC في XMODEM-CRC. كان هذا تغييرًا بسيطًا جدًا على البروتوكول الأصلي؛ فإذا طُلب ذلك، يحاول المُستقبِل بدء عملية النقل بإرسال رمز C أولي بدلًا من رمز NAK . إذا كان المُرسِل البعيد يدعم خيار CRC، فإنه يبدأ بإرسال الحزم كالمعتاد، ولكن مع رمز CRC ذي 16 بت في التذييل بدلًا من مجموع التحقق ذي البايت الواحد. يدعم YAM هذا الخيار دون أي تغييرات.
1k
تم إدخال حزم بيانات بحجم 1024 بايت في XMODEM-1k. [ 1 ] لم يُغيّر هذا الإصدار حرف التشغيل من المُستقبِل، لذا لم يكن بإمكان المُرسِل معرفة ما إذا كان المُستقبِل يدعم حزم بيانات أكبر. بدلاً من ذلك، عُرض XMODEM-1k كبروتوكول منفصل على طرفي الاتصال. عند بدء هذا الاتصال، كان بإمكان المُرسِل اختيار إرسال حزمة بيانات بحجم 1024 بايت أو 128 بايت، مع الإشارة إلى الحجم الأكبر باستخدام حرف STX في رأس الحزمة بدلاً من SOH المعتاد . عادةً ما تستخدم الحزم القليلة الأخيرة فقط الحزم الأصغر حجمًا، لتجنب إرسال كميات كبيرة من البيانات المُضافة. كما افترض XMODEM-1k استخدام CRC لجميع الاتصالات. دعم YAM بروتوكول XMODEM-1k دون أي تغييرات.
حزمة بيانات صفرية
لدعم عمليات نقل البريد الإلكتروني عبر شبكة FidoNet آليًا ، أضاف مودم 7 إمكانية إرسال اسم الملف كنص عادي قبل إرسال أول كتلة بيانات. لم تكن هذه الطريقة موثوقة، فقام TeLink بتحسينها عن طريق وضع اسم الملف، وبيانات أخرى اختيارية مثل تاريخ الإنشاء وحجم الملف، في حزمة بيانات كاملة بحجم 128 بايت. بدأ XMODEM عمليات النقل بالحزمة رقم واحد، لذا أرسل TeLink هذه الحزمة كرقم صفر. أصبحت هذه "الحزمة الصفرية" أو "الكتلة الصفرية" شائعة في أنظمة FidoNet الأخرى مثل SEAlink وغيرها.
كان بروتوكول YAM يدعم تنسيق الحزمة الصفرية، لكن العديد من تطبيقات YMODEM الخارجية تجاهلته. عندما حاول أحد هذه التطبيقات إرسال الحزمة الصفرية إلى إصدار لا يدعمها، قام المُستقبِل تلقائيًا برفض الحزمة (NAK )، لأن الحزمة الصفرية غير مسموح بها. عندها، اعتبر المُرسِل رفض الحزمة خطأً في الإرسال وحاول إرسالها مرة أخرى، مُكررًا المحاولة عشر مرات قبل أن يفشل.
لأسباب غير واضحة تمامًا، لم تُفعّل العديد من تطبيقات YMODEM هذه الميزة. ولأنها لم تكن على دراية بها، فقد أرسلت رسالة رفض (NAK) ، مما أدى إلى سلسلة من محاولات إعادة الإرسال قبل أن تفشل. هذا يعني أنه إذا اختار المستخدم استخدام YMODEM متوافق مع إصدار غير متوافق، فستفشل عمليات النقل. ومع ذلك، كانت هذه الإصدارات غير المتوافقة شائعة.
ونتيجةً لذلك، كان من الشائع رؤية كل من YMODEM وYMODEM Batch مُدرجين كبروتوكولين منفصلين. وقد زاد التشابه بين XMODEM-1k وهذه البروتوكولات غير المتوافقة من YMODEM من الارتباك، لدرجة أنها كانت تُدرج خطأً في كثير من الأحيان على أنها نفس البروتوكول.
دعم البث
يُعدّ YMODEM-G نوعًا متطورًا من بروتوكولات البث المباشر، يُستخدم للاتصالات الخالية من الأخطاء. لا ينتظر هذا البروتوكول استلام إشعار تأكيد (ACK) قبل إرسال الحزمة التالية؛ حيث تُستخدم آلية XON/XOFF للتحكم في تدفق البيانات . يتميز هذا البروتوكول بسرعته مقارنةً بـ YMODEM لعدم وجود أي تأخير بين الحزم، ولكنه يفتقر إلى القدرة على تصحيح الأخطاء. ويعتمد على خلوّ الاتصال الأساسي من الأخطاء، [ 1 ] وهو ما ينطبق على أجهزة المودم التي تدعم خدمة تغيير رقم الهاتف (MNP) على سبيل المثال.
عادةً، يبدأ نقل البيانات عبر بروتوكول YMODEM بإرسال المُستقبِل الحرف C للإشارة إلى رغبته في استخدام تنسيق 128 بايت مع التحقق من التكرار الدوري (CRC)، أو الحرف NAK إذا رغب في استخدام نظام التحقق الأصلي. عند الرغبة في استخدام بروتوكول g، يبدأ النقل بإرسال الحرف G. إذا كان المُرسِل لا يدعم بروتوكول g، فإنه يعتبر ذلك خطأً ويتجاهله، أما إذا كان يدعمه، فإنه يبدأ بإرسال الحزم بشكل متواصل. ويتوقع فقط استلام إشعار تأكيد (ACK) واحد بعد استلام الحزمة الأخيرة، والذي يُشار إليه بوجود حرف EOT في البيانات. يفترض بروتوكول YMODEM-g توفر 1000 حزمة.
مع ذلك، ورغم أن هذا البروتوكول قد يكون أسرع من ZMODEM، إلا أنه كان نادر الاستخدام. ويعود ذلك جزئيًا إلى افتقاره لوظائف أخرى، ولكن أيضًا إلى مشكلة أكثر خطورة. فقبل ظهور وحدة UART 16550 ، كان هناك خطر كبير لحدوث تجاوز في سعة المخزن المؤقت على المنفذ التسلسلي . ورغم أن YMODEM-g كان يكشف هذا التجاوز، إلا أنه لم يكن بالإمكان تصحيحه لعدم إمكانية إعادة إرسال البيانات. وكان على المُستقبِل إلغاء عملية الإرسال وإعادة تشغيلها من البداية. أما ZMODEM، من ناحية أخرى، فيمتلك خاصية استئناف النقل، مما جعله أكثر جاذبية.
مراجع
- 1 2 ميكس، بروك (فبراير 1989). "مبادئ X- وY- وZ-MODEM" . بايت . ص 163-166 . تاريخ الاسترجاع 2024-10-08 .
- مرجع بروتوكول XMODEM / YMODEM بقلم تشاك فورسبيرغ ، 10 أكتوبر 1985
- مرجع بروتوكول XMODEM / YMODEM بقلم تشاك فورسبيرج ، 18 يونيو 1988 (تمت إعادة تنسيق المستند في 14 أكتوبر 1988) (نسخة HTML مع مشاكل في النص)
- بروتوكولات نقل الملفات في لوحات الإعلانات الإلكترونية
