تقنية

تأطير COBS: استعد البايتات وحدد نهاية الرسالة

ثمانية بايتات أصلية ثم تسعة مرمزة، مع أربع كتل تبين البايتات المستعادة
الرسالة والرسوم من إعدادنا. نقرأ البايتات من اليسار إلى اليمين، وكل زوج من الرموز يمثل بايتًا بالصيغة الست عشرية.

لديك رسالتان وراء بعضهما، وتريد علامة تدل على نهاية كل واحدة. اختيار الصفر يبدو سهلًا حتى تجد صفرًا داخل البيانات نفسها. سنأخذ رسالة صغيرة تحتوي صفرين متجاورين وصفرًا أخيرًا، ونغير تمثيلها ثم نستعيدها. تستطيع متابعة العمل بقلم؛ لا نحتاج اتصالًا شبكيًا لفهم الحدود.

الخلاصة السريعة

  • أصل تمريننا ثمانية بايتات، منها ثلاثة أصفار.
  • الناتج المرمز تسعة بايتات بلا صفر؛ نضيف بعده فاصلًا عاشرًا قيمته صفر.
  • أول رمز 03 يسبق البايتين 11 22 في مثالنا.
  • الرمزان 01 يفسران الفراغ بين صفرين ونهاية الرسالة.
  • تغيير 22 إلى 23 يمر من فك الترميز؛ قبول البنية لا يثبت سلامة المحتوى.

حدد ما يدخل إلى كل خطوة

تتيح واجهة COBS في Zephyr اختيار الفاصل، وإلحاقه عبر خيار مستقل؛ الافتراضي صفر. نستخدم هنا الصفر وحده، ونفصل بين «الحزمة المرمزة» و«الفاصل الملحق». [2]

ورقة التدريب تبدأ بالسطر 11 22 00 00 33 44 55 00. هذه قيم اخترناها، وليست نصًا مكتوبًا بكلمات أو حروف. لا تعني 11 العدد العشري أحد عشر هنا؛ إنها كتابة ست عشرية. يكفينا أن نميز الزوج 00 من بقية الأزواج، وأن نعد الخانات دون تفكيك كل بايت إلى بتاته.

ضع ثلاث نسخ للسطر: «الأصل»، و«المرمز»، و«المرسل مع الفاصل». سنقارنها لاحقًا، لأن خلط النسخة الثانية بالثالثة يسبب خطأ بسيطًا: تمرير صفر نهاية الإطار إلى دالة تتوقع حزمة مرمزة فقط. اجعل أسماء النسخ جزءًا من الحل، لا ملاحظة تضيفها بعد ضياع موضع الصفر.

اقرأ رمز الكتلة ثم بايتاتها

في COBS تسبق كل مجموعة شفرة طول: القيم من 01 إلى FE تعني نسخ عدد بايتات أقل بواحد، ثم استعادة صفر إن بقيت كتلة. أما FF فيسبق 254 بايتًا بلا صفر مستعاد بعده. [1]

ابدأ بسطرنا الناتج: 03 11 22 01 04 33 44 55 01. موقع القراءة الأول يحمل 03، فنأخذ بعده خانتين: 11 22. لم نصل إلى نهاية السطر؛ نكتب صفرًا بعدهما في ورقة الاستعادة. أصبح ما كتبناه 11 22 00، وينتقل المؤشر إلى 01 الذي في الموقع الرابع.

هذه الكتلة الثانية لا تحمل بايت بيانات، لأن واحدًا ناقص واحد يساوي صفرًا. لكن السطر لم ينته؛ لذلك نكتب صفرًا آخر. هنا يظهر سبب وجود صفرين متجاورين في الأصل: الأول جاء بعد الكتلة التي حملت قيمتين، والثاني جاء من الكتلة الخالية بينهما وبين المجموعة التالية.

المؤشر التالي عند 04. ننسخ ثلاثة بايتات، هي 33 44 55، ثم صفرًا لأن كتلة أخرى ما زالت موجودة. صار المستعاد ثماني خانات. أخيرًا نقرأ 01 الأخير: لا بيانات بعده، ولا كتلة تالية تستدعي صفرًا إضافيًا. نتوقف، فيطابق الناتج سطر البداية بالضبط.

دفتر الاستعادة للرسالة المختارة
الرمزالمنسوخإضافة صفر؟
0311 22نعم
01لا شيءنعم
0433 44 55نعم
01لا شيءلا؛ النهاية

ابنِ السطر بدل حفظه

