The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Каталог документации / Раздел "Документация для Linux" / Оглавление документа
next up previous contents index
Next: Пример процедуры сборки Up: Специфиация Previous: Фрагментация и сборка   Contents   Index

Пример процедуры фрагментации

Датаграмма наибольшего размера, которая еще может быть передана через очередную локальную сеть, называется наибольшей передаваемой единицей (maximum transmission unit - MTU).

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

Обозначения:

FO смещение фрагмента
IHL длина Internet заголовка
DF флаг запрета фрагментации
MF флаг появления дополнительных фрагментов
TL общая длина
OFO старое смещение фрагмента
OIHL старая длина Internet заголовка
OMF старое значение флага появление дополнительных фрагментов
OTL старое значение общей длины
NFB количество блоков фрагментации
MTU максимальная длина переноса

Процедура

   IF TL =< MTU THEN отправить датаграмму на следующие процедуры
                     обработки
   ELSE
       IF DF =1 THEN разрушить датаграмму
       ELSE
           создать первый фрагмент
           (1) скопировать исходный Internet заголовок;
           (2) OIHL <- IHL; OTL <- TL; OMF <- MF;
           (3) NFB <- (MTU - IHL*4)/8;
           (4) взять первые NFB*8 октетов данных;
           (5) скорректировать заголовок:
               MF <- 1; TL <- (IHL*4)+(NFB*8);
               пересчитать контрольную сумму;
           (6) направить данный фрагмент на последующие
               процедуры обработки
           создать второй фрагмент:
           (7) выборочно скопировать Internet заголовок (некоторые
               опции не копируются, см. определение опций)
           (8) добавить оставшиеся данные
           (9) скорректировать заголовок
               IHL <- (((OIHL*4)-(длина нескопированных опций))+3)/4;
               TL <- OTL - NFB*8 - (OIHL-IHL)*4;
               FO <- OFO + NFB;  MF <- OMF;
               пересчитать контрольную сумму;
           (10) Приготовить этот фрагмент к повторному тесту на
                необходимость фрагментации. Выполнить.

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



Alex Otwagin 2002-12-16



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру