Home

Page 9
Page 9
background image

 

 

нумерации пакетов с целью обеспечения гарантий доставки, так как IP – чисто 
дейтаграммный  протокол.  Это  поле  преследует  только  одну  цель  –  позволить 
приемнику  отличать  фрагменты  одного  пакета  от  фрагментов  другого.  Это 
возможно  благодаря  тому,  что  маршрутизаторы  при  фрагментации  пакетов 

присваивают всем фрагментам некоторого рассеченного на части пакета тот ID 
который  был  у  исходного  пакета.  Следовательно,  когда  узлу  получателю 
приходят IP пакеты с одинаковыми ID, получатель знает, что это – фрагменты 
одного  и  того  же  пакета  и  пытается  собрать  исходный  пакет  из  этих 
фрагментов. Если же получены пакеты с различными ID, это значит, что они не 
принадлежат  одному  пакету.  Так  как  поле  ID  двухбайтовое,  то  после 
достижения  значения  65535  поле  ID  снова  принимает  значение  0  и  начинает 
снова  инкрементироваться.  Это  в  свою  очередь  значит,  что  формально 
возможна ситуация, когда станция получает фрагменты с одинаковыми  ID, но 
они  не  принадлежат  одному  пакету,  так  как  эти  ID  были  присвоены  и 
интервалом  65535  пакетов,  но  такая  ситуация  слишком  маловероятна,  чтобы 
принимать  ее  во  внимание.  Итак,  станция  получатель  «складывает»  в  памяти 

все пришедшие пакеты с одинаковыми ID и пытается собрать из них исходный 
пакет.  Достаточно  ли  у  получателя  сведений,  чтобы  правильно  собрать  пакет 

из  фрагментов?  Разумеется  -  нет,  так  как  не  ясно,  какой  их  фрагментов 
первый, в каком порядке их собирать, не ли пропущенных фрагментов и какой 
фрагмент  является  последним.  Для  ответов  на  эти  вопросы  применяются 
остальные поля второго четырехбайтового слова IP заголовка.  
 

Следующее поле заголовка – флаги, длина 3 бита. Пока рассмотрим лишь 

флаг MF. Эта аббревиатура расшифровывается как «More Fragments». Данный 
флаг  применяется  следующим  образом:  у  всех  фрагментов,  кроме  последнего 
он  равен  1  (т.е.  показывает,  что  будет  еще  фрагменты),  у  последнего 
фрагмента  он  равен  0,  показывая,  что  это  –  последний  фрагмент.  Отсюда 
следует,  что  если  пакет  не  фрагментирован,  то  он  имеет  MF=0,  если  же 
фрагментирован,  то  все  фрагменты  кроме  последнего  имеют  MF=1,  а 

последний  фрагмент  имеет  MF=0.  Если  среди  принятых  фрагментов  нет 
фрагмента  с  MF=0,  это  означает,  что,  по  крайней  мере,  один  фрагмент 
(последний) потерялся и сборка исходного пакета из фрагментов не возможна. 
Зачем показывать, какой из фрагментов последний? Для понимания этого для 
начала  рассмотрим  еще  одно  поле.  Ясно,  что  только  лишь  ID  и  MF  не 
достаточно для правильной сборки: с помощью ID можно отделить фрагменты 
одного пакета от других пакетов, с помощью MF найти последний фрагмент, но 
выстроить  все  предыдущие  пакеты  в  правильном  порядке  и  убедиться  в 
отсутствии пропущенных фрагментов с помощью этих двух полей не возможно.  

Пока  опустим  рассмотрение  флага  DF,  первый  флаг  не  используется  и 

зарезервирован,  рассмотрим  последнее  поле  второго  четырехбайтового  слова 
заголовка:  Fragment  Offset,  длина  13  бит.  Это  поле  позволяет  понять,  какое 

место занимает данный  фрагмент в исходном пакете. Смысл этого  поля очень 
прост:  оно  показывает,  начиная  с  какого  байта  исходного  пакета  начинается 
данный  фрагмент.  Это  означает,  что  фрагмент  со  значением  поля  Fragment 
Offset  =  0  –  первый  фрагмент  исходного  пакета,  так  байты  этого  фрагмента 
занимают  в  исходном  пакете  позицию  начиная  с  нулевой.  Мы  уже  научились 
находить первый и последний фрагменты, как разобраться с промежуточными 
фрагментами,  например,  как  найти  второй  фрагмент?  Очень  просто:  первый 
фрагмент  найти  легко  –  его  поле  Offset=0.  Если  его  MF=0,  то  сборка 


Copyright © 2022 Файлообменник files.d-lan.dp.ua

Использование любых материалов сайта возможно только с разрешения автора.