Фрагментація IP-пакетів

Важливою особливістю протоколу IP, що відрізняє його від інших мережевих протоколів (наприклад, від мережевого протоколу IPX, який якийсь час тому конкурував з IP), є його здатність виконувати динамічну фрагментацію пакетів при передачі між мережами з різними максимально допустимими значеннями довжини поля даних кадрів (Maximum Transmission Unit, MTU). Значення MTU залежать як від протоколу, так і від настроювання мережевих інтерфейсів.

Насамперед відзначимо різницю між фрагментацією повідомлень у вузлі-відправнику

і динамічною фрагментацією повідомлень Ь транзитних вузлах мережі - маршрутизаторах.

У першому випадку розподіл повідомлення на кілька дрібніших частин (фрагментація) відбувається при передачі даних між протоколами одного і того ж стека всередині комп'ютера. Протоколи, що виконують фрагментацію в межах вузла, аналізують тип технології нижнього рівня, визначають її MTU та поділяють повідомлення на такі частини, які вміщуються у кадри канального рівня того ж стека протоколів.

У стік TCP/IP це завдання вирішує протокол TCP, який розбиває потік байтів, що передається йому з прикладного рівня, на сегменти потрібного розміру, наприклад, по 1460 байт, якщо на нижньому рівні цієї мережі працює протокол Ethernet. Протокол IP у вузлі-відправнику, як правило, не використовує своїх можливостей щодо фрагментації пакетів.

Авот на транзитному вузлі - маршрутизаторі, коли пакет необхідно передати з мережі з більшим значенням MTU в мережу з меншим значенням MTU, здатності протоколу IP виконувати фрагментацію стають затребуваними. Пакети-фрагменти , подорожуючи мережею, можуть повторно піддатися фрагментації на якомусь із проміжних маршрутизаторів.

Кожен із фрагментів має бути забезпечений повноцінним заголовком IP. Деякіз полів заголовка (ідентифікатор, TTL, прапори DF і MF, зсув) безпосередньо призначені для подальшого складання фрагментів у вихідне повідомлення.

Q Ідентифікатор пакета використовується для розпізнавання пакетів, що утворилися шляхом поділу на частини (фрагментації) вихідного пакета. Усі частини (фрагменти) одного пакета повинні мати однакове значення цього поля. Модуль IP, що відправляє пакет, встановлює в полі ідентифікатора значення, яке має бути унікальним для цієї пари відправника та одержувача протягом усього часу, поки даний пакет (або будь-який його фрагмент) може існувати у складовій мережі 1Р.

Q Поле часу життя (Time То Live, TTL) займає один байт і визначає граничний термін, протягом якого пакет може переміщатися по мережі. Час життя пакету вимірюється в секундах і задається джерелом (відправником). Як зазначалося на початку цієї глави, після «кожної секунди перебування кожному з маршрутизаторів, якими проходить пакет під час своєї «подорожі» мережею, з його поточного часу життя віднімається одиниця; одиниця віднімається і в тому випадку, якщо час перебування був меншим за секунду. Оскільки сучасні маршрутизатори рідко обробляють пакет довше, ніж за одну секунду, то час життя можна інтерпретувати як максимальну кількість транзитних вузлів, які дозволено пройти пакету. Якщо значення поля часу життя стає нульовим до того, як пакет досягає

Глава 16. Протокол міжмережевої взаємодії

одержувача, пакет знищується. При складанні фрагментів хост-одержувач використовує значення TTL як крайній термін очікування відсутніх фрагментів.

□ Поле з м е щ е н ня ф р а г м е надає одержувачу інформацію про положення фрагмента щодо початку поля данихвихідного нефрагментованого пакета Так, наприклад, перший фрагмент матиме у полі зміщення нульове значення. У пакеті, не розбитому на фрагменти, поле усунення також має нульове значення. Зміщення задається в байтах і має бути кратним 8 байт.

□ Встановлений в одиницю однобітний прапор MF (More Fragments — більше фрагментів) говорить про те, що цей пакет є проміжним (не останнім) фрагментом. Модуль IP, що відправляє нефрагментований пакет, встановлює біт MF на нуль.

□ Прапор DF (Do not Fragment —не фрагментувати), встановлений в одиницю, забороняє маршрутизатору фрагментувати цей пакет. Якщо такий пакет не може досягти одержувача без фрагментації, то модуль IP його знищує, а вузлу-відправнику надсилається діагностичне повідомлення.

Можливість заборонити фрагментацію дозволяє у деяких випадках прискорити роботу програм. Для цього спочатку необхідно дослідити мережу, визначити максимальний розмір пакета, який зможе пройти весь шлях без фрагментації, а потім використовувати пакети такого чи меншого розміру для обміну даними. Дана можливість дозволяє також запобігти фрагментації у тих випадках, коли хост-одержувач не має достатніх ресурсів для складання фрагментів.

Розглянемо механізм фрагментації з прикладу складової мережі, показаної на рис. 16.20.

В одній з підмереж (Frame Relay) значення MTU дорівнює 4080, в іншій (Ethernet) -1492. Хост, що належить мережі Frame Relay, передає дані хосту у мережі Ethernet. На обох хостах, а також на маршрутизаторі, що зв'язує ці підмережі, встановлено стек протоколів TCP/IP.

Транспортному рівню хоста-відправника відоме значення MTU нижче технології (4080). На підставі цього модуль TCP і «нарізує» своїсегменти розміром 4000 байт і передає вниз протоколу IP, який поміщає сегменти у полі даних IPпакетів і генерує їм заголовки. Звернемо особливу увагу на заповнення полів заголовка, які прямо пов'язані з фрагментацією:

□ пакету надається унікальний ідентифікатор , наприклад 12456;

□ оскільки пакет поки що не був фрагментований, у полі зміщення міститься значення 0;

□ ознака MF також обнулюється, це показує, що пакет одночасно є і своїм останнім фрагментом;

□ ознака DF встановлюється в 1, це означає, що цей пакет можна фрагментувати.

Загальна величина IP-пакета становить 4000 плюс 20 (розмір заголовка IP), тобто 4020 байт, що вміщується в полі даних кадру Frame Relay, яке в даному прикладі дорівнює 4080. Далі модуль IP хоста-відправника передає цей кадр своєму мережному інтерфейсу Frame Relay , який надсилає кадри наступному маршрутизатору.

4000 байт Заголовок IP

Мал. 16.20. Фрагментація

У процесі фрагментації можуть змінюватися значення деяких полів заголовків IP у пакетах-фрагментах порівняно із заголовком IP вихідного пакета. Так, кожен фрагмент має власні значення контрольної суми заголовка, зміщення фрагмента та загальної довжини пакета. У всіх пакетах, крім останнього, прапор MF встановлюється в одиниці, а в останньому фрагменті — в нуль. Отримані пакети-фрагменти мають довжину 1020 байт (з урахуванням заголовка IP), тому вони вільно розміщуються у полі даних кадрів Ethernet.

Глава 16. Протокол міжмережевої взаємодії

На малюнку показано різні стадії переміщення фрагментів по мережі. Фрагмент 2 вже досяг хоста-отримувача та поміщений у приймальний буфер. Фрагмент 1 ще переміщається по мережі Ethernet, інші фрагментизнаходяться у буферах маршрутизатора.

А тепер обговоримо, як відбувається складання фрагментованого пакета на хості призначення.

Зазначимо, що IР-маршрутизатори не збирають фрагменти пакетів у більші пакети, навіть якщо на шляху зустрічається мережа, яка допускає таке укрупнення. Це пов'язано з тим, що окремі фрагменти повідомлення можуть переміщатися складовою мережею різними маршрутами, тому немає гарантії, що всі фрагменти на своєму шляху пройдуть через якийсь один певний маршрутизатор.

Якщо хоча б один фрагмент пакета не встигне прийти на хост призначення до моменту закінчення тай міру, то жодних дій щодо дублювання відсутнього фрагмента не вживається, а всі отримані на той час фрагменти пакета відкидаються! Хосту, що надіслав вихідний пакет, надсилається ІСМР-повідомлення про помилку. Такій поведінці протоколу IP цілком відповідає його кредо "з максимальними зусиллями" - намагатися по можливості, але жодних гарантій не давати.

Ознакою закінчення складання є відсутність незаповнених проміжків у полі даних і прибуття останнього фрагмента (з рівним нулю прапором MF) до закінчення тайм-ауту. Після того, як дані зібрані, їх можна передати протоколу, що знаходиться вище, наприклад TCP.

Протокол IP вирішує завдання доставки повідомлень між вузлами складової мережі. Оскільки він є дейтаграмним, жодних гарантій надійної доставки повідомлень не надається.