UDP (User Datagram Protocol) ایک بغیر کنکشن ڈیٹا ٹرانسمیشن پروٹوکول ہے جو IP پر کام کرتا ہے اور ڈیٹاگرام بھیجتے وقت کم سے کم تاخیر فراہم کرتا ہے۔ TCP کے برعکس، UDP ترسیل، پیکٹ کی ترتیب یا نقل سے تحفظ کی ضمانت نہیں دیتا۔ IETF RFC 768 (2024) کے مطابق، UDP ویڈیو کالز، اسٹریمنگ اور DNS استفسارات کی وجہ سے عالمی انٹرنیٹ ٹریفک کے 40% سے زیادہ کو ہینڈل کرتا ہے۔
اہم نکات
UDP (User Datagram Protocol) TCP/IP ماڈل کی ٹرانسپورٹ لیئر کے اہم پروٹوکولز میں سے ایک ہے، جسے David Reed نے 1980 میں ڈیزائن کیا تھا۔ یہ ڈیٹا ٹرانسمیشن کا کم سے کم میکانزم فراہم کرتا ہے: ایپلیکیشن ایک ڈیٹاگرام بھیجتی ہے، اور پروٹوکول یہ ٹریک نہیں کرتا کہ یہ وصول کنندہ تک پہنچا یا نہیں۔
UDP ہیڈر صرف چار فیلڈز پر مشتمل ہوتا ہے: ماخذ پورٹ، منزل پورٹ، لمبائی اور چیکسم۔ ہر فیلڈ 2 بائٹس لیتا ہے، لہٰذا ہیڈر کا کل سائز 8 بائٹس ہے۔ موازنہ کے لیے، اختیارات کے بغیر TCP ہیڈر 20 بائٹس اور اختیارات کے ساتھ 60 بائٹس تک ہوتا ہے۔
پروٹوکول اپنی سطح پر فریگمنٹیشن کو سپورٹ نہیں کرتا — اگر کوئی ڈیٹاگرام MTU (Maximum Transmission Unit) سے تجاوز کرتا ہے، تو یہ IP سطح پر فریگمنٹ ہو جاتا ہے۔ اگر ایک فریگمنٹ کھو جاتا ہے، تو پورا ڈیٹاگرام مسترد کر دیا جاتا ہے، کیونکہ UDP انفرادی فریگمنٹس کی دوبارہ ترسیل کی درخواست نہیں کر سکتا۔ ڈویلپرز کو ڈیٹاگرام کے سائز کو کنٹرول کرنا چاہیے — موبائل نیٹ ورکس کے لیے، MTU اکثر 1400 بائٹس ہوتا ہے، لہٰذا زیادہ سے زیادہ سائز اس قدر سے تجاوز نہیں کرنا چاہیے۔
UDP استعمال کرنے والی ایپلیکیشن SOCK_DGRAM قسم کا ساکٹ بناتی ہے، پورٹ اور منزل IP ایڈریس بتاتی ہے، اور ایک ڈیٹاگرام بھیجتی ہے۔ پروٹوکول کم سے کم ہیڈر شامل کرتا ہے اور پیکٹ کو IP لیئر پر منتقل کرتا ہے۔ وصول کنندہ اپنے پورٹ پر سنتا ہے اور آنے والے ڈیٹاگرامس سے ڈیٹا نکالتا ہے۔
UDP بھیڑ کنٹرول نہیں کرتا — ایپلیکیشن نیٹ ورک کی معاون زیادہ سے زیادہ رفتار پر ڈیٹاگرام بھیج سکتی ہے۔ یہ چینل کی بھیڑ کا سبب بن سکتا ہے، لیکن ریئل ٹائم منظرناموں میں اس طرح کی جارحیت جائز ہے: ویڈیو کال کے لیے، ممکنہ نقصان کے ساتھ ڈیٹا اسٹریم ٹرانسمیشن روکنے سے زیادہ اہم ہے۔
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(b'Hello, UDP!', ('192.168.1.100', 8888))
sock.close()
اس مثال میں، UDP کے لیے ایک SOCK_DGRAM ساکٹ بنایا گیا ہے۔ sendto طریقہ کنکشن قائم کیے بغیر ڈیٹاگرام بھیجتا ہے — صرف وصول کنندہ کا IP اور پورٹ جاننا کافی ہے۔ سرور کی طرف recvfrom طریقہ جواب کے لیے ڈیٹا اور بھیجنے والے کا پتہ دونوں لوٹاتا ہے۔ موبائل پلیٹ فارمز پر UDP ساکٹ اسی طرح ترتیب دیئے جاتے ہیں لیکن اضافی اجازتوں کی ضرورت ہوتی ہے: iOS پر، غیر خفیہ کردہ UDP کنکشنز کے لیے NSAppTransportSecurity شامل کرنا ہوگا، اور Android پر، مینی فیسٹ میں INTERNET اجازت۔
UDP کا انتخاب ان منظرناموں میں جائز ہے جہاں رفتار اعتبار سے زیادہ اہم ہو۔ پروٹوکول کنکشن قائم کرنے، تصدیقات اور دوبارہ ترسیل پر وقت ضائع نہیں کرتا — یہ کم سے کم تاخیر فراہم کرتا ہے، لیکن ڈویلپر کو نقصان کو آزادانہ طور پر ہینڈل کرنے کی ضرورت ہوتی ہے۔
| فوائد | نقصانات |
|---|---|
| کم تاخیر — کوئی مصافحہ نہیں | ترسیل کی کوئی ضمانت نہیں |
| چھوٹا ہیڈر — 8 بائٹس | کوئی بھیڑ کنٹرول نہیں |
| براڈکاسٹ اور ملٹی کاسٹ سپورٹ | ممکنہ پیکٹ ڈپلیکیٹس |
| ڈیٹاگرام آزادی — کوئی قطار نہیں | ڈیٹاگرام کا سائز MTU سے محدود |
موبائل ایپلیکیشنز میں، UDP WebRTC جیسے فریم ورکس کے ذریعے استعمال ہوتا ہے، جو UDP کے اوپر نقصان کنٹرول، انکولی بٹریٹ اور جٹر بفر شامل کرتے ہیں۔ یہ خالی پروٹوکول کی خامیوں کے بغیر رفتار کے فوائد فراہم کرتا ہے۔
UDP کا ایک اور اہم پہلو بھیڑ کنٹرول کی عدم موجودگی ہے۔ TCP میں، Slow Start اور Congestion Avoidance الگورتھم نیٹ ورک اوورلوڈ سے بچنے کے لیے پیکٹ کے نقصان پر ٹرانسمیشن کی رفتار کم کر دیتے ہیں۔ UDP میں اس طرح کے میکانزم نہیں ہیں، لہٰذا ڈویلپرز کو اپنی شرح کنٹرول حکمت عملیوں کو نافذ کرنا چاہیے — مثال کے طور پر، ویڈیو کالز میں انکولی بٹریٹ یا گیم سرورز میں ضرورت سے زیادہ نیٹ ورک بھیڑ کو روکنے کے لیے ریٹ لمیٹنگ۔
UDP ان منظرناموں میں ناگزیر ہے جہاں تاخیر کی رواداری پیکٹ نقصان کی رواداری سے زیادہ اہم ہو۔ آئیے موبائل اور ویب ڈویلپمنٹ میں پروٹوکول کے اہم اطلاقی علاقوں کو دریافت کریں۔
RTP اور RTSP پروٹوکول، جو UDP پر چلتے ہیں، ریئل ٹائم آڈیو اور ویڈیو اسٹریمز کی ترسیل کے لیے استعمال ہوتے ہیں۔ WebRTC — براؤزرز اور موبائل ایپلیکیشنز میں ویڈیو کالز کا معیار — میڈیا ڈیٹا کے لیے بنیادی ٹرانسپورٹ کے طور پر UDP اور سگنلنگ کے لیے TCP استعمال کرتا ہے۔ 30 fps ویڈیو میں ایک پیکٹ کھونا صارف کے لیے ناقابل توجہ ہے، دوبارہ ترسیل کی تاخیر کے برعکس جو تصویر کے نمایاں جماؤ کا سبب بنتی ہے۔
ملٹی پلیئر شوٹرز اور MOBA کو مناسب ہم آہنگی کے لیے 50 ms سے کم تاخیر درکار ہوتی ہے۔ UDP کھلاڑیوں کی پوزیشنیں، شاٹس اور واقعات TCP سے تیزی سے منتقل کرتا ہے، اور پیکٹ کا نقصان simply نظر انداز کر دیا جاتا ہے — اگلی اپ ڈیٹ 16–33 ms میں آ جائے گی۔ مشہور گیم انجن، جن میں Unity اور Unreal Engine شامل ہیں، ایپلیکیشن لیول کی تصدیقات کے ذریعے اہم واقعات کے لیے اضافی اعتبار کے ساتھ اپنی ٹرانسپورٹ لیئرز کے ذریعے UDP استعمال کرتے ہیں۔
DNS استفسارات پورٹ 53 پر UDP استعمال کرتی ہیں کیونکہ ہر استفسار ایک چھوٹا ڈیٹاگرام (عام طور پر 512 بائٹس تک) ہوتا ہے۔ اگر کوئی جواب نہیں آتا، تو کلائنٹ ٹائم آؤٹ کے بعد استفسار دوبارہ کرتا ہے، جو تین طرفہ مصافحہ کے ساتھ TCP کنکشن قائم کرنے سے تیز ہے۔ DHCP بھی UDP پر کام کرتا ہے، کیونکہ کلائنٹ کے پاس ابھی IP ایڈریس نہیں ہوتا اور وہ TCP کنکشن قائم نہیں کر سکتا، جبکہ براڈکاسٹ UDP پیکٹ مقامی نیٹ ورک پر DHCP سرور تلاش کرنے کی اجازت دیتے ہیں۔
UDP اور TCP کے درمیان انتخاب رفتار اور اعتبار کے درمیان ایک سمجھوتہ ہے۔ ہر پروٹوکول اپنی کام کی کلاس کے لیے بہترین ہے، اور ان کے فرق کو سمجھنا موبائل ایپلیکیشنز میں نیٹ ورک کمیونیکیشن ڈیزائن کرتے وقت صحیح آرکیٹیکچرل فیصلے لینے میں مدد کرتا ہے۔
| معیار | UDP | TCP |
|---|---|---|
| کنکشن قیام | ضروری نہیں | تین طرفہ مصافحہ |
| ہیڈر | 8 بائٹس | 20–60 بائٹس |
| ترسیل کی ضمانت | نہیں | ہاں، تصدیق کے ساتھ |
| ترتیب | نہیں | ہاں |
| بھیڑ کنٹرول | نہیں | ہاں (AIMD، Slow Start) |
| استعمال کے معاملات | اسٹریمنگ، گیمز، DNS | ویب، ای میل، فائلیں، API |
موبائل پروجیکٹس اکثر ہائبرڈ طریقہ کار استعمال کرتے ہیں: قابل اعتماد درخواستوں (تصدیق، ڈیٹا لوڈنگ) کے لیے TCP اور میڈیا اسٹریمز کے لیے UDP۔ QUIC — UDP پر چلنے والا Google کا جدید پروٹوکول — UDP کی رفتار کو TCP کے اعتبار کے ساتھ جوڑتا ہے اور پہلے سے HTTP/3 میں استعمال ہو رہا ہے۔
آئیے Python میں ایک سادہ UDP سرور دیکھتے ہیں جو کلائنٹس سے پیغامات وصول کرتا ہے اور جواب بھیجتا ہے۔ سرور پورٹ 8888 پر سنتا ہے اور آنے والے ڈیٹاگرامس کو لامتناہی لوپ میں پروسیس کرتا ہے۔
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 اکثر اعلیٰ سطحی لائبریریوں کے ذریعے استعمال ہوتا ہے۔ مثال کے طور پر، iOS کے لیے CocoaAsyncSocket غیر متوقع واقعہ ہینڈلنگ کے لیے ڈیلیگیٹس اور GCD کے ساتھ UDP ساکٹ فراہم کرتا ہے۔ Android پر، DatagramSocket کلاس معیاری java.net لائبریری کا حصہ ہے اور اسے اضافی انحصار کی ضرورت نہیں ہے۔ Flutter کے لیے، udp پیکیج ہے جو نیٹیو ساکٹ ترتیب دیے بغیر ڈیٹاگرام بھیجنے اور وصول کرنے کے لیے ایک سادہ انٹرفیس فراہم کرتا ہے۔
یہ نوٹ کرنا اہم ہے کہ بہت سے موبائل نیٹ ورکس اور کارپوریٹ فائر والز UDP ٹریفک کو بلاک کرتے ہیں، خاص طور پر 1024 سے اوپر کے پورٹس پر۔ اگر آپ کی ایپلیکیشن UDP استعمال کرتی ہے، تو آپ کو TCP پر فال بیک فراہم کرنا ہوگا یا STUN سرورز کے ذریعے پروٹوکول کی دستیابی چیک کرنی ہوگی، جیسا کہ WebRTC کرتا ہے۔ iOS پر، سسٹم Network.framework NWConnection کے ساتھ TCP اور UDP دونوں کو سپورٹ کرتا ہے، دستیابی کی بنیاد پر خود بخود بہترین پروٹوکول کا انتخاب کرتا ہے۔ ریئل ٹائم ایپلیکیشنز کے لیے، انکولی بٹریٹ کو نافذ کرنے کی بھی سفارش کی جاتی ہے، جو پیکٹ کے نقصان پر اسٹریم کے معیار کو کم کرتا ہے، اعلیٰ غلطی کی شرح والے غیر مستحکم چینلز پر بھی مسلسل پلے بیک کو یقینی بناتا ہے۔
اکثر پوچھے گئے سوالات
UDP کنکشن قائم نہیں کرتا اور پیکٹ کی ترسیل کی ضمانت نہیں دیتا، جو اسے TCP سے تیز بناتا ہے۔ UDP ہیڈر 8 بائٹس ہے جبکہ TCP 20–60 بائٹس ہے۔ UDP اسٹریمنگ اور گیمز کے لیے موزوں ہے، جبکہ TCP ویب درخواستوں اور فائل ٹرانسفر کے لیے ہے۔
ڈیٹاگرام UDP ہیڈر (ماخذ پورٹ، منزل پورٹ، لمبائی، چیکسم) کے ساتھ ایک آزاد ڈیٹا پیکٹ ہے۔ ہر ڈیٹاگرام پچھلے سے تعلق کے بغیر آزادانہ طور پر پروسیس کیا جاتا ہے۔ ڈیٹاگرام کا سائز نیٹ ورک MTU سے محدود ہے اور تفصیلات کے مطابق 65507 بائٹس تک ہے۔
UDP ٹرانسپورٹ لیول پر اعتبار فراہم نہیں کرتا — یہ ایپلیکیشن کے ذریعے نافذ کیا جاتا ہے۔ ڈویلپرز ترتیب نمبر، چیکسم، دوبارہ ترسیل کی درخواستیں اور غلطی کی اصلاح شامل کرتے ہیں۔ FEC (Forward Error Correction) دوبارہ ترسیل کے بغیر کھوئے ہوئے پیکٹس کو بحال کرنے کی اجازت دیتا ہے۔
UDP ان منظرناموں کے لیے موزوں نہیں ہے جہاں ڈیٹا کی سالمیت اہم ہو: فائل ٹرانسفر، بینک لین دین، REST API۔ ان صورتوں میں، TCP اس بات کی ضمانت دیتا ہے کہ ہر بائٹ صحیح ترتیب میں پہنچے۔ زیادہ نقصان کی شرح والے غیر مستحکم چینلز پر بھی UDP کی سفارش نہیں کی جاتی۔
QUIC ایک ٹرانسپورٹ پروٹوکول ہے جو UDP پر چلتا ہے، جسے Google نے تیار کیا اور IETF نے RFC 9000 کے طور پر معیاری بنایا۔ یہ UDP کی رفتار کو TCP کے اعتبار کے ساتھ جوڑتا ہے، ہیڈ آف لائن بلاک کیے بغیر ملٹی پلیکسنگ کو سپورٹ کرتا ہے، اور بلٹ ان انکرپشن رکھتا ہے۔ HTTP/3 اپنی ٹرانسپورٹ لیئر کے طور پر QUIC استعمال کرتا ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں