Датаграмма наибольшего размера, которая еще может быть передана через очередную локальную сеть, называется наибольшей передаваемой единицей (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) Приготовить этот фрагмент к повторному тесту на
необходимость фрагментации. Выполнить.
В предыдущей процедуре каждый фрагмент (за исключением последнего) получает максимально разрешенную длину. Альтернатива может заключаться в создании датаграмм, не достигающих максимального размера. Для примера, она может включать процедуру фрагментации, которая повторно делит большие датаграммы пополам до тех пор, пока получающиеся фрагменты не станут короче, чем максимальный допустимый размер передаваемой единицы.