كيف يمكنني العثور على أكبر حزمة UDP يمكنني إرسالها دون تجزئة؟

StackOverflow https://stackoverflow.com/questions/900697

  •  23-08-2019
  •  | 
  •  

سؤال

أريد أن أعرف ما هي أكبر حزمة UDP يمكنني إرسالها إلى كمبيوتر آخر بدون تجزئة.

يُعرف هذا الحجم عادةً باسم MTU (وحدة النقل القصوى).من المفترض، بين جهازي كمبيوتر، سيكون هناك العديد من أجهزة التوجيه وأجهزة المودم التي قد تحتوي على وحدات MTU مختلفة.

قرأت أن تطبيق TCP في Windows يعثر تلقائيًا على الحد الأقصى لوحدة الإرسال الكبرى في المسار.

لقد قمت أيضًا بالتجربة، واكتشفت أن الحد الأقصى لوحدة الإرسال الكبرى (MTU) من جهاز الكمبيوتر الخاص بي إلى الخادم هو 57712 بايت + رأس.تم التخلص من أي شيء فوق ذلك.جهاز الكمبيوتر الخاص بي متصل بشبكة LAN، أليس من المفترض أن يبلغ حجم وحدة الإرسال الكبرى (MTU) حوالي 1500 بايت؟

هل كانت مفيدة؟

المحلول

التالي لا يجيب على سؤالك مباشرة ولكن قد تجد أنه مثير للاهتمام؛ تقول أن حزم الملكية الفكرية يمكن تفكيكها / إعادة تجميعها، وبالتالي أكبر من الحد من الوسائط التقليدية (مثل إيثرنت 1500 بايت): حل تجزئة IP، MTU، MSS، ومشكلات PMTUD مع GRE و IPSec


المزيد حول هذا الموضوع:

لا أعرف عن توليد ICMP عبر واجهة برمجة تطبيقات على نظام التشغيل Windows: في وقت واحد، تم اقتراح مثل هذا API، وكان مثيرا للجدل لأن الناس جادلون من شأنه أن يكتب البرامج التي تنفذ وظائف الرفض من خلال توليد طوفان رسائل ICMP.

لا، يبدو الأمر كذلك يكون نفذ: انظر على سبيل المثال أسئلة وأجوبة Winsock Programmer أمثلة: Ping: طريقة المقابس الخام.

لذلك، لاكتشاف MTU، وتوليد حزم بينغ مع العلم "لا جزء".

ربما هناك API أسهل من هذا، وأنا لا أعرف؛ لكنني آمل أن أعطيتك لفهم البروتوكول الأساسي [S].

نصائح أخرى

بالإضافة إلى جميع الإجابات السابقة، نقلا عن الكلاسيكية:

IPV4 و IPV6 حدد الحد الأدنى لحجم المخزن المؤقت, ، يجب أن يدعم الحد الأدنى لحجم مخطط البيانات الذي نضمنه أي تنفيذ. للحصول على IPv4، هذا هو 576 بايت. IPv6 يرفع هذا إلى 1،280 بايت.


هذا يعني أن هذا يعني أن تحد حجم مخطط البيانات مخطط البيانات الخاص بك إلى أقل من 576 إذا كنت تعمل عبر الإنترنت العام وأنت تتحكم في جانب واحد فقط من البورصة - هذا ما تفعله معظم البروتوكولات المستندة إلى UDP القياسية.

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

هذا موضوع مثير للاهتمام بالنسبة لي.ربما تكون بعض النتائج العملية ذات أهمية عند تسليم بيانات UDP مكتنزة حول الإنترنت في العالم الحقيقي عبر UDP، ومع معدل نقل يبلغ حزمة واحدة في الثانية، تستمر البيانات في الظهور مع الحد الأدنى من فقدان الحزمة حتى حوالي 2 كيلو بايت.بعد ذلك، تبدأ في مواجهة المشكلات، ولكننا نقوم بانتظام بتسليم أكثر من 1600 حزمة بايت دون أي ضائقة - وهذا عبر شبكات الهاتف المحمول GPRS بالإضافة إلى شبكة WAN في جميع أنحاء العالم.عند ~ 1K بافتراض أن الإشارة مستقرة (ليست كذلك!) فإنك تحصل على خسارة منخفضة في الحزمة.

ومن المثير للاهتمام أنها ليست الحزمة الفردية، ولكنها غالبًا ما تكون عبارة عن مجموعة من الحزم لبضع ثوانٍ - وهو ما يُفترض أنه سبب انهيار مكالمات VoIP من حين لآخر.

MTU الخاص بك متاح في التسجيل, ، ولكن MTU في الممارسة العملية يذهب إلى أصغر mtu في المسار بين جهازك والوجهة. في حد سواء المتغير ويمكن تحديده فقط تجريبيا. هناك عدد من RFCS. إظهار كيفية تحديد ذلك.

يمكن لشبكة LAN داخليا قيم MTU كبيرة جدا، نظرا لأن أجهزة الشبكة متجانسة عادة أو إدارتها مركزيا على الأقل.

للحصول على تطبيقات UDP، يجب عليك التعامل مع MTU المنتهي إلى النهاية بنفسك إذا كنت ترغب في تجنب تجزئة IP أو حزم إسقاطها. النهج الموصى به لأي تطبيق هو بذل قصارى جهدك لاستخدام PMTU لاختيار الحد الأقصى لمعلومات البيانات الخاصة بك، أو إرسال مخططات البيانات <الحد الأدنى PMTU

https://tools.ietf.org/html/rfc5405#sction-3.2.

إرشادات استخدام UNICAST UDP لمصممي التطبيقات "يجب ألا ترسل مخططات البيانات التي تتجاوز PMTU، في حالة اكتشاف PMTU أو إرسال مخططات البيانات <الحد الأدنى PMTU

يظهر Windows الإعدادات والوصول إلى معلومات PMTU عبر واجهة خيارات المقبس الأساسية

يمكنك التأكد من اكتشاف PMTU قيد التشغيل عبر IP_MTU_DISCOVER، ويمكنك قراءة MTU عبر IP_MTU.

https://docs.microsoft.com/en-us/windows/desktop/winsock/ipproto-ip-socket-options.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top