UDP-Lite

بروتوكول UDP-Lite ( بروتوكول بيانات المستخدم الخفيف ) هو بروتوكول غير متصل يسمح بتسليم حمولة بيانات قد تكون تالفة إلى التطبيق بدلاً من تجاهلها من قِبل المحطة المستقبلة. يُعد هذا مفيدًا لأنه يسمح باتخاذ قرارات بشأن سلامة البيانات في طبقة التطبيق (التطبيق أو برنامج الترميز )، حيث تكون دلالة البتات مفهومة. تم وصف بروتوكول UDP-Lite في RFC 3828 . 

بروتوكول

يعتمد بروتوكول UDP-Lite على بروتوكول بيانات المستخدم (UDP)، ولكن على عكس UDP، حيث يكون جزء من الحزمة محميًا بمجموع اختباري أو لا شيء منه، يسمح UDP-Lite بمجموع اختباري جزئي يغطي جزءًا فقط من حزمة البيانات (عدد عشوائي من البايتات في بداية الحزمة)، وبالتالي سيرسل حزمًا بها تلف جزئي. صُمم هذا البروتوكول لبروتوكولات الوسائط المتعددة، مثل بروتوكول نقل الصوت عبر الإنترنت (VoIP) أو الفيديو المتدفق، حيث يكون استلام حزمة بحمولة تالفة أفضل من عدم استلام أي حزمة على الإطلاق. في بروتوكول UDP التقليدي وبروتوكول التحكم في الإرسال (TCP)، يؤدي وجود خطأ في بت واحد إلى مجموع اختباري "سيئ"، مما يعني أنه يجب تجاهل الحزمة بأكملها: وبهذه الطريقة، تتحول أخطاء البتات إلى أخطاء في الحزمة بأكملها حتى عندما يكون الضرر الذي لحق بالبيانات طفيفًا. لحساب المجموع الاختباري، يستخدم UDP-Lite نفس خوارزمية المجموع الاختباري المستخدمة في UDP (وTCP). [ 1 ]

تتضمن برامج الترميز الحديثة للوسائط المتعددة، مثل G.718 و Adaptive Multi-Rate (AMR) للصوت، و H.264 و MPEG-4 للفيديو، ميزات مرونة مدمجة في بنية وبنية البث. يسمح هذا لبرنامج الترميز بـ (أ) اكتشاف الأخطاء في البث، و(ب) تصحيحها، أو على الأقل إخفاءها، أثناء التشغيل. تُعد هذه البرامج مثالية لبروتوكول UDP-Lite، لأنها مصممة للعمل مع تدفقات البيانات التالفة، ومن الأفضل لها استقبال 200 بايت تقريبًا تحتوي على بعض البتات التالفة، بدلًا من إخفاء فقدان حزمة كاملة تم تجاهلها بسبب خطأ في مجموع التحقق. تفهم طبقة التطبيق أهمية البيانات، بينما لا ترى طبقة النقل سوى حزم UDP. هذا يعني إمكانية إضافة حماية من الأخطاء، عند الضرورة، في طبقة أعلى، على سبيل المثال باستخدام آلية تصحيح الأخطاء الأمامية . يُعدّ التطبيق المكان الأمثل لتحديد أجزاء البث الأكثر حساسية للأخطاء وحمايتها وفقًا لذلك، بدلًا من استخدام مجموع اختباري واحد شامل يغطي كل شيء بالتساوي. ويمكن ملاحظة مثال على ذلك في بحث هامر وآخرون، حيث تم دمج بروتوكول UDP-Lite مع برنامج ترميز AMR لتحسين جودة الصوت في ظروف الشبكة التي تعاني من فقدان البيانات. [ 2 ]

بما أن معظم طبقات الربط الحديثة تحمي البيانات المنقولة بفحص تكرار دوري قوي (CRC) وتتجاهل الإطارات التالفة، فإن الاستخدام الفعال لبروتوكول UDP Lite يتطلب أن تكون طبقة الربط على دراية ببيانات طبقة الشبكة المنقولة. ولأن حزم بروتوكول الإنترنت الحالية لا تدعم مثل هذه التفاعلات بين الطبقات ، فإن الاستخدام الفعال لبروتوكول UDP Lite يتطلب حاليًا برامج تشغيل أجهزة معدلة خصيصًا.

معرف بروتوكول IP هو 136. يستخدم UDP-Lite نفس مجموعة أرقام المنافذ التي خصصتها هيئة أرقام الإنترنت المخصصة (IANA) لاستخدامها بواسطة UDP.

أُضيفت خاصية دعم بروتوكول UDP-Lite في نواة لينكس الإصدار 2.6.20. وسيتم إزالة هذا الدعم في الإصدار 7.1 نظرًا لعدم استخدام البروتوكول، مما يُسبب عبئًا على أداء UDP ويتطلب صيانة. [ 3 ]

