🧠 Блог присвячений темі VPN і безпеки, конфіденційності даних в інтернеті. Ми говоримо про сучасні тенденції та новини, пов'язані з захистом.

Фрагментація IP: Повне пояснення

91

Кожна мережа на основі IP-пакетів має максимальний розмір одиниці передачі (MTU). MTU, як випливає з терміну, є максимальним розміром пакету, який може бути переданий в мережі.

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

Все ще розгублений? Не хвилюйся. 

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

Що таке фрагментація IP?

Кожна локальна мережа підтримує максимальний розмір IP-пакету. Отже, коли хост використовує мережу для передачі IP-пакету, він не повинен перевищувати розмір максимальної одиниці передачі (MTU). В іншому випадку він поділяється на невеликі частини – процес, який називається фрагментацією IP.

Цей розмір зазвичай визначається MTU та каналом передачі даних мережі, який часто однаковий. Сучасне робоче місце, центр обробки даних або мережа кампуса, що пропонуються через Ethernet, мають MTU на суму 1500 байт.

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

Дані будуть розбиті на кілька частин і перенесені в нові фрагменти (пакети), які менші або однакові за розміром, ніж нижній MCU. Ці фрагментовані дані потім знову збираються, коли вони досягнуть місця призначення.


IPv4

Використані поля заголовка IPv4

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

(Зображення: packetpushers.net)

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

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

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

Точно так само, як і в оригінальному IP-пакеті, перший зарезервований біт  поля Flags (всього 3 біти), а другий, біт Don't Fragment (DF) , обидва будуть скасовані (0).

Проте в кінцевому фрагменті буде встановлено третій біт поля, тобто More Fragments (MF), встановлений на 1. Усі біти в цьому полі останнього IP-пакета будуть встановлені на 0, точно так само, як вихідний IP-пакет (якщо це не фрагмент).

Якщо в оригінальному пакеті встановлено прапор «Не фрагментувати», це запобіжить фрагментацію та призведе до того, що пакети необхідно відкинути. У цьому випадку відправнику слід надсилати помилки, наприклад помилку ICMP типу 3: «Призначення недоступне», код 4: «Потрібна фрагментація та встановлено DF».

Поле Fragment Offset  (всього 13 біт) використовується для вказівки початкової позиції даних у фрагменті по відношенню до початкових даних вихідного IP-пакета. Потім це використовується для повторної збірки даних з усіх фрагментів (надійшли чи ні).

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

Якщо IP-пакет, що містить дані вартістю 800 байт, розбитий на дві рівні частини/фрагменти, кожен з яких несе 400 байтів, то зміщення фрагмента 1- го фрагмента дорівнює 0, а іншого – 50 (400/8).

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


IPv6

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

Немає доступного прапорця «Не фрагментувати », тому все, що вам потрібно зробити, це не створювати фрагменти.

Фрагментацію IP неможливо виконати, якщо PMTUD не використовується. Вузли не можуть використовувати MTU, більший за 1280 байт, що є мінімумом IPv6, якщо вони не реалізують шлях MTU Discovery (PMUTD).

У той час як Path MTU Discovery працює так само, як IPv4, повідомлення про помилку ICMP відрізняється:

(Зображення: packetpushers.net)

Якщо IP-пакет більший за розміром, ніж MCU, тоді маршрутизатор IPv6 повинен відкинути його та надіслати відправнику помилку типу 2 ICMPv6 «Packet Too Big» – код 0.

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

Таким чином, початковий хост не отримуватиме повідомлення Packet Too Big і повторно передасть IP-пакети, які були відкинуті кілька разів, які, безумовно, не досягнуть. Згодом з’єднання буде вважатися нестабільним і закритим. Навіть якщо буде створено новий, проблема повториться.

Поля заголовка, пов’язані з фрагментацією, поміщаються в заголовок розширення, який називається заголовком фрагмента. Це вказується за допомогою поля Next Header (44 значення) у стандартному IPv6 або будь-якому попередньому заголовку розширення.

Як і всі заголовки розширення, цей має довжину 8 байт/64 біти разом зі стандартним заголовком, що призводить до фрагментації IPv6 з більшими накладними витратами, ніж IPv4.

Використані поля заголовка IPv6

Перевірте поля в заголовку розширення фрагменту IPv6:

(Зображення: packetpushers.net)

Поле під назвою Next Header (8 біт) визначає тип заголовка, як-от заголовок протоколу верхнього рівня або заголовок розширення IPv6. Наступні 8 біт резервуються.

13-бітове поле Fragment Offset використовується так само, як IPv4. Після цього зарезервуються наступні 2 біти.

Прапор поля M буде встановлено на 1, а кінцевий фрагмент буде встановлено як поле Більше фрагментів (MF)  IPv4 .

32-бітове поле ідентифікації таке ж, як поле IPv4 із 16 біт, що містить унікальний ідентифікаційний номер для комбінації адрес джерела та адреси призначення. Поле Протокол недоступне в IPv6.


Недоліки фрагментації IP

Вважається, що стек протоколу IP має ненадійний механізм, через який кінцеві хости не можуть визначити максимальний розмір корисного навантаження при спілкуванні через хост IPv4 та IPv6.

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

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

Фрагментація призводить до стрибків у верхній частині шару-3. Так, наприклад, якщо кінцевий хост вважає, що він може використовувати IP-пакети розміром 1500 байт, але стикається з стрибком на своєму шляху розміром MTU 1472, тоді IP-пакет буде розділений на два пакети, в результаті чого буде додано заголовок IPv6 40 байт і заголовок IPv4 20 байт.

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

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


Поширені запитання

Фрагментація IP є життєво важливою для передачі даних, оскільки кожна мережа має різне обмеження розміру для обробки даних. Ця межа також відома як MTU (максимальна одиниця передачі).

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

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


Висновок

На цьому наше детальне керівництво про фрагментацію IP закінчено.

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

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

Якщо у вас виникли запитання щодо IP-адрес та фрагментації, зверніться до нас у коментарях.

Цей веб -сайт використовує файли cookie, щоб покращити ваш досвід. Ми припустимо, що з цим все гаразд, але ви можете відмовитися, якщо захочете. ПрийнятиЧитати далі