حداکثر واحد انتقال (Maximum Transmission Unit)، به اندازه بزرگترین پکت دادهای گفته میشود که یک دستگاه متصل به اینترنت میتواند دریافت کند. دقیقا میتوان آن را به حد مجاز ارتفاع زیرگذر آزادراهها یا تونلها تشبیه نمود.
ماشینها و کامیونهایی که ارتفاع آنها خیلی زیاد است، نمیتوانند وارد تونل یا زیرگذر شوند. به همین ترتیب میتوان گفت پکتهایی که اندازهی آنها بیشتر از MTU مربوط به شبکه باشد، قادر به انتقال در آن شبکه نمیباشند.
هرچند که پکتهایی که اندازهی آنها بیش از MTU باشد، به قسمتهای کوچکتر تقسیم شده به طوری که قادر به عبور از شبکه باشند. این فرایند تحت عنوان Fragmentation (تکه تکه شدن) نامیده میشود. پکتهای قطعه قطعه شده زمانی که به مقصد خود میرسند، مجددا به هم متصل میشوند.
واحد اندازهگیری MTU، بایت است. یک بایت معادل 8 بیت اطلاعات یعنی 8 عدد صفر و یک است. حداکثر اندازهی MTU برابر با 1500 بایت میباشد.
پکت دادهها چیست؟
تمامی دادههای ارسال شده در اینترنت به قطعات کوچکتری تحت عنوان پکت تقسیم میشوند. به عنوان مثال، زمانی که یک صفحهی وب از سرور به لپ تاپ کاربر ارسال میشود، دادههای تشکیل دهندهی صفحه وب به صورت مجموعهای از پکتها، از طریق اینترنت منتقل میگردند. سپس این پکتها توسط لپ تاپ، به هم متصل شده و صفحه وب را نمایش میدهند.
پکت دادهها دارای دو بخش اصلی است: header و payload. بخش header شامل اطلاعاتی در مورد آدرس مبدا و مقصد پکت میباشد و قسمت payload حاوی محتوای واقعی پکت است.
اگر به یک بستهی پستی تشبیه کنیم، آدرس روی بسته header نام دارد و خود بسته payload. البته پکتهای ارسالی در دنیای اینترنت، دارای چندین header هستند که توسط پروتکلهای مختلف شبکه، ضمیمه شدهاند.
MTU تقریبا همیشه در ارجاع به لایه 3 (لایه شبکه) پکتها مورد استفاده قرار میگیرد یا پکتهایی که از IP (پروتکل اینترنت) استفاده میکنند. MTU پکتها را به صورت کلی اندازهگیری مینماید، یعنی تمامی header ها و payloadها که شامل IP header و TCP header میباشند که به طور معمول طول آنها تا 40 بایت میتواند باشد.
چه زمانی پکتها به صورت تکه تکه (Fragmented) در میآیند؟
زمانی که دو دستگاه محاسباتی با یکدیگر ارتباط برقرار نموده و اقدام به تبادل پکتها میکنند، این پکتها از چندین شبکه عبور میکنند. قابل ذکر است نه تنها MTU مربوط به این دو دستگاه باید در نظر گرفته شود، بلکه MTU تمامی روترها، سوییچها و سرورهایی که در مسیر عبور آنها قرار دارند نیز میبایست در نظر گرفته شوند.
پکتهایی فراتر از MTU هر نقطهی موجود در مسیر انتقال باشند، میبایست به صورت Fragmented (تکه تکه شده) درآیند.
فرض کنید سرور A و کامپیوتر A به هم متصل شدهاند، اما پکت دادههایی که آنها برای یکدیگر ارسال میکنند مجبور هستند از روتر B و روتر C عبور کنند. MTU مربوط به سرور A، کامپیوتر A و روتر B همگی معادل 1500 بایت است و MTU روتر C برابر با 1400 بایت میباشد.
در صورتی که سرور A و کامپیوتر A از MTU روتر C مطلع نباشند و پکتی معادل 1500 بایت ارسال کنند، تمامی پکتهای دادهی آنها توسط روتر B به هنگام انتقال به صورت تکه تکه (Fragmented) در میآیند.
Fragmentation (تکه تکه شدن دادهها) منجر به ایجاد کمی زمان تاخیر و همچنین ناکارآمدی در ارتباطات شبکه میگردد، بنابراین تا حد امکان میبایست از آن اجتناب کرد. تجهیزات منسوخ شده شبکه ممکن است در برابر حملات DDoS که از Fragmentation سوء استفاده میکنند، آسیبپذیر باشند.
Fragmentation (تکه تکه شدن دادهها) به چه صورت اتفاق میافتد؟
تمامی روترهای شبکه، اندازه هر IP packet دریافتی را با MTU مربوط به روتر بعدی که قرار است پکت را دریافت کند، بررسی مینمایند. چنانچه اندازهی پکت بیشتر از MTU روتر بعدی باشد، اولین کاری که روتر انجام میدهد این است که payload (محتوای اصلی پکت) را به دو یا چند پکت تقسیم نموده و به هر یک header مخصوص به خود را اختصاص میدهد.
هر پکت دارای هدری است که از پکت اصلی کپی شده؛ به طوری که تمامی پکتها دارای آدرس IP مبدا و مقصد یکسان و همچنین به همراه تغییرات مهم میباشند.
روتر اقدام به ویرایش فیلدهای خاصی در IP header مینماید تا نشان دهد پکتها به صورت تکه تکه (Fragmented) در آمدهاند و میبایست مجددا به هم متصل شوند. در ضمن با این ویرایش تعداد پکتها و همچنین ترتیب قرارگیری آنها نیز نشان داده میشود.
تصور کنید یک شرکت حمل و نقل در حال مدیریت بستهای است که حمل بار با اضافه وزن، یکی از امکانات آن شرکت میباشد. این شرکت حمل و نقل به جای عدم پذیرش یک بسته با وزن زیاد، محتویات آن را به سه بسته کوچکتر تقسیم میکند.
قدم بعدی این است که برچسب حمل و نقل آن بسته را کپی کرده و بر روی هر یک از سه بسته ضمیمه میکند. این برچسب نشان میدهد که یک بسته از یک مجموعه است و میبایست همه آنها با هم برسند. آنها را شمارهگذاری کرده: بسته یک از سه، بسته دو از سه و بسته سه از سه. البته چنین اتفاقی به دلیل نقض حریم خصوصی در دنیای واقعی رخ نمیدهد.
چه زمانی Fragmentation امکان پذیر نیست؟
در برخی موارد خاص پکتها را نمیتوان به قطعات کوچکتر تقسیم نمود. در این صورت اگر آنها بیشتر از MTU روتر و یا هر دستگاه دیگری که در مسیر انتقال قرار دارد باشند، پکت مورد نظر تحویل داده نخواهد شد.
- Fragmentation در IPV6 مجاز نیست. IPV6 آخرین نسخهی پروتکل اینترنت است؛ هرچند IPV4 هنوز به صورت گسترده مورد استفاده قرار میگیرد. روترهایی که از IPV6 پشتیبانی میکنند، هر پکت IPV6 که بیش از MTU باشد را رها نموده و آن را ارسال نمیکنند، زیرا قادر به Fragmentation نیستند.
- گاهی اوقات بر روی پکت IP header نشانهی “Dont Fragment” مشاهده میشود که در این صورت نیز تکه تکه کردن مجاز نیست.
نشانهی Don’t Fragment در IP header چیست؟
در اینجا IP header را به فرمی تشبیه میکنیم که مشتریان به هنگام درخواست ارسال یک بسته از شرکت حمل و نقل پر میکنند. این فرم اطلاعاتی نظیر آدرس مبدا، آدرس مقصد، زمان تحویل بسته و سایر دستورالعملهای خاص را به کارمندان شرکت حمل و نقل میدهد.
نشانهی Don’t Fragment یک دستورالعمل خاص برای روترها میباشد. در حقیقت گزینهای است که در فرم IP header توسط مشتری انتخاب شده است. زمانی که این گزینه انتخاب میشود پکت ضمیمه را نمیتوان به قسمتهای کوچکتر تقسیم نمود.
هر روتری که پکتی دریافت میکند، اقدام به تجزیه و تحلیل هدر آن نموده و بررسی میکند که آیا گزینه “Don’t Fragment” فعال شده است یا خیر. چنانچه این گزینه فعال شده باشد و پکت مورد نظر بیش از MTU باشد، در این صورت روتر پکت را رها نموده و آن را به قسمتهای کوچکتر تقسیم نمیکند.
حال روتر علاوه بر این که چنین پکتی را رها مینماید، یک پیام ICMP نیز به مبدا آن ارسال میکند. پیام ICMP، یک پکت دادهی بسیار کوچک است که وضعیت را اعلام میکند. در حقیقت روتر با ارسال این پیام اعلام میکند که قادر به تحویل پکت مورد نظر نیست زیرا حجم آن بسیار زیاد است و امکان Fragmentation نیز وجود ندارد.
path MTU discovery چیست؟
Path MTU discovery یا به اختصار PMTUD به فرایندی گفته میشود که MTU مربوط به تمامی دستگاهها، روترها و سوییچهای موجود در مسیر شبکه را مشخص میکند. در مثال بالا اگر کامپیوتر A و سرور A از PMTUD استفاده میکردند، از MTU روتر B مطلع میشدند و اندازهی پکت را متناسب با آن تنظیم میکردند تا از Fragmentation جلوگیری کنند.
بسته به این که دستگاهها از IPV4 یا IPV6 استفاده میکنند، PMTUD کمی متفاوت عمل میکند.
IPV4:اIPV4 امکان Fragmentation را فراهم میکند و نشانه Don’t Fragment را در IP header قرار میدهد. PMTUD در IPV4 با ارسال پکتهای آزمایشی در طول مسیر شبکه با گزینهی فعال Don’t Fragment کار خود را انجام میدهد.
اگر روتر و یا دستگاهی در طول مسیر، پکتی را رها کند، یک پیام ICMP به همراه MTU آن ارسال میکند. دستگاه مبدا، MTU خود را پایین آورده و یک پکت آزمایشی دیگر ارسال میکند. این فرایند تا جایی تکرار میشود که پکتهای آزمایشی به اندازه کافی کوچک باشند تا مسیر را بدون این که رها شوند، طی کنند.
IPV6: برای IPV6 که Fragmentation را مجاز نمیداند نیز PMTUD تقریبا به همان روش کار میکند. تمایز اصلی که دارد این است که IPV6 headerها گزینهی Don’t Fragment را ندارند. روترهایی که از IPV6 پشتیبانی میکنند، پکتهای IPV6 را به قسمتهای کوچکتر تقسیم نمیکنند.
در نتیجه اکر پکتهای آزمایشی بیشتر MTU باشند، روترها پکتها را رها نموده و پیامهای مربوطهی ICMP را بدون بررسی گزینهی Don’t Fragment ارسال میکنند. IPv6 PMTUD پکتهای آزمایشی کوچک و کوچکتری را ارسال میکنند تا زمانی که پکتها بتوانند کل مسیر شبکه را درست مانند IPV4 طی کنند.
MSS چیست؟
MSS مخفف Maximum Segment Size است. MSS به جای لایه 3، در لایه 4 (لایه انتقال) توسط TCP مورد استفاده قرار میگیرد. MSS تنها اندازهی payload (محتوای اصلی) هر پکت را مورد بررسی قرار داده و با کم کردن طول TCP و IP header از MTU آن را محاسبه میکند.
پکتهایی که حجم آنها از MTU مربوط به روتر بیشتر باشد یا به قطعات کوچکتر تقسیم شده و یا رها میشوند، درحالیکه پکتهایی که بیش از MSS هستند، همیشه رها میگردند.
منبع: www.cloudflare.com