UDP: ما هو، بروتوكول بدون اتصال وكيف يعمل

المؤلف: IT Sectr نُشر: 2026-03-06 وقت القراءة: 8 دق

UDP (User Datagram Protocol) هو بروتوكول لنقل البيانات بدون اتصال يعمل عبر IP ويوفر زمن وصول أدنى عند إرسال البيانات. على عكس TCP، لا يضمن UDP التسليم أو ترتيب الحزم أو الحماية من الازدواجية. وفقًا لـ IETF RFC 768 (2024)، UDP يعالج أكثر من 40% من حركة المرور العالمية على الإنترنت بفضل مكالمات الفيديو والبث المباشر واستعلامات DNS.

الخلاصة

  • UDP هو بروتوكول بدون اتصال يرسل البيانات دون تأكيد التسليم
  • زمن وصول أدنى يتحقق بفضل غياب المصافحة والتحكم في الازدحام وإعادة الإرسال
  • يُستخدم في مكالمات الفيديو والألعاب عبر الإنترنت و DNS و DHCP والبث المباشر
  • رأس UDP يبلغ 8 بايت فقط مقابل 20–60 بايت لـ TCP
  • فقدان الحزم يُعوّض على مستوى التطبيق عبر FEC أو إعادة الإرسال أو تكرار البيانات

ما هو UDP؟

UDP (User Datagram Protocol) هو أحد البروتوكولات الرئيسية لطبقة النقل في نموذج TCP/IP، صممه David Reed في عام 1980. يوفر آلية نقل بيانات بسيطة: يرسل التطبيق بيانات، ولا يتتبع البروتوكول ما إذا وصلت إلى المستلم.

يتكون رأس UDP من أربعة حقول فقط: منفذ المصدر ومنفذ الوجهة والطول والمجموع الاختباري. كل حقل يستهلك 2 بايت، لذا فإن الحجم الإجمالي للرأس هو 8 بايت. للمقارنة، رأس TCP بدون خيارات يبلغ 20 بايت، ومع الخيارات — حتى 60 بايت.

البروتوكول لا يدعم التجزئة على مستواه الخاص — إذا تجاوزت البيانات MTU (وحدة الإرسال القصوى)، يتم تجزئتها على مستوى IP. إذا فقد جزء واحد، يتم تجاهل البيانات بالكامل، لأن UDP لا يمكنه طلب إعادة إرسال الأجزاء الفردية. يجب على المطورين التحكم في حجم البيانات — للشبكات المحمولة، غالبًا ما تكون MTU 1400 بايت، لذا يجب ألا يتجاوز الحجم الأقصى هذه القيمة.

كيف يعمل UDP

يقوم التطبيق الذي يستخدم UDP بإنشاء مقبس من نوع SOCK_DGRAM، ويحدد المنفذ وعنوان IP الوجهة ويرسل البيانات. يضيف البروتوكول رأسًا بسيطًا ويمرر الحزمة إلى طبقة IP. يستمع المستقبل على منفذه ويستخرج البيانات من الرسائل الواردة.

لا يقوم UDP بالتحكم في الازدحام — يمكن للتطبيق إرسال البيانات بأقصى سرعة تدعمها الشبكة. قد يؤدي هذا إلى ازدحام القناة، ولكن في السيناريوهات في الوقت الفعلي، هذا التصرف مبرر: لمكالمة الفيديو، تدفق البيانات مع فقد محتمل أهم من إيقاف الإرسال.

python
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'Hello, UDP!', ('192.168.1.100', 8888))
sock.close()

في هذا المثال، يتم إنشاء مقبس SOCK_DGRAM لـ UDP. يرسل sendto البيانات دون إنشاء اتصال — يكفي معرفة IP ومنفذ المستلم. يقوم recvfrom على جانب الخادم بإرجاع كل من البيانات وعنوان المرسل للرد. يتم تكوين مقابس UDP على المنصات المحمولة بشكل مشابه ولكنها تتطلب أذونات إضافية: على iOS، يجب إضافة NSAppTransportSecurity للاتصالات UDP غير المشفرة، وعلى Android، إذن INTERNET في البيان.

مزايا وعيوب UDP

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

المزاياالعيوب
زمن وصول منخفض — بدون مصافحةلا يوجد ضمان للتسليم
رأس أصغر — 8 بايتلا يوجد تحكم في الازدحام
دعم البث العام والبث المتعدداحتمال ازدواجية الحزم
استقلال البيانات — بدون طوابيرحجم البيانات محدود بـ MTU

في تطبيقات الجوال، يُستخدم UDP من خلال أطر عمل مثل WebRTC، التي تضيف التحكم في الفقد ومعدل البت التكيفي ومخزن التذبذب فوق UDP. هذا يوفر فوائد السرعة دون عيوب البروتوكول المجرد.

