نحوه محاسبه 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 را دریافت کردم