تكوين وحدة الإرسال القصوى (MTU) للأجهزة الظاهرية في Azure
وحدة الإرسال القصوى (MTU) هي قياس يمثل أكبر حجم لإطار إيثرنت (حزمة) يتم إرساله بواسطة جهاز شبكة أو واجهة. إذا تجاوزت حزمة أكبر حجم يقبله الجهاز، يتم تقسيم الحزمة إلى حزم أصغر متعددة، ثم إعادة تجميعها لاحقا في الوجهة.
يمكن أن تقدم التجزئة وإعادة التجميع مشكلات في الأداء وترتيب، ما يؤدي إلى تجربة دون المستوى الأمثل. يمكن أن يوفر تحسين MTU للحل الخاص بك فوائد أداء النطاق الترددي للشبكة عن طريق تقليل العدد الإجمالي للحزم المطلوبة لإرسال مجموعة بيانات. يمكن أن يؤدي تكوين أحجام MTU الأكبر إلى تحسين معدل نقل الشبكة لأنه يقلل من عدد الحزم ونفقات الرأس المطلوبة لإرسال مجموعة بيانات.
MTU هو إعداد قابل للتكوين في نظام تشغيل الجهاز الظاهري. إعداد القيمة الافتراضية MTU في Azure هو 1500 بايت.
يمكن أن تدعم الأجهزة الظاهرية في Azure وحدة MTU أكبر من الافتراضي 1500 بايت فقط لنسبة استخدام الشبكة التي تبقى داخل الشبكة الظاهرية.
يعرض الجدول التالي أكبر حجم MTU مدعوم على واجهات شبكة Azure المتوفرة في Azure:
نظام تشغيل | واجهة الشبكة | أكبر وحدة MTU لحركة مرور الشبكة الظاهرية |
---|---|---|
Windows Server | Mellanox Cx-3, Cx-4, Cx-5 | 3900 عند تعيين قيمة MTU مع Set-NetAdapterAdvancedProperty ، استخدم القيمة 4088 .. لاستمرار عمليات إعادة التشغيل، يجب أيضا تعيين القيمة التي تم إرجاعها بواسطة Test-Connection مع Set-NetIPInterface . |
Windows Server | (معاينة) Microsoft Azure Network Adapter MANA | 9000 عند تعيين قيمة MTU مع Set-NetAdapterAdvancedProperty ، استخدم القيمة . 9014 لاستمرار عمليات إعادة التشغيل، يجب أيضا تعيين القيمة التي تم إرجاعها بواسطة Test-Connection مع Set-NetIPInterface . |
Linux | Mellanox Cx-3, Cx-4, Cx-5 | 3900 |
Linux | (معاينة) Microsoft Azure Network Adapter | 9000 |
المتطلبات الأساسية
حساب Azure مع اشتراك نشط. أنشئ حسابًا مجانًا.
جهازان ظاهريان يعملان بنظام Linux في نفس الشبكة الظاهرية في Azure. لمزيد من المعلومات حول إنشاء جهاز ظاهري Linux، راجع إنشاء جهاز Linux ظاهري في مدخل Microsoft Azure. يلزم الوصول عن بعد إلى الأجهزة الظاهرية لإكمال المقالة. لمزيد من المعلومات حول الاتصال بأجهزة Azure الظاهرية بشكل آمن، راجع ما هو Azure Bastion؟
- لأغراض هذه المقالة، تسمى الأجهزة الظاهرية vm-1 وvm-2. استبدل هذه القيم بقيمك.
أمثلة على الموارد
يتم استخدام الموارد التالية كأمثلة في هذه المقالة. استبدل هذه القيم بقيمك.
Resource | الاسم | عنوان IP |
---|---|---|
الجهاز الظاهري 1 | vm-1 | 10.0.0.4 |
الجهاز الظاهري 2 | vm-2 | 10.0.0.5 |
الاحتياطات
يمكن أن تدعم الأجهزة الظاهرية في Azure وحدة MTU أكبر من الافتراضي 1500 بايت فقط لنسبة استخدام الشبكة التي تبقى داخل الشبكة الظاهرية. لا يتم دعم وحدة MTU أكبر للسيناريوهات خارج نسبة استخدام الشبكة الظاهرية VM-to-VM. قد لا يتم دعم حركة المرور التي تعبر عبر البوابات أو التناظر أو الإنترنت. يمكن أن يؤدي تكوين وحدة MTU أكبر إلى التجزئة وتقليل الأداء. بالنسبة لنسبة استخدام هذه السيناريوهات، استخدم 1500 بايت MTU الافتراضي للاختبار للتأكد من دعم MTU أكبر عبر مسار الشبكة بأكمله.
الأمثل MTU هو نظام التشغيل والشبكة والتطبيق الخاص. قد لا يكون MTU المدعوم الأقصى هو الأمثل لحالة الاستخدام الخاصة بك.
اختبر دائما تغييرات إعدادات MTU في بيئة غير حرجة أولا قبل التطبيق على نطاق واسع أو على البيئات الحرجة.
اكتشاف وحدة MTU للمسار
من المهم فهم MTU المدعوم عبر مسار الشبكة الذي يستخدمه التطبيق أو الأجهزة. اكتشاف MTU للمسار هو وسيلة لمعرفة أكبر MTU مدعومة بين عنوان المصدر والوجهة. يؤدي استخدام MTU أكبر من المعتمد بين عنوان المصدر والوجهة إلى التجزئة، مما قد يؤثر سلبا على الأداء.
في هذه المقالة، تختبر الأمثلة المستخدمة مسار MTU بين جهازين ظاهريين. يمكن إجراء الاختبارات اللاحقة من جهاز ظاهري إلى أي وجهة قابلة للتوجيه.
استخدم الخطوات التالية لتعيين حجم MTU أكبر على جهاز ظاهري المصدر والوجهة. تحقق من المسار MTU مع برنامج نصي shell ل Linux أو PowerShell لنظام التشغيل Windows. إذا لم يكن MTU الأكبر مدعوما، فإن النتائج المعروضة في اختبار اكتشاف MTU للمسار تختلف عن الإعدادات التي تم تكوينها على واجهة الجهاز الظاهري المصدر أو الوجهة.
يتوفر البرنامج النصي shell في معرض نماذج Azure. قم بتنزيل البرنامج النصي ل Linux من الرابط التالي واحفظه في vm-1 وvm-2.
استخدم الخطوات التالية لتغيير حجم MTU على جهاز ظاهري يعمل بنظام Linux:
تسجيل الدخول إلى vm-1
ip
استخدم الأمر لإظهار واجهات الشبكة الحالية وإعدادات MTU الخاصة بها، سجل عنوان IP للخطوات اللاحقة. في هذا المثال، عنوان IP هو 10.0.0.4 وواجهة ethernet هي eth0.ip address show
azureuser@vm-1:~$ ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever 3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff altname enP46433p0s2 inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever
قم بتعيين قيمة MTU على vm-1 إلى أعلى قيمة تدعمها واجهة الشبكة. في هذا المثال، اسم واجهة الشبكة هو eth0. استبدل هذه القيمة بقيمتك.
- بالنسبة إلى محول Mellanox، استخدم المثال التالي لتعيين قيمة MTU إلى 3900:
echo '3900' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
- بالنسبة إلى Microsoft Azure Network Adapter، استخدم المثال التالي لتعيين قيمة MTU إلى 9000:
echo '9000' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
هام
لا تستمر تغييرات MTU التي تم إجراؤها في الخطوات السابقة أثناء إعادة التشغيل. لجعل التغييرات دائمة، راجع الوثائق المناسبة لتوزيع Linux الخاص بك.
ip
استخدم الأمر للتحقق من تطبيق إعدادات MTU على واجهة الشبكة:ip address show
azureuser@vm-1:~$ ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 3900 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever 3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 3900 qdisc mq master eth0 state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff altname enP46433p0s2 inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever
سجل الدخول إلى vm-2 لتكرار الخطوات السابقة لتعيين قيمة MTU إلى أعلى قيمة تدعمها واجهة الشبكة.
تسجيل الدخول إلى vm-1.
استخدم المثال التالي لتنفيذ البرنامج النصي Linux shell لاختبار أكبر حجم MTU يمكن استخدامه لمسار شبكة معين. استبدل قيمة المضيف الوجهة بعنوان IP vm-2.
./GetPathMtu.sh 10.0.0.5
الإخراج مشابه للمثال التالي. إذا لم يعرض إخراج البرنامج النصي الإعداد على واجهة الشبكة، فإنه يشير إلى أنه لم يتم تعيين حجم MTU بشكل صحيح. بدلا من ذلك، قد يعني ذلك أن جهاز الشبكة على طول المسار يدعم فقط حجم MTU الذي تم إرجاعه بواسطة البرنامج النصي GetPathMTU.
azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.5 destination: 10.0.0.5 startSendBufferSize: 1200 interfaceName: Default interface Test started .................................................................................................................................................................................................... 3900
تحقق من حجم MTU على واجهة الشبكة باستخدام
PING
. بالنسبة إلى Linux، استخدم علامات -M و-s و-c. يرشد الخيار -M ping إلى NOT fragment، ويعين -s حجم الحزمة، ويعين -c عدد عمليات ping لإرسالها. لتحديد حجم الحزمة، اطرح 28 من إعداد MTU 3900.ping 10.0.0.5 -c 10 -M do -s 3872
azureuser@vm-1:~/GetPathMTU$ ping 10.0.0.5 -c 10 -M do -s 3872 PING 10.0.0.5 (10.0.0.5) 3872(3900) bytes of data. 3880 bytes from 10.0.0.5: icmp_seq=1 ttl=64 time=3.70 ms 3880 bytes from 10.0.0.5: icmp_seq=2 ttl=64 time=1.08 ms 3880 bytes from 10.0.0.5: icmp_seq=3 ttl=64 time=1.51 ms 3880 bytes from 10.0.0.5: icmp_seq=4 ttl=64 time=1.25 ms 3880 bytes from 10.0.0.5: icmp_seq=5 ttl=64 time=1.29 ms 3880 bytes from 10.0.0.5: icmp_seq=6 ttl=64 time=1.05 ms 3880 bytes from 10.0.0.5: icmp_seq=7 ttl=64 time=5.67 ms 3880 bytes from 10.0.0.5: icmp_seq=8 ttl=64 time=1.92 ms 3880 bytes from 10.0.0.5: icmp_seq=9 ttl=64 time=2.72 ms 3880 bytes from 10.0.0.5: icmp_seq=10 ttl=64 time=1.20 ms --- 10.0.0.5 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9014ms rtt min/avg/max/mdev = 1.051/2.138/5.666/1.426 ms
تظهر إشارة إلى وجود عدم تطابق في الإعدادات بين المصدر والوجهة كرسالة خطأ في الإخراج. في هذه الحالة، لم يتم تعيين MTU على واجهة الشبكة المصدر.
azureuser@vm-1:~/GetPathMTU$ ping 10.0.0.5 -c 10 -M do -s 3872 PING 10.0.0.5 (10.0.0.5) 3872(3900) bytes of data. ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 --- 10.0.0.5 ping statistics --- 10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9248ms
تسجيل الدخول إلى vm-2.
استخدم المثال التالي لتشغيل البرنامج النصي Linux shell لاختبار أكبر حجم MTU يمكن استخدامه لمسار شبكة معين:
./GetPathMtu.sh 10.0.0.4
الإخراج مشابه للمثال التالي. إذا لم يعرض إخراج البرنامج النصي الإعداد على واجهة الشبكة، فإنه يشير إلى أنه لم يتم تعيين حجم MTU بشكل صحيح. بدلا من ذلك، قد يعني ذلك أن جهاز الشبكة على طول المسار يدعم فقط حجم MTU الذي تم إرجاعه بواسطة البرنامج النصي GetPathMTU.
azureuser@vm-1:~/GetPathMTU$ ./GetPathMtu.sh 10.0.0.4 destination: 10.0.0.4 startSendBufferSize: 1200 interfaceName: Default interface Test started .................................................................................................................................................................................................... 3900
تحقق من حجم MTU على واجهة الشبكة باستخدام
PING
. بالنسبة إلى Linux، استخدم علامات -M و-s و-c. يرشد الخيار -M ping إلى NOT fragment، ويعين -s حجم الحزمة، ويعين -c عدد عمليات ping لإرسالها. لتحديد حجم الحزمة، اطرح 28 من إعداد MTU 3900.ping 10.0.0.4 -c 10 -M do -s 3872
azureuser@vm-2:~/GetPathMTU$ ping 10.0.0.4 -c 10 -M do -s 3872 PING 10.0.0.4 (10.0.0.4) 3872(3900) bytes of data. 3880 bytes from 10.0.0.4: icmp_seq=1 ttl=64 time=3.70 ms 3880 bytes from 10.0.0.4: icmp_seq=2 ttl=64 time=1.08 ms 3880 bytes from 10.0.0.4: icmp_seq=3 ttl=64 time=1.51 ms 3880 bytes from 10.0.0.4: icmp_seq=4 ttl=64 time=1.25 ms 3880 bytes from 10.0.0.4: icmp_seq=5 ttl=64 time=1.29 ms 3880 bytes from 10.0.0.4: icmp_seq=6 ttl=64 time=1.05 ms 3880 bytes from 10.0.0.4: icmp_seq=7 ttl=64 time=5.67 ms 3880 bytes from 10.0.0.4: icmp_seq=8 ttl=64 time=1.92 ms 3880 bytes from 10.0.0.4: icmp_seq=9 ttl=64 time=2.72 ms 3880 bytes from 10.0.0.4: icmp_seq=10 ttl=64 time=1.20 ms --- 10.0.0.4 ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9014ms rtt min/avg/max/mdev = 1.051/2.138/5.666/1.426 ms
تظهر إشارة إلى وجود عدم تطابق في الإعدادات بين المصدر والوجهة كرسالة خطأ في الإخراج. في هذه الحالة، لم يتم تعيين MTU على واجهة الشبكة المصدر.
azureuser@vm-2:~/GetPathMTU$ ping 10.0.0.4 -c 10 -M do -s 3872 PING 10.0.0.4 (10.0.0.4) 3872(3900) bytes of data. ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 ping: local error: message too long, mtu=1500 --- 10.0.0.4 ping statistics --- 10 packets transmitted, 0 received, +10 errors, 100% packet loss, time 9248ms
إرجاع التغييرات
للعودة إلى التغييرات التي تم إجراؤها في هذه المقالة، استخدم الخطوات التالية:
تسجيل الدخول إلى vm-1.
استخدم المثال التالي لتعيين قيمة MTU إلى القيمة الافتراضية 1500:
echo '1500' | sudo tee /sys/class/net/eth0/mtu || echo "failed: $?"
هام
لا تستمر تغييرات MTU التي تم إجراؤها في الخطوات السابقة أثناء إعادة التشغيل. لجعل التغييرات دائمة، راجع الوثائق المناسبة لتوزيع Linux الخاص بك.
ip
استخدم الأمر للتحقق من تطبيق إعدادات MTU على واجهة الشبكة:ip address show
azureuser@vm-1:~$ ip address show 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff inet 10.0.0.4/24 metric 100 brd 10.0.0.255 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever 3: enP46433s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master eth0 state UP group default qlen 1000 link/ether 00:0d:3a:c5:f3:14 brd ff:ff:ff:ff:ff:ff altname enP46433p0s2 inet6 fe80::20d:3aff:fec5:f314/64 scope link valid_lft forever preferred_lft forever
تسجيل الدخول إلى vm-2 لتكرار الخطوات السابقة لتعيين قيمة MTU إلى القيمة الافتراضية 1500.
المحتوى ذو الصلة
- نظرة عامة على Microsoft Azure Network Adapter (MANA).