أُضيفت خاصية دعم بروتوكول UDP-Lite إلى نواة نظام FreeBSD بدءًا من الإصدار r264212. [ 4 ] كما أُعيدت مجموعة التغييرات إلى الإصدار stable/10 باستخدام MFC [ 5 ] وأصبحت متاحة في إصدار FreeBSD 10.1-RELEASE. [ 6 ]

تم توسيع واجهة برمجة تطبيقات مقبس BSD لدعم UDP-Lite من خلال المعامل الثالث لاستدعاء نظام المقبس : قم بتعيينه إلى IPPROTO_UDPLITE لطلب مقبس UDP-Lite: [ 7 ]

int fd = المقبس ( PF_INET ، SOCK_DGRAM ، IPPROTO_UDPLITE 

يمكن أيضًا بسهولة تحديد الجزء من الحزمة الذي سيتم تغطيته بواسطة مجموع التحقق (بدءًا من البداية بما في ذلك الترويسة):

int val = 20 ; /* 8 بايتات للرأس + 12 بايتًا لبروتوكول التطبيق. */ ( void ) setsockopt ( fd , SOL_UDPLITE , UDPLITE_SEND_CSCOV , & val , sizeof val );

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

في جانب الاستقبال، يقوم المقبس افتراضيًا بإسقاط جميع الحزم التي لم يتم تغطيتها بالكامل (محاكاة UDP). وللسماح بتغطية أصغر، يمكن استخدام ما يلي:

int val = 20 ; /* 8 بايتات للرأس + 12 بايتًا لبروتوكول التطبيق. */ ( void ) setsockopt ( fd , SOL_UDPLITE , UDPLITE_RECV_CSCOV , & val , sizeof val );

سيسمح هذا بحزم بيانات تحتوي على 12 بايت على الأقل من بيانات المستخدم مُدققة المجموع الاختباري. أي حزمة بيانات ذات تغطية أقل سيتم تجاهلها باعتبارها تالفة. إذا كانت حزمة البيانات تحتوي على 20 بايت على الأقل (بما في ذلك رأس الحزمة) وكان مجموعها الاختباري صحيحًا، فسيتم تسليمها إلى التطبيق (مع إمكانية تلف جزء من البيانات أو كلها، إما لعدم تغطيتها بالمجموع الاختباري أو لصحته مصادفةً، وهو أمر مستبعد جدًا). ​​أما إذا كان المجموع الاختباري غير صحيح، فسيتم تجاهل الحزمة، لأنه من المستحيل تحديد ما إذا كان الخطأ في بيانات الحمولة أو في رأس UDP-Lite، وبالتالي قد تكون الحزمة موجهة لبرنامج آخر.

أصغر نطاق تغطية ممكن هو 8 بايتات. يجب تضمين الرؤوس في مجموع التحقق. سيتم إسقاط الحزم ذات نطاق التغطية الأقصر دائمًا بغض النظر عن أي إعدادات (مع تجاهل برامج تحليل الشبكة التي تهتم بجميع أنواع البيانات) لعدم مطابقتها للمعايير.

يدعم

يدعم بروتوكول UDP-Lite أنظمة التشغيل التالية:

  • نظام التشغيل FreeBSD ، منذ الإصدار 10.1-RELEASE
  • لينكس ، منذ إصدار النواة 2.6.20 وحتى الإصدار 7.1
  • متوفر أيضًا على نظام التشغيل Windows من خلال مكتبة تابعة لجهة خارجية، WULL [ 8 ]

مراجع

  1. "حساب مجموع التحقق للإنترنت، RFC 1071" . تم الاطلاع عليه بتاريخ 12-01-2012 .
  2. "بيانات الكلام المشوهة تعتبر مفيدة، 2003" . تم الاطلاع عليه بتاريخ 12-01-2012 .
  3. Larabel, Michael. "Linux 7.1 To Retire UDP-Lite - Allows For Better Performance With Cleansed Code". Phoronix. Retrieved 2026-03-16.
  4. "Commit message for introduction into CURRENT". Retrieved 2014-07-26.
  5. "Commit message for MFC from CURRENT". Retrieved 2014-10-05.
  6. "FreeBSD 10.1-RELEASE Release Notes".
  7. "UDP-Lite Howto (kernel and userland applications)". Retrieved 2015-10-11.
  8. Laurent Guillo; Cécile Marc (10 January 2005). "WULL: A Windows UDP-Lite library"(PDF). IRISA. Retrieved 2015-12-15.
  • RFC 3828 — The Lightweight User Datagram Protocol (UDP-Lite)
  • RFC 4019 — RObust Header Compression (ROHC): Profiles for User Datagram Protocol (UDP) Lite
  • RFC 5097 — MIB for the UDP-Lite protocol
  • RFC 5405 — Unicast UDP Usage Guidelines for Application Designers