Протокол IP

единицей (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) Приготовить этот фрагмент к повторному тесту на необходимость фрагментации. Выполнить. В предыдущей процедуре каждый фрагмент (за исключением последнего) получает максимально разрешенную длину. Альтернатива может заключаться в создании датаграмм, не достигающих максимального размера. Для примера, она может включать процедуру фрагментации, которая повторно делит большие датаграммы пополам до тех пор, пока получающиеся фрагменты не станут короче, чем максимальный допустимый размер передаваемой единицы. Пример процедуры сборки Для каждой датаграммы идентификатор буфера определяется как объединение полей адреса отправителя, адреса получателя, протокола и идентификации. Если это целая датаграмма (поля fragment offset и more fragments нулевые), то все ресурсы, связанные с этим идентификатором буфера, освобождаются, а сама датаграмма направляется на следующие процедуры обработки. Если следующий фрагмент не связан с этим идентификатором буфера, то выделяются ресурсы для сборки. Они включают буфер данных, буфер заголовка, битовую таблицу фрагментации, поле общей длины данных, а также таймер. Данные из фрагмента помещаются в буфер данных в соответствии со значением полей fragment offset и длины, а также устанавливаются биты в битовой таблице фрагментации согласно полученным блокам фрагментов. Если это первый фрагмент (поле fragment offset нулевое), то его заголовок помещается в буфер заголовка. Если это последний фрагмент (поле more fragments нулевое), то вычисляется общая длина данных. Если этот фрагмент завершает датаграмму (проверяется по установке битов в таблице фрагментации), то датаграмма направляется на следующий этап обработки. В противном случае таймер устанавливается на максимальное из двух: текущее значение таймера и время жизни для данного фрагмента. Выполнение процедуры сборки приостанавливается. Если таймер отсчитал положенное время, то все ресурсы сборки, связанные с данным идентификатором буфера, освобождаются. Первоначальная установка таймера является нижней границей для времени ожидания при сборке. Это происходит потому, что всемя ожидания будет увеличено, если время жизни приходящего фрагмента окажется больше, но не может быть уменьшено. Установка таймера может достигать максимального времени жизни (примерно 4.25 минуты). В настоящее время рекомендуется первоначально устанавливать таймер на 15 секунд. Это значение можно изменить при получении достаночного практического опыта. Заметим, что выбор значения для этого параметра связи связан с емкостью буфера и скоростью получения данных с коммуникационных сетей. Например, скорость получения данных следует умножать на размер буфера (т.е. 10 кбайт/сек * 15 сек = 150 кбайт). Обозначения FO - смещение фрагмента IHL - длина Internet заголовка MF - флаг More Fragments TTL - время жизни NFB - количество фрагментов TL - общая длина TDL - общая длина данных BUFID - идентификатор буфера RCVBT - битовая таблица фрагментации TLB - нижняя граница для значения таймера Процедура (1) BUFID <- отправитель|получатель|протокол|идентификация; (2) IF FO = 0 AND MF = 0 THEN (3) IF буфер с идентификатором BUFID выделены THEN (4) завершить сборку для этого идентификатора BUFID; (5) Приготовить датаграмму для дальнейшей обработки. Запустить обработку (6) ELSE IF буфер для идентификатора BUFID не выделен THEN (7) выделить ресурсы для сборки с идентификатором BUFID TIMER <- TLB; TDL <- 0; (8) перенести данные из фрагмента в буфер данных с идентификатором BUFID, данные с октета FO*8 по октет (TL-(IHL*4))+FO*8; (9) установить биты RCVBT с FO по FO+((TL-(IHL*4)+7)/8); (10) IF MF = 0 THEN TDL <- TL-(IHL*4)+(FO*8) (11) IF FO = 0 THEN поместить заголовок в буфер заголовка (12) IF TDL # 0 AND все биты RCVBT с 0 по (TDL+7)/8 выставлены THEN (14) TL <- TDL+(IHL*4) (15) Приготовить датаграмму к дальнейшей обработке (16) Освободить все ресурсы сборки для этого идентификатора BUFID. Запустить обработку. (17) TIMER <- MAX(TIMER,TTL); (18) приостановить работу до получения следующего фрагмента или сигнала от таймера (19) Сигнал от таймера: Освободить все ресурсы, связанные с этим идентификатором BUFID. В случае, если два или более фрагмента содержат одни и те же данные, либо идентичны или частично перекрываются, то эта процедура будет использовать последнюю полученную копию при создании буфера данных и воссоздании датаграммы. Идентификация Выбор способа идентификации исходит из необходимости уникальной идентификации фрагментов конкретной датаграммы. Модуль протокола, собирающий фрагменты, считает, что они относятся к одной и той же датаграмме, если они имеют общего отправителя, получателя, протокол и идентификатор. Таким образом, отправитель должен выбрать идентификатор таким образом, чтобы он был уникален для данной пары отправителя - получателя, для данного протокола и в течении того времени, пока данная датаграмма (или любой ее фрагмент) может существовать в сети Internet. Очевидно, что модуль протокола, отправляющий датаграммы, должен иметь таблицу идентификаторов, где каждая запись соотносится с каждым отдельным получателем, с которым осуществлялась связь, и указывает последнее значение максимального времени жизни датаграммы в сети Internet. Однако, поскольку поле идентификатора позволяет использовать 65536 различных значений, некоторые хост-компьютеры могут использовать просто уникальные идентификаторы независимо от адреса получателя. Обычно идентификаторы выбирают протоколы более высокого уровня, например модули TCP протокола могут повторно передавать идентичные TCP сегменты. Вероятность правильного приема увеличивалась бы, если повторная передача осуществлялась с тем же самым идентификатором, что и исходная датаграмма, поскольку ее фрагменты могли бы использоваться для сборки правильного TCP сегмента. Тип обслуживания Тип обслуживания (TOS) используется для выбора качества Internet сервиса. Тип обслуживания определяется абстрактными параметрами приоритета, задержки, продолжительности и достоверности. Эти параметры должны отображаться на реальные параметры сервиса для конкретных сетей, через которые проходит данная датаграмма. Приоритет. Независимая единица измерения для важности данной датаграммы. Задержка. Указание задержки важно для датаграмм с этим знаком. Пропускная способность. Для датаграмм с этим знаком важна высокая скорость передачи данных. Достоверность. Для датаграмм с таким типом обслуживания важен более высокий уровень усилий, предпринимаемых для обеспечения достоверности.

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...