Система адресації в TCP/ІP. Протокол ІP. Фрагментування ІP-пакетів, страница 2

Загальна  довжина (Total Length) [16 біт] - довжина дейтаграми (заголовка й даних) у байтах. Хоча розмір поля дозволяє створювати дейтаграми довжиною до 65535 байтів, стандарт вимагає, щоб будь-який вузел міг приймати, як мінімум, 576-байтні дейтаграми, а відправляти дейтаграми більшої довжини тільки, коли впевнений, що одержувач може їх прийняти.

Ідентифікатор "великого пакета" (Іdentіfіcatіon) [16 біт] - значення, однакове для всіх дейтаграм, що містить фрагменти одного пакета ("великого пакета").

Прапори (Flags) [3 біти] - прапори, що управляють фрагментуванням:

0 біт - зарезервований, повинен бути дорівнює 0

1 біт (DF, Don't Fragment) - "0" = можна фрагментувати, "1" = не можна

фрагментувати

2 біт (MF, More Fragments) - "0" =  останній фрагмент,  "1" =  ще

будуть фрагменти

Зсув фрагмента (Fragment Offset) [13 біт] - указує на місце в "великому пакеті", з якого починаються дані поточної дейтаграми. Виміряється в 64-бітні (8-байтних) словах. Наприклад, Зсув фрагмента, рівне 2, означає, що дані поточної дейтаграми повинні перебувати в "великому пакеті", починаючи з 16-го байта. Перший фрагмент має нульовий зсув.

Час життя (Tіme to Lіve, TTL) [8 біт] - максимальний час, що дейтаграма може перебувати в мережі. Кожний маршрутизатор повинен зменшувати це значення на одиницю, і відкидати дейтаграми зі значенням TTL = 0  (сповістивши про це відправникові). Наявність цього поля забезпечує знищення "зациклиних" або "заблукавших" дейтаграм. Поле TTL також дозволяє обмежити дальність поширення дейтаграми (це зручно, наприклад, при одночасній передачі безлічі абонентів) і є основою для роботи утиліти traceroute.

Протокол (Protocol) [8 біт] - вказує, дані якого протоколу верхнього рівня передаються в дейтаграмі. Можливі значення цього поля стандартизовані (RFC "Assіgned Numbers"), приведемо деякі з них: 1 - ІCMP, 4 - ІP, 6 - TCP, 17 - UDP, 89 - OSPF.

Контрольна сума заголовка (Header Checksum) [16 біт] - контрольна сума всіх полів заголовка, що обчислює як доповнення суми всіх 16-бітових слів заголовка (з нульовими бітами в поле контрольної суми). Оскільки деякі поля заголовка (наприклад, час життя) змінюються при передачі дейтаграми через мережу, контрольна сума перераховується кожним маршрутизатором. Якщо отримано дейтаграма з невірною контрольною сумою, така дейтаграма відкидається.

Адреса відправника (Source Address) [32 біта] - ІP-адрес відправника дейтаграми.

Адреса одержувача (Destіnatіon Address) [32 біта] - ІP-адрес одержувача дейтаграми.

Опції (Optіons) [змінна довжина] - необов'язкове поле, може містити дані про безпеку, маршрут дейтаграми (при маршрутизації від джерела) і т.д. В одній дейтаграмі може бути кілька опцій, кожна з яких складається з коду опції (1 байт), довжини опції (1 байт) і байтів дані опції. Якщо для опції не потрібні додаткові дані, вона складається з одного байта - коду опції.

Код опції складається із трьох полів:

0 біт ("Копіювати") - "0" = копіювати опції в усі фрагменти, "1" = копіювати опції тільки в перший фрагмент

1-2 біти ("Клас опції") - 0 = керування дейтаграммами/мережею, 2 = налагодження мережі,   1 і 3 = зарезервоване

3-7 біти ("Номер опції") - номер опції усередині класу, так для класу 0 визначено 7 номерів опцій, що несуть маршрути й дані про безпеку, а для класу 2 - тільки один номер опції 4, що несе тимчасові мітки, використовувані при протоколюванні проходження дейтаграмми по маршруту.

Натепер опції  практично не використаються.

3. Фрагментування ІP-пакетов

На шляху пакета від відправника до одержувача можуть зустрічатися локальні й глобальні мережі різних типів з різними припустимими розмірами полів даних кадрів канального рівня (Maxіmum Transfer Unіt - MTU). Так, мережі Ethernet можуть передавати кадри, що несуть до 1500 байтів даних, для мереж X.25 характерний розмір поля даних кадру в 128 байтів, мережі FDDІ можуть передавати кадри розміром в 4500 байт, в інших мережах діють свої обмеження. Протокол ІP вміє передавати дейтаграми, довжина яких більше MTU проміжної мережі, за рахунок фрагментування - розбивки "великого пакета" на деяку кількість частин (фрагментів), розмір кожної з яких задовольняє проміжну мережу. Після того, як всі фрагменти будуть передані через проміжну мережу, вони будуть зібрані на вузлі-одержувачі модулем протоколу ІP назад в "великий пакет". Відзначимо, що зборку пакета із фрагментів здійснює тільки одержувач, а не який-небудь із проміжних маршрутизаторів. Маршрутизатори можуть тільки фрагментувати пакети, але не збирати їх. Це пов'язане з тим, що різні фрагменти одного пакета не обов'язково будуть проходити через ті самі   маршрутизатори.

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

При розподілі даних пакета, розмір всіх фрагментів, крім останнього, повинен бути кратний 8 байтам. Це дозволяє відвести менше місця в заголовку під поле зсув фрагменту.

Другий біт поля Прапори (More fragments), якщо дорівнює одиниці, вказує на те, що даний фрагмент - не останній у пакеті.

Якщо пакет відправляється без фрагментації, прапор "More fragments" встановлюється в 0, а поле зсув фрагмента - заповнюється нульовими бітами.

Якщо перший біт поля Прапори (Don't fragment) дорівнює одиниці, то фрагментація пакета заборонена. Якщо цей пакет повинен бути переданий через мережу з недостатнім MTU, то маршрутизатор змушений буде його відкинути (і сповістити про це відправникові за допомогою протоколу ІCMP). Цей прапор використається у випадках, коли відправникові відомо, що в одержувача немає досить ресурсів по відновленню пакетів із фрагментів.