Home

Page 10
Page 10
background image

 

 

завершена  –  пакет  не  был  фрагментирован.  Если  же  MF=1  фрагмента  с 
Offset=0,  то  далее  из  поля  Total  Length  первого  фрагмента  можно  узнать 
сколько  байт  данных  принес  получателю  первый  фрагмент.  Следовательно, 
далее необходимо найти пакет с таким значением поля Offset, которое как раз 

и  будет  соответствовать  количеству  байт  первого  фрагмента,  например,  если 
первый  фрагмент  принес  1000  байт  (с  номерами  от  0  до  999),  то  фрагмент, 
который  должен  идти  вслед  за  этим  фрагментов  должен  иметь  Offset=1000. 
Если такого  фрагмента  нет  (или  фрагмента  с  меньшим  Offset),  то  сборка  не 
возможна, если такой фрагмент есть, то его поле данных дописывается к полю 

данных  первого  фрагмента  и  проводиться  проверка  флага  MF  второго 
фрагмента.  Если  он  равен  0,  то  сборка  завершена,  так  как  второй  фрагмент 
был последним, если же MF второго фрагмента равен 1, то значит нужно найти 
такой  фрагмент,  у  которого  Offset  будет  равен  (или  менее)  суммарной  длине 
первых  двух  фрагментов.  Далее  этот  алгоритм  повторяется,  пока  не  будет 
достигнут конец пакета или сборка окажется невозможной.  

Рассмотрим  простой  пример:  какими  будут  комбинации  полей  MF  и 

Fragment Offset у различных пакетов и фрагментов. 
Не фрагментированный пакет: MF=0, Offset=0 
Первый фрагмент: MF=1, Offset=0 
Промежуточный фрагмент: MF=1, Offset=ХХХ 
Последний фрагмент: MF=0, Offset=YYY 
 
Рассмотрим четыре примера: 

1.  Запишем несколько «фрагментов» одного пакета (т.е. поля ID, MF, Offset) 

таким образом, чтобы пакет «собрался»: 

Длина исходного пакета 4440, т.е. 1480+1480+1480 
 

ID 

= A0 B1 

MF  = 1 
Offset= 0 

ID 

= A0 B1 

MF  = 1 
Offset= 1480 

ID 

= A0 B1 

MF  = 0 
Offset= 2960 

 

2.  Запишем несколько «фрагментов» одного пакета (т.е. поля ID, MF, Offset) 

таким  образом,  чтобы  пакет  не  мог  быть  «собран»  из-за  отсутствия 
первого фрагмента: 

Длина исходного пакета 4440, т.е. 1480+1480+1480 
 

ID 

= A0 B1 

MF  = 1 
Offset= 100 

ID 

= A0 B1 

MF  = 1 
Offset= 1480 

ID 

= A0 B1 

MF  = 0 
Offset= 2960 

 

3.  Запишем несколько «фрагментов» одного пакета (т.е. поля ID, MF, Offset) 

таким  образом,  чтобы  пакет  не  мог  быть  «собран»  из-за  отсутствия 
последнего фрагмента: 

Длина исходного пакета 4440, т.е. 1480+1480+1480 
 

ID 

= A0 B1 

ID 

= A0 B1 

ID 

= A0 B1 


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

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