RFC: 791
Оригинал: Internet Protocol
Предыдущие версии: RFC 760
Категория: Стандарт Интернета
Дата публикации:
Автор:
Перевод: Николай Малых

RFC 791, Страница 16 из 25

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

Размер максимальной дейтаграммы, которая может быть передана через следующую сеть, называется MTU.

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

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

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

Процедура:

IF TL =< MTU THEN Submit this datagram to the next step
     in datagram processing ELSE IF DF = 1 THEN discard the
datagram ELSE
To produce the first fragment:
(1)  Copy the original internet header;
(2)  OIHL <- IHL; OTL <- TL; OFO <- FO; OMF <- MF;
(3)  NFB <- (MTU-IHL*4)/8;
(4)  Attach the first NFB*8 data octets;
(5)  Correct the header:
     MF <- 1;  TL <- (IHL*4)+(NFB*8);
     Recompute Checksum;
(6)  Submit this fragment to the next step in
     datagram processing;
To produce the second fragment:
(7)  Selectively copy the internet header (some options
     are not copied, see option definitions);
(8)  Append the remaining data;
(9)  Correct the header:
     IHL <- (((OIHL*4)-(length of options not copied))+3)/4;
     TL <- OTL - NFB*8 - (OIHL-IHL)*4);
     FO <- OFO + NFB;  MF <- OMF;  Recompute Checksum;
(10) Submit this fragment to the fragmentation test; DONE.

После выполнения п. 10 процедура завершается (если размер фрагмента не превышает допустимое значение) или повторяется. Эта процедура создает фрагменты одинакового (максимального) размера (за исключением последнего). Могут использоваться и другие процедуры, которые создают фрагменты с размером меньше максимального. Например, процедура фрагментации может использовать повторяющиеся операции деления данных дейтаграммы пополам, пока оно не достигнет приемлемого для передачи размера.

Страница 16 из 25

2007 - 2022 © Русские переводы RFC, IETF, ISOC.