Fragment در شبکه؛ مکانیزم تقسیم بستهها و تاثیر آن بر پایداری ارتباطات

تصور کنید قصد دارید یک وسیله بزرگ را از دری عبور دهید که عرض آن کم است؛ تنها راه چاره، باز کردن قطعات آن وسیله و رد کردن تکتک آنها از در است. در دنیای شبکه، Fragment دقیقاً همین نقش را ایفا میکند. هر شبکه فیزیکی (مثل وایفای، فیبر نوری یا اترنت) برای اندازه بستههایی که جابهجا میکند، یک سقف مجاز دارد که به آن MTU میگویند. زمانی که یک بسته اطلاعاتی بزرگ به دروازهای میرسد که توانایی عبور دادن آن حجم از داده را به صورت یکجا ندارد، بسته خرد شده و به قطعات کوچکتری به نام Fragment تبدیل میشود تا عبور دادهها متوقف نشود.
Fragment چیست؟
فرگمنت در حقیقت همان ریزواحدهایی است که از شکسته شدن یک بسته اصلی به دست میآید. وقتی سیستم مبدا یا یک روتر در میانه راه متوجه میشود که بسته فعلی برای عبور از تونل بعدی خیلی بزرگ است، آن را قیچی میکند. هر کدام از این تکهها، هویت مستقلی پیدا میکنند تا بتوانند به تنهایی در مسیر حرکت کنند، اما همگی یک کد شناسایی مشترک در هدر خود دارند تا مقصد بفهمد این تکهها همگی متعلق به یک پازل واحد هستند.
معنی Fragment در واقع «بقا در شرایط محدود» است. بدون این قابلیت، اگر شما یک فایل حجیم را در شبکهای بفرستید که یکی از روترهای میانی آن قدیمی باشد یا ظرفیت کمی داشته باشد، ارتباط شما بلافاصله قطع میشد. فرگمنتیشن اجازه میدهد دادهها با تغییر شکل، از هر گلوگاهی عبور کنند.
Datagram چیست؟
دیتاگرام واحد پایه و کپسول اصلی داده در لایه شبکه (Network Layer) است. وقتی از بسته صحبت میکنیم، منظورمان همین دیتاگرام است که تمام اطلاعات لازم برای مسیریابی مثل آدرس IP فرستنده و گیرنده را در سربرگ یا همان هدر خود حمل میکند. نکته مهم اینجاست که یک دیتاگرام، برخلاف فریمهای لایه دوم، هیچ وابستگی مستقیم به سختافزار ندارد و میتواند در کل اینترنت سفر کند.
عملیات خرد شدن دقیقاً روی همین دیتاگرام انجام میشود. وقتی یک دیتاگرام وارد فرآیند فرگمنتیشن میشود، لایه شبکه آن را به چند دیتاگرام کوچکتر تقسیم میکند. هر کدام از این قطعات جدید، هدر مخصوص به خود را دریافت میکنند که کپی هدر اصلی است، با این تفاوت که فیلد آفست در آنها تغییر کرده تا ترتیب نشستن در مقصد مشخص شود. در واقع هر Fragment خودش یک دیتاگرام است که بخشی از بار اصلی را حمل میکند.
نقش کلیدی MTU و تأثیر آن بر لایههای زیرین
تمام این اتفاقات زیر سر عددی به نام MTU یا Maximum Transmission Unit است. هر تکنولوژی شبکه ظرفیت مشخصی برای انتقال یک فریم دارد؛ برای مثال در اکثر شبکههای اترنت، این مقدار 1500 بایت است.
وقتی یک سرور میخواهد دادهای را ارسال کند، ابتدا لایه IP بررسی میکند که آیا سایز دیتاگرام از MTU لینک خروجی بیشتر است یا خیر. اگر بزرگتر باشد، فرآیند ایجاد Fragment آغاز میشود. نکته فنی مهم اینجاست که هدر IP (که معمولا 20 بایت است) در تمام قطعات تکرار میشود. یعنی اگر یک دیتاگرام 4000 بایتی داشته باشیم و MTU مسیر 1500 بایت باشد، دادهها به سه قطعه تقسیم میشوند و هر قطعه هدر مخصوص به خود را خواهد داشت که باعث افزایش مصرف ترافیک و اشغال بیهوده پهنای باند میشود.
کالبدشکافی فنی: پازلبندی در هدر IP
برای اینکه مقصد در میان میلیونها بسته ورودی گیج نشود و بداند این پازل را چطور باید دوباره سرهم کند، از سه فیلد کلیدی در شناسنامه هر قطعه استفاده میشود:
- شناسه مشترک (Identification): تمام قطعاتی که از یک دیتاگرام مادر جدا شدهاند، این شماره سریال 16 بیتی را با خود دارند تا گیرنده بداند کدام قطعات باید با هم ترکیب شوند.
- نقشه جانمایی (Offset): این عدد نشان میدهد که دادههای این قطعه دقیقاً کجای بسته اصلی بودهاند. از آنجایی که این فیلد فضای کمی در هدر دارد، مقدار آن در ضریب 8 ضرب میشود؛ به همین دلیل طول داده در هر قطعه حتماً باید مضربی از 8 باشد.
- بیت More Fragments: این یک نشانگر ساده است. اگر مقدار آن 1 باشد، یعنی هنوز قطعات دیگری در راه هستند و اگر 0 باشد، یعنی این آخرین قطعه است و میتوان بازسازی را شروع کرد.
مکانیزم Reassembly: بازگشت قطعات به حالت اولیه
فرآیند بازسازی یا Reassembly، عملیاتی است که به طور معمول در مقصد نهایی انجام میشود. زمانی که اولین Fragment به مقصد میرسد، سیستمعامل یک تایمر مخصوص (Reassembly Timer) را فعال کرده و بخشی از حافظه رم را برای ذخیره قطعات بعدی رزرو میکند.
اگر تمام قطعات طبق نقشه «آفست» در زمان مقرر دریافت شوند، هدرهای اضافی حذف شده و بار داده آنها به هم چسبانده میشود تا دیتاگرام اصلی بازسازی شود. اما اگر حتی یکی از این قطعات به دلیل نویز شبکه یا اختلال در مسیریابی به مقصد نرسد، سیستمعامل کل قطعات موجود در حافظه را دور میریزد. این موضوع در لینکهای بیکیفیت باعث میشود که سرور مجبور به ارسال مجدد کل بسته حجیم شود که خروجی آن چیزی جز هدررفت پهنای باند و افزایش تأخیر نخواهد بود.
تفاوت Fragmentation در IPv4 و IPv6
یکی از بزرگترین تغییرات در نسل ششم پروتکل اینترنت (IPv6)، نحوه برخورد با موضوع تکهتکه شدن بستههاست. در IPv4، هر روتر در میانهی راه اجازه داشت در صورت نیاز، بسته را خرد کند که فشار پردازشی عظیمی به روترهای اصلی اینترنت وارد میکرد.
در IPv6، روترهای میانی دیگر حق انجام Fragmentation را ندارند. اگر بستهای بزرگتر از MTU یک روتر باشد، روتر به سادگی بسته را حذف کرده و یک پیام “Packet Too Big” به فرستنده میفرستد. در این پروتکل، وظیفه خرد کردن بستهها تنها و تنها بر عهده فرستنده است. این تغییر باعث شده است که سرعت مسیریابی در هسته شبکه جهانی به شدت افزایش یابد، زیرا روترها دیگر درگیر محاسبات مربوط به آفست و تولید هدرهای جدید نمیشوند.
تحلیل رفتاری پروتکلهای لایه انتقال در مواجهه با Fragment
نحوه برخورد پروتکلهای TCP و UDP با موضوع فرگمنتیشن کاملاً متفاوت است. پروتکل TCP به دلیل هوشمند بودن، سعی میکند از فرگمنتیشن فرار کند؛ این پروتکل با مکانیزمهای کنترلی خود، سایز دادهها را با MTU مسیر هماهنگ میکند تا بازدهی بالایی داشته باشد.
اما پروتکل UDP کاملاً «کور» عمل میکند. اگر اپلیکیشنی یک دیتای حجیم را به لایه UDP بسپارد، این لایه بدون توجه به ظرفیت مسیر، آن را به لایه IP میدهد و باعث ایجاد تعداد زیادی Fragment میشود. از آنجایی که UDP هیچ مکانیزمی برای تایید دریافت ندارد، گم شدن تنها یک قطعه کوچک منجر به تخریب کل داده در سمت کاربر میشود. به همین دلیل در سرویسهای حساس مثل VoIP، تنظیم دقیق سایز بستهها برای جلوگیری از فرگمنتیشن حیاتی است.
چرا فرآیند Fragmentation برای پایداری سرورها حیاتی است؟
بسیاری از مدیران سرور تصور میکنند که شبکه یک اتوبان یکنواخت است، اما در واقعیت، یک بسته برای رسیدن از سرور شما به دست کاربر، ممکن است از چندین روتر مختلف عبور کند که هر کدام تنظیمات خاص خود را دارند.
- تفاوت در زیرساختها: ممکن است سرور شما در دیتاسنتر با پورت 10 گیگابیت متصل باشد، اما کاربر نهایی با یک مودم قدیمی یا از طریق یک تونل VPN به شما وصل شود. اینجاست که سیستم دادهها را متناسب با ظرفیت ضعیفترین بخش مسیر، خرد میکند.
- جلوگیری از ریزش داده: اگر قابلیت تکهتکه شدن وجود نداشت، روترها بستههای بزرگ را به سادگی دور میانداختند و شما با خطای مدام در بارگذاری سایت مواجه میشدید. امروزه مکانیزمی به نام PMTUD سعی میکند سایز بهینه را پیدا کند تا نیاز به فرگمنت شدن در میانه راه به حداقل برسد، اما همچنان وجود این قابلیت برای پایداری زیرساخت اینترنت یک ضرورت است.
چالشهای امنیتی و پرفورمنس در زیرساختهای هاستینگ
با اینکه وجود فرگمنتیشن یک ضرورت است، اما برای سرورهای تجاری هزینهبر است. پردازنده سرور مقصد باید منابع زیادی را صرف نگه داشتن قطعات دیتا در رم کند و گم شدن تنها یک تکه پازل دیتا در راه، کل دیتاگرام اصلی را باطل میکند؛ این موضوع در سرویسهای حساس مثل ویدئوکنفرانس یا گیمینگ باعث افت شدید کیفیت و پکت لاس میشود.
از طرفی، هکرها همیشه راهی برای سوءاستفاده و حملات سایبری پیدا میکنند. در حملات خطرناکی مثل Teardrop، مهاجم قطعاتی را میفرستد که شماره صفحات (Offset) آنها با هم تداخل دارند. وقتی سیستمعامل سرور سعی میکند این صفحات را روی هم بگذارد، به دلیل تداخل در آدرسدهی حافظه، سیستم دچار خطای بحرانی شده و کرش میکند. تنظیم دقیق دیوار آتش برای بازرسی و مدیریت صحیح Fragmentها، یکی از حیاتیترین بخشهای امنیت سرور است.
استراتژیهای مدیریتی برای جلوگیری از Fragmentation
در محیطهای دیتاسنتر، هدف اصلی مدیران شبکه جلوگیری از وقوع این فرآیند است. تکنیکهایی برای بهینهسازی مسیر وجود دارد:
- مکانیزم PMTUD: این پروتکل کوچکترین MTU موجود در کل مسیر بین سرور و کاربر را پیدا کرده و سرور بستهها را از همان ابتدا در سایز مناسب تولید میکند.
- استفاده از MSS Clamping: روترها میتوانند در حین برقراری ارتباط TCP، به طرفین اعلام کنند که بستههای خود را کوچکتر بسازند تا با احتساب هدرهای VPN، حجم نهایی از حد مجاز فراتر نرود.
- تنظیمات Jumbo Frames: در شبکههای داخلی دیتاسنتر، میتوان MTU را تا 9000 بایت افزایش داد تا تعداد بستهها کمتر و فشار روی پردازنده به حداقل برسد.
سوالات متداول
در حالت استاندارد، بازسازی یا Reassembly فقط در میزبان مقصد انجام میشود تا بار پردازشی روترهای میانی کاهش یابد. با این حال، برخی تجهیزات امنیتی مانند فایروالهای پیشرفته (Next-Generation Firewalls) یا سیستمهای جلوگیری از نفوذ (IPS)، برای بازرسی دقیق بستهها و اطمینان از عدم وجود کدهای مخرب در میان قطعات، ممکن است بستهها را در میانه راه بازسازی کرده و پس از تایید، مجدداً ارسال کنند.
دلیل اصلی این تصمیم، افزایش کارایی و سرعت مسیریابی در هسته اینترنت است. فرآیند خرد کردن بستهها توسط روترها، زمانبر است و منابع پردازشی زیادی مصرف میکند. در IPv6، با انتقال این وظیفه به سیستم مبدا، روترها فقط وظیفه هدایت بستهها را دارند و اگر بستهای بیش از حد بزرگ باشد، با حذف آن و اطلاع به فرستنده، شبکه را از گلوگاههای پردازشی نجات میدهند.
بسیار مخرب است. در سرویسهای Real-time که از پروتکل UDP استفاده میکنند، هر Fragment گم شده به معنای تخریب کل آن دیتاگرام است. از آنجایی که بازسازی قطعات باعث ایجاد تاخیر (Jitter) در پردازنده میشود و گم شدن یک قطعه باعث پرش در تصویر یا قطع و وصل شدن صدا میشود، مدیران شبکه همیشه تلاش میکنند با کاهش سایز پکتها (MSS Clamping)، از وقوع هرگونه فرگمنتیشن جلوگیری کنند.
خیر، استفاده از Jumbo Frames فقط در محیطهای ایزوله و کنترل شده مثل داخل یک دیتاسنتر یا بین دو سرور که با فیبر نوری مستقیم به هم متصل هستند، پیشنهاد میشود. اگر سرور شما بستههای 9000 بایتی بفرستد و این بسته بخواهد وارد اینترنت عمومی شود، بلافاصله در اولین روتر لبهای تکهتکه شده یا حذف میشود که نتیجه آن افت شدید پرفورمنس خواهد بود.
این یک حفره امنیتی کلاسیک است. در حالت عادی، قطعات مثل قطعات پازل کنار هم قرار میگیرند، اما در حملات امنیتی، مهاجم قطعاتی را میسازد که آفست آنها با هم همپوشانی دارد (مثلاً قطعه دوم روی بخشی از قطعه اول مینشیند). بسیاری از سیستمهای قدیمی در هنگام مدیریت این تداخل در حافظه رم دچار سردرگمی شده و با نشت حافظه یا کرش کامل سیستم روبرو میشوند.






























شما میتوانید دیدگاه خود را در مورد این مطلب با ما با اشتراک بگذارید.