Fragment در شبکه چیست؟
Fragment یا Fragmentation پروسهای است که در آن بستهها ارتباطی در شبکه را به قطعات کوچکتر تقسیم میگردد تا قطعات به دست آمده بتوانند از طریق پیوندی با حداکثر واحد انتقال (MTU) کوچکتر از اندازه بسته اصلی در شبکه انتقال پیدا کنند. این قطعات در سمت گیرنده دوباره به یکدیگر رسیده و به یک بسته واحد استقرار مییابند.
یک بسته در حالت عادی نمیتواند بزرگتر از حداکثر اندازه مجاز آن شبکه در هنگام ارسال باشد. واحدهای حداکثر انتقال (MTU) که معمولاً یکسان هستند، اندازه آن را تعیین میکنند. به صورت کلی اندازه MTUهای شبکههای اداری مدرن مبتنی بر اترنت یا مرکز داده 1500 بایتی هستند.
در صورتیکه اندازه بسته بزرگتر از MTU شبکه باشد، دادههای موجود در بسته باید تکه تکه گردند. در این فرآیند بسته را به قطعات حمل شده در بستههای جدید (قطعات) که با اندازه برابر یا کمتر از MTU پایین (در شبکه با MTU متفاوت) هستند، تقسیم میگردد.
پروسهی Fragmentation
RFC 791
الگوریتم RFC 791, الگوریتمی است که مکانیزم Fragment، انتقال و مونتاژ مجدد بسته در شبکه را مشخص میکند.
RFC 815
یک الگوریتم مونتاژ مجدد کارآمد را مشخص میکند. فیلد Identification در این الگوریتم هدر بسته، همراه با آدرسهای اینترنتی خارجی و داخلی و شناسه پروتکل، و قسمت Fragment offset. در هدر IP، موارد Don’t Fragment و More Fragments برای تکه تکه کردن و مونتاژ مجدد بسته استفاده میگردد.
اگر میزبان دریافت کننده یک بسته تکه تکه شده دریافت کند، باید بسته را دوباره کنار هم قرار داده و به لایه پروتکل بالاتر ارسال کند. در این الگوریتم قرار است مونتاژ مجدد در میزبان دریافت کننده اتفاق بیفتد، اما در واقعیت، ممکن است توسط یک روتر میانی انجام شود. به عنوان مثال این مورد در NAT میتواند برای جمعآوری مجدد قطعات برای ترجمه جریانهای داده به یک روتر میانی نیاز باشد.
فیلد ها در IP هدر Fragment
فیلد شناسایی (Identification Field) – 16 bit
همانطور که از نام این فیلد مشخص است، این فیلد برای تشخیص قطعات یک فریم استفاده میشود.
فیلد انحراف (Offset Field) – 13 bit
این فیلد برای تعیین توالی قطعات در frame استفاده میشود. بالاترین امکان قرار دادن این فیلد = (65535 – 20) = 65515 است.
(که در آن 65535 حداکثر اندازه دیتاگرام و 20 حداقل اندازه هدر IP است) بنابراین، ما به ceil(log265515) = 16 بیت برای انحراف قطعه نیاز داریم. اما فیلد انحراف قطعه تنها 13 بیت فضا دارد. بنابراین برای نمایش کارآمد، باید فیلد انحراف قطعه را با 216/213 = 8 که به عنوان یک عامل مقیاسپذیری است، کاهش پیدا کند. در نتیجه همه قطعات به جز آخرین قطعه باید دارای دادههای مضرب 8 باشند، به طوری که عدد این قطعه به N (اعداد مضرب) تعلق دارد.
فیلد Fragmentبیشتر (More Fragment) – MF
این فیلد نشان میدهد که آیا قطعات بیشتری بعد از این قطعه وجود دارد یا خیر، یعنی اگر MF = 1، قطعات بیشتری بعد از این قطعه وجود دارد و اگر MF = 0 باشد به معنی آخرین قطعه است.
فیلد Fragmentنباش (Don’t Fragment) – DF
زمانی که در شبکه قرار نیست بسته تکه تکه گردد، این فیلد را روی ۱ قرار داده و بسته به صورت کامل انتقال پیدا میکند.
چرا Fragmentation لازم است؟
دیتاگرام تولید شده توسط لایه شبکه در سیستم مبدأ قبل از رسیدن به سیستم مقصد، از شبکههای زیادی عبور میکند. به طور معمول، کامپیوتر مبدأ از ارسال دیتاگرامهای بزرگ حمایت میکند. زیرا اگر دیتاگرام به قطعات کوچکتر تقسیم شود، هدر برای هر واحد دیتاگرام تکرار میشود. هدر برای هر دیتاگرام تکهتکه شده تکرار میشود و پهنای باند شبکه مبدا را هدر میدهد. با این حال، هر شبکه دارای یک سقف در MTU است. بدتر از آن این است که سیستم مبدأ از مسیر بسته ارسال شده برای رسیدن به مقصد بی اطلاع است. بنابراین مبدا نمیتواند تعیین کند که هر دیتاگرام Fragment شده چه اندازهای باشد.
دلایل تقسیم یک دیتاگرام بزرگ به یک دیتاگرام تکه تکه شده:
- ظرفیت داده ها توسط سخت افزار و سیستم عامل به کار گرفته شده در شبکه محدود باشد
- انطباق با هنجارهای ملی و بین المللی
- متناسب با پروتکل های شبکه های مختلف اندازه بسته قابل تغییر است
- بسته های بزرگ نسبت به بسته های کوچک مدت زمان بیشتری شبکه را اشغال میکنند
- اشتباهات ناشی از ارسال مجدد را کاهش خواهد داد
Datagram چیست؟
دیتاگرام کوچکترین واحد انتقال داده در یک سیستم ارتباطی است. دیتاگرامها بستههای دادهای هستند که حاوی اطلاعات هدر کافی برای مسیریابی جداگانه برای رسیدن به مقصد توسط تمام دستگاههای سوئیچینگ شبکه میانی هستند. لایه شبکه، دادهها را از لایهی بالایی دریافت میکند و آن را با یک هدر کپسوله میکند. بنابراین، هر دیتاگرام شامل دادهها و یک سربرگ حاوی اطلاعاتی در مورد دادهها و خدمات است.
قطعهقطعه سازی دیتاگرام
- هر شبکه LAN یا WAN دارای محدودیت در اندازه بستههای ارسالی MTU است. دیتاگرام در صورتی که از این محدودیت اندازه فراتر رود، قطعه قطعه میشود و در لایه شبکه ایجاد میشود. دیتا تنها چیزی در دیتاگرام است که تکه تکه میگردد. هدر دیتاگرام برای هر دیتاگرام تکه تکه شده تکرار میشود، تا اطمینان حاصل شود که اطلاعات داخل هدر حتی پس از تکه تکه شدن دست نخورده باقی میمانند.
- دیتاگرام هم در کامپیوتر مبدا و هم در هر روتر که در مسیر خود به سمت مقصد میرود، تکه تکه میشود. لایه شبکه دیتاگرام تکهتکه شده را به لایه پیوند داده تحویل میدهد. در ادامه دیتاها در فریمها کپسوله میشود و به مسیریاب هدایت میشود.
- پروتکل استفاده شده در شبکه فیزیکی از جایی که فریم از آنجا ایجاد شده، فرمت و اندازه فریم دریافتی را در هر روتر تعیین میکند. برای ارسال دیتاگرام به مسیریاب بعدی، روتر دیتاگرام را از فریم دریافتی باز میکند، آن را پردازش و سپس آن را دوباره کپسوله میکند. اندازه فریم ارسالی تعیین میکند که فریم باید روی آن حرکت کند تا به روتر یا سیستم بعدی برسد.
- وقتی لایه پیوند داده آن را در یک فریم کپسوله میکند، باید اندازه کلی دیتاگرام کمتر از MTU باشد. اگر گیرنده MTU کوچکتری داشته باشد، حتی یک دیتاگرام Fragment شده میتواند در روترها بیشتر تکه تکه شود، تا با MTU گیرنده هماهنگ شود.
- همچنین تنها دادههای داخل دیتاگرام تکه تکه میشوند و تمام قطعات دیتاگرام بخش لازم از هدر را کپی میکنند.