Фрагментиране на 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 модулът, който изпраща пакета, задава полето за идентификатор на стойност, която трябва да бъде уникална за дадената двойка подател и получател, докато даденият пакет (или някой от неговите фрагменти) може да съществува в съставната IP мрежа.

Q Полето Time To Live (TTL) заема един байт и определя ограничението от време, през което даден пакет може да се движи в мрежата. Животът на пакета се измерва в секунди и се задава от източника (подателя). Както беше отбелязано в началото на тази глава, след „всяка секунда престой във всеки от рутерите, през които пакетът преминава по време на своето „пътуване“ през мрежата, едно се изважда от текущия му живот; едно също се изважда, ако времето на престой е по-малко от секунда. Тъй като съвременните рутери рядко обработват пакет за повече от една секунда, времето за живот може да се тълкува като максималния брой скокове, които пакетът може да премине. Ако стойността на полето за време на живот стане нула, преди пакетът да достигне

Глава 16 Протокол за взаимодействие

получател, пакетът се унищожава. При повторно сглобяване на фрагменти приемащият хост използва TTL стойността като краен срок за изчакване на липсващи фрагменти.

□ Полето за отместване на фрагмент предоставя на приемника информация за позицията на фрагмента спрямо началото на полето с данниоригинална нефрагментирана опаковка. Така, например, първият фрагмент ще има нулева стойност в полето за отместване. В пакет, който не е фрагментиран, полето за отместване също има стойност нула. Отместването се посочва в байтове и трябва да е кратно на 8 байта.

□ Еднобитов MF (повече фрагменти) флаг, зададен на единица, показва, че пакетът е междинен (не последен) фрагмент. IP модул, изпращащ нефрагментиран пакет, задава MF бита на нула.

□ Флагът DF (Не фрагментирай), зададен на едно, не позволява на рутера да фрагментира дадения пакет. Ако пакет, маркиран по този начин, не може да достигне до получателя без фрагментиране, тогава 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 мрежата, останалите фрагментиса в буферите на рутера.

Сега нека обсъдим как се сглобява фрагментиран пакет на целевия хост.

Имайте предвид, че IP рутерите не сглобяват фрагменти от пакети в по-големи пакети, дори ако има мрежа по пътя, която позволява такова агрегиране. Това е така, защото отделни фрагменти от едно съобщение могат да пътуват по множество пътища в съставната мрежа, така че няма гаранция, че всички фрагменти по пътя им ще преминат през който и да е конкретен рутер.

Ако поне един фрагмент от пакета няма време да пристигне на целевия хост до момента, в който таймерът изтече, тогава не се предприемат действия за дублиране на липсващия фрагмент и всички фрагменти от пакета, получени до този момент, се изхвърлят! ICMP съобщение за грешка се изпраща до хоста, изпратил оригиналния пакет. Това поведение на IP протокола е напълно съвместимо с неговото кредо за „най-доброто усилие“ - да се опитва колкото е възможно повече, но не и да дава никакви гаранции.

Знакът за края на асемблирането е липсата на незапълнени пропуски в полето с данни и пристигането на последния фрагмент (с MF флаг, равен на нула) преди изтичането на времето за изчакване. След като данните бъдат събрани, те могат да бъдат предадени на протокол за овърхед, като TCP.

IP протоколът решава проблема с доставянето на съобщения между възлите на съставна мрежа. Тъй като това е дейтаграма, няма гаранции, че съобщенията ще бъдат доставени надеждно.