جانب مهم آخر لـ UDP هو غياب التحكم في الازدحام. في TCP، تقوم خوارزميات Slow Start و Congestion Avoidance بتقليل سرعة الإرسال عند فقدان الحزم لتجنب ازدحام الشبكة. يفتقر UDP إلى مثل هذه الآليات، لذلك يجب على المطورين تنفيذ استراتيجيات التحكم في السرعة الخاصة بهم — على سبيل المثال، معدل البت التكيفي في مكالمات الفيديو أو تحديد المعدل في خوادم الألعاب لمنع الازدحام الزائد للشبكة.

أين يُستخدم UDP

UDP لا غنى عنه في السيناريوهات حيث تحمل زمن الوصول أهم من تحمل فقدان الحزم. دعنا نستكشف المجالات الرئيسية لاستخدام البروتوكول في تطوير الجوال والويب.

بث الصوت والفيديو

بروتوكولات RTP و RTSP، التي تعمل عبر UDP، تُستخدم لنقل تدفقات الصوت والفيديو في الوقت الفعلي. WebRTC — معيار مكالمات الفيديو في المتصفحات وتطبيقات الجوال — يستخدم UDP كوسيلة نقل رئيسية لبيانات الوسائط و TCP للإشارات. فقدان حزمة واحدة في فيديو 30 إطارًا في الثانية غير ملحوظ للمستخدم، على عكس تأخير إعادة الإرسال الذي يسبب تجمدًا ملحوظًا للصورة.

الألعاب عبر الإنترنت

تتطلب ألعاب التصويب متعددة اللاعبين و MOBA زمن وصول أقل من 50 مللي ثانية للمزامنة الصحيحة. UDP ينقل مواقع اللاعبين والطلقات والأحداث أسرع من TCP، ويتم تجاهل فقدان الحزمة ببساطة — سيصل التحديث التالي خلال 16–33 مللي ثانية. تستخدم محركات الألعاب الشهيرة، بما في ذلك Unity و Unreal Engine، UDP عبر طبقات النقل الخاصة بها مع إضافة الموثوقية للأحداث الحرجة من خلال التأكيدات على مستوى التطبيق.

DNS و DHCP

تستخدم استعلامات DNS UDP على المنفذ 53 لأن كل استعلام هو حزمة صغيرة واحدة (عادةً حتى 512 بايت). إذا لم يصل رد، يقوم العميل ببساطة بإعادة المحاولة بعد مهلة، وهو أسرع من إنشاء اتصال TCP بمصافحته ثلاثية الاتجاهات. DHCP يعمل أيضًا عبر UDP، لأن العميل ليس لديه عنوان IP بعد ولا يمكنه إنشاء اتصال TCP، بينما تسمح حزم UDP للبث العام بالعثور على خادم DHCP على الشبكة المحلية.

مقارنة UDP و TCP

الاختيار بين UDP و TCP هو مقايضة بين السرعة والموثوقية. كل بروتوكول مثالي لفئة مهامه، وفهم اختلافاتهما يساعد في اتخاذ القرارات المعمارية الصحيحة عند تصميم الاتصال الشبكي في تطبيقات الجوال.

المعيارUDPTCP
إنشاء الاتصالغير مطلوبمصافحة ثلاثية
الرأس8 بايت20–60 بايت
ضمان التسليملانعم، مع التأكيد
الترتيبلانعم
التحكم في الازدحاملانعم (AIMD، Slow Start)
حالات الاستخدامالبث، الألعاب، DNSالويب، البريد، الملفات، API

غالبًا ما تستخدم مشاريع الجوال نهجًا هجينًا: TCP للطلبات الموثوقة (المصادقة، تحميل البيانات) و UDP لتدفقات الوسائط. QUIC — بروتوكول حديث من Google يعمل عبر UDP — يجمع بين سرعة UDP وموثوقية TCP ويُستخدم بالفعل في HTTP/3.

مثال كود UDP

دعنا نلقي نظرة على خادم UDP بسيط بلغة Python يستقبل الرسائل من العملاء ويرسل ردًا. يستمع الخادم على المنفذ 8888 ويعالج البيانات الواردة في حلقة لا نهائية.

python
import socket

server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server.bind(('0.0.0.0', 8888))
print('تم بدء تشغيل خادم UDP على المنفذ 8888')

while True:
    data, addr = server.recvfrom(1024)
    print(f'تم الاستلام من {addr}: {data.decode()}')
    server.sendto(b'OK', addr)