غط السطر المرمز وحاول بناءه من الأصل. لديك أولًا قيمتان قبل الصفر الأول؛ اكتب 03 ثم القيمتين. تصل مباشرة إلى صفر ثانٍ، فلا توجد قيمة بينهما؛ اكتب 01. بعدها ثلاث قيم قبل الصفر الثالث، فتكتب 04 ثم 33 44 55. بقي الجزء الخالي بعد الصفر الأخير، وله 01 أخيرة في سطرنا.

عدّ النتيجة: أربعة رموز كتل وخمسة بايتات من البيانات غير الصفرية تساوي تسعة بايتات. الأصل ثمانية، إذن زاد تمثيل هذه الرسالة بايتًا. ومع الفاصل الخارجي يصبح المرسل عشرة. هذه أعداد هذا المثال؛ لا تستنتج منها أن كل رسالة، مهما طال طولها، تزيد بايتًا واحدًا فقط.

نموذجنا يحتفظ بكتلة 01 الختامية بعد مجموعة كاملة من 254 بايتًا غير صفري. تعرض الورقة الأصلية إمكان حذفها في هذا الموضع. لا يؤثر الاختيار في رسالتنا القصيرة. [1]

اجمع رسالتين ثم افصلهما

نختار أصلًا ثانيًا: A7 00 5C. بايت قبل الصفر وآخر بعده يعطيان 02 A7 02 5C. ألحق صفرًا بهذا الناتج، وضعه بعد الإطار الأول. يصبح لدينا عشرة بايتات في الأول وخمسة في الثاني، أي خمسة عشر في السلسلة المرسلة.

إطاران ينتهيان بصفر أحمر، ثم مثال تغيير بايت22إلى23 يمر من فك الترميز
السطران العلويان متجاوران في سلسلة واحدة. في الاختبار السفلي عدّلنا البيانات فقط، وأبقينا رموز الكتل كما هي.

في طريقة استقبال تمريننا نجمع البايتات حتى الصفر الأحمر الأول، ونرسل التسعة السابقة له إلى الفك. نبدأ تجميعًا جديدًا حتى الصفر التالي، ثم نفك الأربعة بين الحدين. إذا توقفت دفعة القراءة عند 33 داخل الإطار الأول، لا نعلن نهاية رسالة؛ نحتفظ بما وصل ونكمله من الدفعة التالية.

وإذا وصل أول إطار كامل ومعه بداية الثاني، نُخرج الأول ونبقي البداية الناقصة. اختبرنا هذا السلوك بتقسيم السلسلة نفسها عند حدود مختلفة ومقارنة الرسالتين المستعادتين. لم نقس سرعة نقل أو زمن انتظار؛ المقصود أن تقسيم وصول البايتات لا يغير الرسائل في هذا النموذج.

ميّز رفض البنية عن اكتشاف التلف

توثق مكتبة cobs.cobs رفض وجود صفر داخل الحزمة المرمزة، ورفض شفرة طول تطلب بايتات أكثر مما تبقى. وهي تعيد بيانات الفك عند قبول البنية. [3]

جرّب الحزمة المختصرة 04 11 22. الرمز يطلب ثلاث خانات، لكن أمامنا اثنتان؛ نموذجنا يرفضها. ثم جرّب تعديل رسالة المثال من 11 22 إلى 11 23 داخل أول كتلة مع إبقاء بقية السطر. لا يوجد تجاوز للطول أو صفر داخلي، فينجح الفك، ويعيد رسالة مختلفة في البايت الثاني.

هذه نتيجة كافية لرفض العبارة «نجح الفك إذن البيانات صحيحة». ما أثبتناه أضيق: هذا التعديل المحدد لا تكشفه قواعد البنية المستخدمة. احتفظ بنسخة الأصل إذا كان هدف التدريب مقارنة القيم؛ التحديد الواضح لنهاية الرسالة وحده لا يقوم مقام تلك المقارنة.

مراجعة الحل وحدود التجربة

راجعنا الذهاب والعودة رقميًا، وقارنا طريقتين لبناء الكتل، وأدخلنا حالات صفرية ورسائل طويلة وحدود المجموعة ذات 254 بايتًا. تمرين القارئ الأبسط هو حذف الصفر الأخير من الأصل: يصبح الناتج 03 11 22 01 04 33 44 55، ويقل طوله إلى ثمانية قبل الفاصل. افحص سبب غياب 01 الأخيرة قبل النظر إلى أي برنامج.

المصادر

  1. Cheshire وBaker: Consistent Overhead Byte Stuffing
  2. Zephyr: COBS API
  3. Craig McQueen: cobs.cobs
أُعد النص والرسومان والنموذج بمساعدة الذكاء الاصطناعي. الأمثلة أصلية والتحقق رقمي؛ لم تُجر تجربة شبكة أو جهاز اتصال أو مراجعة بشرية مستقلة.