الدرس 22: مخططات بيانات UDP — sendto و recvfrom
على عكس TCP، لا يُنشئ UDP (User Datagram Protocol) اتصالاً، ولا يضمن الترتيب، ولا يضمن التسليم. يبدو هذا وكأنه عيب — لكن بسبب ذلك تحديداً يكون UDP أسرع وأبسط، وملائماً للسيناريوهات التي يمكنك فيها تحمّل فقدان packet واحد لكن لا يمكنك دفع تكلفة TCP handshake و ACK. في NVIDIA، غالباً ما تُرسل مقاييس G
UDP يشبه إرسال بطاقة بريدية: تكتب العنوان، وتضعها في الصندوق — وانتهى الأمر، دون تأكيد وصولها ودون معرفة ما إذا كانت بطاقة أخرى قد سبقتها. أما TCP فهو بالمقابل طرد متتبَّع مع تأكيد بالتوقيع وتأمين. بالنسبة لمقاييس GPU التي تُرسل كل ثانية، تكفي بطاقة بريدية رخيصة وسريعة تماماً.
- UDP
- بروتوكول نقل connectionless. يُرسل datagrams دون إنشاء اتصال، ودون ضمان الترتيب أو التسليم. أسرع وأبسط من TCP.
- sendto()
- يُرسل datagram من نوع UDP إلى عنوان وجهة يُحدَّد في كل استدعاء. على عكس send()، لا يلزم وجود اتصال مسبق.
- recvfrom()
- يستقبل datagram من نوع UDP ويُعيد البيانات وعنوان المُرسِل معاً. يتيح إرسال رد إلى المُرسِل المحدد.
- datagram
- وحدة بيانات مستقلة في UDP. يحتوي كل datagram على عنوان المصدر وعنوان الوجهة والبيانات. وهو مستقل عن الـ datagrams السابقة أو اللاحقة.
- connectionless
- نموذج تواصل تكون فيه كل رسالة مستقلة ولا توجد عملية إنشاء اتصال (handshake). UDP هو connectionless؛ و TCP هو connection-oriented.