Home

Page 11
Page 11
background image

 

 

MF  = 1 
Offset= 0 

MF  = 1 
Offset= 1480 

MF  = 1 
Offset= 2960 

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

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

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

ID 

= A0 B1 

MF  = 1 
Offset= 0 

ID 

= A0 B1 

MF  = 0 
Offset= 1480 

ID 

= A0 B1 

MF  = 0 
Offset= 2960 

 

Итого: с помощью ID идентифицируются все фрагменты одного пакета, но 

полю Offset разыскивается первый фрагмент, по сравнению длин фрагментов с 
Offset  находятся  следующие  фрагменты,  сигналом  к  окончанию  сборки 

является фрагмент с MF=0. Однако в рассмотренном нами механизме есть еще 
несколько тонкостей.  

Каково максимальное значение, которое принимает поле Fragment Offset? 

Так как длина этого поля равна 13 бит, то очевидно, максимальное значение, 
которое  может  принять  данное  поле  равно  8191.  Следовательно,  если  поле 
Offset  описывало  бы  смещение  в  БАЙТАХ,  то  самое  большое  возможное 
смещение  было  бы  равно  8191,  и  это  при  потенциально  возможной  длине 
пакета 65535! Это значило бы, что фрагментация по сути возможна только до 
байта  номер  8191,  а  следующий  фрагмент  должен  простираться  до  конца 
пакета, так как дальнейшее указание смещения не возможно. Для того, чтобы 
этого избежать и сделать механизм фрагментации полнофункциональным, поле 
значение Fragment Offset измеряется не в байтах, а в восьмибайтовых словах, 
тогда  самое  большое  возможное  смещение  равно  8191*8=65528,  что  очень 

близко к максимальной длине пакета 65535.  
Тогда, рассмотренный ранее пример имеет вид 

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

ID 

= A0 B1 

MF  = 1 
Offset= 0 

ID 

= A0 B1 

MF  = 1 
Offset= 185 

ID 

= A0 B1 

MF  = 0 
Offset= 370 

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

смещение  меньше,  чем  количество  данных,  уже  собранных  из  предыдущих 

фрагментов? Вполне могут, это не запрещено RFC791, при этом способ сборки 
(какие данные окажутся в собранном пакете: из раннего фрагмента или из тех 
данных,  которые  принес  частично  перекрывающий  его  фрагмент)  остается  на 
усмотрение разработчика стека. 

А что будет, если фрагмент сам по себе достаточно велик для следующей 

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


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

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