يقوم الخادم بإنشاء مقبس UDP، ويرتبط بالمنفذ 8888، وينتظر البيانات الواردة. recvfrom يُرجع البيانات وعنوان العميل، مما يسمح بالرد عبر sendto. على عكس TCP، لا يحتفظ الخادم بحالة الاتصال — تتم معالجة كل حزمة بشكل مستقل. هذا يجعل خوادم UDP قابلة للتوسع: يمكن لخادم واحد معالجة ملايين العملاء دون تخصيص ذاكرة لكل اتصال فردي، وهو أمر مهم لخوادم DNS وأنظمة مطابقة الألعاب.

في تطوير الجوال، يُستخدم UDP غالبًا من خلال مكتبات عالية المستوى. على سبيل المثال، CocoaAsyncSocket لنظام iOS يوفر مقابس UDP مع مفوضين و GCD للمعالجة غير المتزامنة للأحداث. على Android، فئة DatagramSocket هي جزء من المكتبة القياسية java.net ولا تتطلب تبعيات إضافية. بالنسبة لـ Flutter، توجد حزمة udp التي توفر واجهة بسيطة لإرسال واستقبال البيانات دون تكوين مقابس أصلية.

من المهم ملاحظة أن العديد من الشبكات المحمولة وجدران الحماية المؤسسية تحجب حركة UDP، خاصة على المنافذ فوق 1024. إذا كان تطبيقك يستخدم UDP، يجب عليك توفير احتياطي لـ TCP أو التحقق من توفر البروتوكول عبر خوادم STUN، كما يفعل WebRTC. على iOS، إطار النظام Network.framework مع NWConnection يدعم كلاً من TCP و UDP، ويختار تلقائيًا البروتوكول الأمثل بناءً على التوفر. للتطبيقات في الوقت الفعلي، يُوصى أيضًا بتنفيذ معدل بت تكيفي يقلل جودة التدفق عند فقدان الحزم، مما يضمن تشغيلًا مستمرًا حتى على القنوات غير المستقرة مع معدلات خطأ عالية.

الأسئلة الشائعة

كيف يختلف UDP عن TCP؟

UDP لا ينشئ اتصالًا ولا يضمن تسليم الحزم، مما يجعله أسرع من TCP. رأس UDP هو 8 بايت مقابل 20–60 بايت لـ TCP. UDP مناسب للبث والألعاب، بينما TCP لطلبات الويب ونقل الملفات.

ما هي البيانات في UDP؟

البيانات هي حزمة مستقلة برأس UDP (منفذ المصدر، منفذ الوجهة، الطول، المجموع الاختباري). تتم معالجة كل حزمة بشكل مستقل، دون علاقة بالحزم السابقة. حجم البيانات محدود بـ MTU للشبكة وحسب المواصفات — حتى 65507 بايت.

كيف يتم ضمان الموثوقية عند استخدام UDP؟

UDP لا يوفر الموثوقية على مستوى النقل — يتم تنفيذها بواسطة التطبيق. يضيف المطورون أرقامًا تسلسلية ومجاميع اختبارية وطلبات إعادة إرسال وتصحيح الأخطاء. FEC (تصحيح الأخطاء الأمامي) يسمح باستعادة الحزم المفقودة دون إعادة إرسال.

متى لا يُستخدم UDP؟

UDP غير مناسب للسيناريوهات حيث سلامة البيانات حرجة: نقل الملفات، المعاملات المصرفية، REST API. في هذه الحالات، TCP يضمن وصول كل بايت بالترتيب الصحيح. لا يُوصى أيضًا بـ UDP على القنوات غير المستقرة مع معدلات فقد عالية.

ما هو QUIC وكيف يرتبط بـ UDP؟

QUIC هو بروتوكول نقل يعمل عبر UDP، طورته Google ووحدته IETF كـ RFC 9000. يجمع بين سرعة UDP وموثوقية TCP، ويدعم تعدد الإرسال دون حظر رأس الخط، ويحتوي على تشفير مدمج. HTTP/3 يستخدم QUIC كطبقة نقل له.

الملخص

  • UDP هو بروتوكول بدون اتصال مع زمن وصول أدنى ورأس 8 بايت
  • لا يضمن التسليم أو ترتيب الحزم أو الحماية من الازدواجية
  • يُستخدم في مكالمات الفيديو والألعاب عبر الإنترنت و DNS و DHCP والبث
  • اختيار UDP أو TCP يعتمد على التوازن بين السرعة والموثوقية لكل سيناريو
  • فقدان الحزم يُعوّض على مستوى التطبيق عبر FEC أو إعادة الإرسال أو التكرار
  • QUIC عبر UDP يجمع بين سرعة UDP وموثوقية TCP في بروتوكول HTTP/3
  • يجب على المطورين التحكم في حجم البيانات وتوفير احتياطي لـ TCP عند حظر UDP أو تصفيته على الشبكة

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا