logo
Part_3

Фрагментація данограми.

В ідеальному випадку IP-данограма розміщається всередині однієї фізичної рамки. Мережеве обладнання звичайно накладає обмеження на довжину даних: Ethernet обмежує дані до 1500 байт, FDDI - приблизно до 4470 байт. Це обмеження називають максимальним блоком для пересилання (Maximum Transfer Unit ~ MTU). Кожен мережевий інтерфейс має відповідне значення MTU. Коли IP-рівень потребує передати данограму, розмір якої більший від MTU, то відбувається процес IP-фрагментації, тобто розбиття даних на частини (фрагменти).

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

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

identification

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

flags

Два молодші біти з трьох контролюють фрагментацію. Один з бітів (more fragments - MF) вказує на те, що це не останній фрагмент, тобто очікується прийняття як мінімум ще одного фрагменту. Другий з бітів (dont fragment - DF) використовується для того, щоб позначити IP-данограму, яку не можна піддавати фрагментації. Коли при пересиланні такої данограми фрагментація все ж необхідна, то у відповідь до її джерела генерується ICMP-повідомлення про помилку.

fragment offset

Використовується при фрагментації данограми і означає відступ в оригінальній данограмі для даних, які передаються у фрагменті, від початку даних нефрагментованої IP-данограми; визначається числом, кратним 8 байтам (байти заголовку оригінальної данограми не враховуються). Для першого фрагенту або для нефрагментованої данограми це значення завжди дорівнює 0. Щоб здійснити реасемблювання, адресат повинен отримати всі фрагменти, починаючи від фрагменту з відступом 0 до фрагменту з найбільшим відступом. Фрагменти, які не прибувають в потрібному порядку, а також ті, які не належать до комунікації між маршрутизатором, що фрагментує данограму, і адресатом, утруднюють реасемблювання.

total length

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

Фрагментацію звичайно здійснює раутер, який з’єднує мережу з більшим MTU з мережею, в якій MTU менший, ніж довжина данограми. Довжина фрагменту повинна бути кратною 8 байтам (див. FRAGMENT OFFSET), останній останній фрагмент звичайно коротший. Щоб можна було відновити копію оригінальної данограми перед її подальшим опрацюванням у місці призначення, фрагменти повинні бути реасембльовані (reassembled).

Протокол IP вимагає, щоб кожне сполучення мало MTU, не менший від 68 байтів, так що коли будь-яка мережа передбачає менше значення від вказаного (наприклад, мережа ATM має довжину комірки 53 байти, з яких 48 відведені для поміщення даних), то фрагментація і реасемблювання мусять бути вбудовані в мережевий інтерфейс у спосіб, прозорий для IP. 68 байтів – це сума максимальної довжини IP-заголовка (60 байтів) і мінімально можливої довжини даних у фрагменті, крім останнього (8 байтів). Маршрутизатор завжди повинен сприймати данограми з довжиною, яка не перевищує MTU мережі, до якої він під'єднаний, і завжди повинен опрацьовувати нефрагментовані данограми довжиною до 576 байтів. Хоч протокол IP не вимагає обслуговування нефрагментованих IP-данограм, довших від 576 байтів, однак конкретні впровадження IP-протоколу можуть працювати із довжинами 8192 байти і більше, і рідко працюють із меншими від 1500 байтів. Станції також повинні сприймати і при потребі реасемблювати данограми довжиною щонайменше 576 байтів.

Фрагменти данограм мають той самий формат, як данограми, за вийнятком поля FLAG, яке вказує, що це фрагменти.

Приклад: Оригінальна данограма з довжиною даних 1400 байтів (рис. 3.30 а) і три фрагменти (рис. 3.30 б) для мережі з MTU = 620 байт. Значення відступів на рис. 5.5 вказують кількість байтів в десятковій системі; їх слід поділити на 8, щоб отримати значення, яке зберігається в заголовках фрагментів: відступ визначається кількістю 8-байтових блоків. Довжина IP-заголовків становить 20 байтів.

(а) оригінальна данограма;

(б) фрагменти.

Рис. 3.30. Приклад фрагментації данограми.

Нефрагментована данограма позначена у заголовку бітами прапорців фрагментації, рівними нулю, також відступ нульовий. Коли здійснюється фрагментація, то повинні бути виконані такі кроки: