نحوه محاسبه MTU

قبل از محاسبه اول بهتره بفهمیم MTU چیه و عددهاش نمایانگره چه چیزی هستش

عبارت MTU که مخفف Maximum Transmission Unit است که بزرگترین بسته یا فریمی است که می تواند از طریق شبکه ارسال شود

محاسبه MTU به فناوری شبکه خاص و پروتکل های زیربنایی مورد استفاده بستگی دارد. برای شبکه های Ethernet، اندازه استاندارد MTU 1500 بایت است که این شامل 14 بایت برای هدر اترنت، 4 بایت برای دنباله بررسی فریم (FCS) و 1500 بایت برای بار داده است

با این حال، برای سایر فناوری های شبکه مانند PPPoE (پروتکل نقطه به نقطه روی اترنت) که در DSL استفاده می شود.  برای محاسبه MTU برای یک فناوری شبکه خاص، معمولاً سربار معرفی شده توسط هدرها و سایر اطلاعات پروتکل را از حداکثر اندازه فریم یا بسته کم می کنید

توضیح اعداد به شرح زیر است

1500 بایت: حداکثر اندازه بار برای فریم های اترنت

14 بایت : اندازه هدر اترنت.

4 بایت : دنباله بررسی فریم (FCS) برای تشخیص خطا

8 بایت:  PPPoE overhead که شامل هدر PPP و  هدر اترنت برای encapsulate

اجازه بدین با مثال روشن تر کنیم

فرض کنیم mtu رو 1500 میخوایم بزاریم حالا این عدد و میشکنیم که دیتیل رو متوجه بشید

MTU = Maximum frame size - Ethernet header size - FCSMTU =

1500 bytes - 14 bytes (Ethernet header) - 4 bytes (FCS)MTU = 1482 bytes

این یعنی 1482 اندازه بار موثریه که می تواند از طریق شبکه اترنت منتقل شود
این بدان معناست که هر payload داده بزرگتر از 1482 بایت برای انتقال از طریق اترنت باید به چند فریم تقسیم یا فرگمنت شود

حالا چطور عدد مناسب پیدا کنیم

چندین متود برای این کار هست که اولین قدم استفاده از مقدار های متداول و تست شده هست

که بطور معمول 1500 هستش که مطمعن باشین هیچ فرگمنتی در payload دیتا اتفاق نمی افته

روش بعدی سعی و خطا هستش که اعداد مختلف قرار بدین و تست real انجام بدین
نباید هیچ پکت لاستی داشته باشین و همچنین هیچ فرگمنتی

متود بعدی PMTUD (path MTU discovery)
با تکیه بر پیام های ICMP (پروتکل پیام کنترل اینترنت) برای کشف حداکثر MTU در مسیر بین مبدا و مقصد کار می کند.
توضیحش طولانیه ولی بصورت خلاصه
یک پیغام با فلگ df (dont fragment) ارسال میشه و در مقصد اگر بیشتر از حد مجاز بود مینویسه
icmp "Fragmentation Needed"

✅ حالا بریم سر اصل مطلب محاسبه عملی MTU

بین 2 سرور از طریق کامند پایین میایم mtu مناسب رو پیدا میکنیم

فرض کنید ایپی 6 خارج من :
2a03:b0ih:1:3001

mtu : 1472

در سرور لوکال خودم اینجوری میزنم

ping6 -c 4 -M do -s 1472 2a03:b0ih:1:3001

اگر جواب اینچنین بود که عدد بزرگی و انتخاب کردم و 10 بایت 10 بایت کم میکنم تا به عددی برسم که بدون فرگمنت icmp echo ارسال و دریافت بشه

PING 2a03:b0ih:1:3001(2a03:b0ih:1:3001) 1472 data bytes
ping6: local error: message too long, mtu: 1500

--- 2a03:b0ih:1:3001 ping statistics ---
4 packets transmitted, 0 received, +4 errors, 100% packet loss, time 3050ms

 من پاسخ 1452 را دریافت کردم

آیا این پاسخ به شما کمک کرد؟ 1 کاربر این را مفید یافتند (2 نظرات)