Справочник по сетевым протоколам

         

Опции


Опции могут присутствовать в любой датаграмме, но должны всегда быть обработаны. А именно, наличие или отсутствие какой-либо опции дело отправителя, но каждый Internet модуль должен быть в состоянии произвести разбор каждой опции.

Опции могут оканчиваться не на 32-битной границе. В этом случае Internet заголовок может дополняться нулевыми октетами. Первый из них должен интерпретироваться как заключительная опция, а остальные - как октеты выравнивания Internet заголовка по границе.

Каждый Internet модуль должен быть в состоянии реагировать на каждую опцию. Например, опция безопасности требует классификации, внесения ограничений, или передачи по изолированному пути.


Options (опции) поле переменной длины. Опции могут появиться в датаграммах, а могут и не появляться. Признаком наличия опций является превышение указанной в первом байте длины заголовка значения длины фиксированной части заголовка (=20).

Длина поля опций Lopc определяется по следующей формуле:

Lopc=4*Lzag - 20;

где Lzag - значение поля длина заголовка в первом байте,

20 - длина фиксированной части заголовка.

Опции должны поддерживаться всеми Internet модулями (хостами и шлюзами). Не обязательно каждая конкретная датаграмма несет опции, но нести их все же может. В некоторых приложениях опция секретности должна присутствовать во всех датаграммах. Поле опций не имеет постоянной длины. Опций может не быть, а может быть несколько.

Типы и форматы полей опций можно найти здесь.



Опциональные поля протокола IP


Существуют два формата опции:

- единичный октет с указанием типа опции

- единичный октет с указанием типа опции, октет для указания длины опции, и, наконец, октеты собственно данных.

Октет длины поля учитывает октет типа опции, сам себя и октеты с данными для опции.

Считается, что октет типа опции состоит из трех полей:



1 бит флаг копирования
2 бита класс опции
5 бит номер опции

Флаг копирования показывает, что эта опция копируется во все фрагменты при фрагментации.

0 - не копируется
1 - копируется

Классы опции

0 - управление
1 - резервировано
2 - отладка и измерения
3 - резервировано

Определены следующие опции Internet

класс номер длина описание
0 0 - Конец списка опций. Эта опция занимает лишь один октет, октет длины отсутствует.
0 1 - Нет операции. Эта опция занимает лишь один октет. Не имеет октета длины.
0 2 11 Безопасность. Используется для поддержания безопасности, изоляции, разделения на группы пользователей (TCC), обработки кодов ограничения, соответствующих DOD требованиям.
0 3 перем Потеря маршрута отправителя. Используется для передачи Internet датаграммы, основанной на имеющейся у отправителя информации
0 9 перем Определение маршрута отправителя. Используется для передачи Internet датаграммы, основанной на имеющейся у отправителя информации
0 7 перем Запись маршрута. Используется для отслеживания проходимого Internet датаграммой маршрута.
0 8 4 Идентификатор маршрута. Используется для поддержки идентификации потока.
2 4 перем Временной штамп Internet.

Отдельные описания опций

Тип 0 00000000 End of Option List (конец списка опций)

Эта опция обозначает конец списка опций. Он может не совпадать с окончанием Internet заголовка, обозначаемым полем Internet header length. Эта опция используется после всех опций, но не после каждой. Она необходима только в том случае, если конец списка опций не совпал с окончанием Internet заголовка.

Может быть скопирован, внесен или удален при фрагментации, или по какой-либо другой причине.


Тип 1 00000001 No operation (нет действий)
Эта опция может быть использована между другими опциями. Ее целью может служить, к примеру, выравнивание очередной опции по 32- битной границе. Может быть скопирована, внесена или удалена при фрагментации и по любой другой причине.

Тип 130 Security (безопасность)
Эта опция дает способ хост-компьютерам отправлять параметры, связанные с безопасностью, закрытостью, введением ограничений и параметрами TCC (закрытой группой пользователей). Формат этой опции следующий: (длина 11 октетов)

10000010 00001011 SSS...SSS CCC...CCC HHH...HHH TCC
Поле S (security) 16 бит

Указывает один из 16 уровней безопасности (восемь из которых зарезервировано).

00000000 00000000 - не классифицировано
11110001 00110101 - конфиденциальный
01111000 10011010 - EFTO
10111100 01001101 - MMMM
01011110 00100110 - PROG
10101111 00010011 - ограниченный
11010111 10001000 - секретный
01101011 11000101 - особо секретный
00110101 11100010 - резервировано
10011010 11110001 - резервировано
01001101 01111000 - резервировано
00100100 10111101 - резервировано
00010011 01011110 - резервировано
10001001 10101111 - резервировано
11000100 11010110 - резервировано
11100010 01101011 - резервировано
Поле C (compartments) 16 бит

Нулевое значение во всех позициях используется когда передача информации не ограничена. Остальные значения для этого поля можно получить от Секретного Оборонного Агентства.

Поле H (введение ограничений) 16 бит

Значения для управления и внесения меток являются буквенно- цифровыми диаграммами и определены в документе DIAM 65-19 "Standard Security Markings".

Поле TCC (поле управления переносом) 24 бита

Дает средства для отслеживания процесса отделения, его значения контролируются группами заинтересованных подписчиков. Значения TCC имеют три поля для записей и могут быть получены из документа HQ DCA Code 530.

Рассматриваемый тип должен копироваться при фрагментации.



Эта опция появляется в датаграмме не более одного раза.

Тип 131 Loose Source and Record Route

(Потеря отправителя и запись маршрута)
10000011 длина указатель данные о маршруте
Опция потери отправителя и записи маршрута (LSRR) обеспечивает средства, позволяющие отправителю Internet датаграммы передавать информацию, используемую шлюзами при передаче датаграмм по назначению, а также записывать информацию о маршруте.

Опция начинается с кода типа. Второй октет - октет длины, которая учитывает код типа опции и сам себя, а также октет указателя.

Третий октет является указателем на данные о маршруте, он определяет октет, с которого начинается следующий адрес отправителя, подлежащий обработке. Указатель отсчитывается от начала рассматриваемой опции, а его наименьшее допустимое значение - 4.

Данные о маршруте состоят из ряда Internet адресов. Каждый Internet адрес - это 32 бита или 4 октета. Если указатель превышает длину, то маршрут отправителя пуст (поле с записями маршрута заполнено), а маршрутизация должна основываться на значениях поля с адресом получателя.

Если адрес, записанный в поле адреса получателя, был достигнут, а указатель не превысил длину, то следующий адрес в маршруте отправителя замещает адрес в поле с адресом получателя. Записанный адрес маршрута заменяет только что использованный адрес отправителя, а указатель увеличивается на 4.

Записанный адрес маршрута является собственным Internet адресом Internet модуля, известным во внешнем окружении, куда эта датаграмма направляется. Эта процедура замещения исходного маршрута записанным маршрутом (хотя при обратном порядке он должен использоваться как маршрут отправителя) означает, что данная опция (а также и весь IP заголовок) сохраняет постоянный размер при прохождении датаграммы по Internet системе.

Эта опция называется потерей маршрута отправителя (loose source route), поскольку шлюз или IP хост могут использовать любые маршруты через любое количество других промежуточных шлюзов для достижения следующего адреса в рассматриваемом маршруте.



При фрагментации опция должна копироваться. В датаграмме она должна появляться не более одного раза.

Тип 137 Strict Source and Record Route

(Уточнить отправитель и записать маршрут)
10001001 длина указатель данные о маршруте
Опция "уточнить отправитель и записать маршрут" (SSRR) дает средства отправителю Internet датаграммы для поддержания информации о маршрутизации, которая должна использоваться шлюзами при передаче датаграммы по назначению, а также для записи этой информации.

Опция начинается с кода типа. Второй октет - длина опции, которая учитывает код типа опции и октет длины, октет указателя (3 октета с данными о маршруте). Третий октет является указателем на данные маршрута, определяющим октет, с которого начинается следующий адрес отправителя, подлежащий обработке. Указатель отсчитывается с начала этой опции, а наименьшее допустимое значение указателя - 4.

Данные о маршруте состоят из серии Internet адресов. Каждый Internet адрес - это 32 бита или 4 октета. Если указатель превышает длину, то маршрут отправителя пуст (записываемый маршрут полон), а маршрутизация основывается на значении поля с адресом получателя.

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

Записанный адрес маршрута - это собственный Internet - адрес Internet - модуля, как он был бы распознан во внешней среде, куда эта датаграмма направляется. Эта процедура замещения маршрута отправителя записанным маршрутом (хотя в обратном порядке он должен использоваться как маршрут отправителя) означает, что опция (и весь IP заголовок) сохраняет постоянный размер при прохождении датаграммы через Internet систему.

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



Опция должна копироваться при фрагментации. Появляется не более одного раза в датаграмме.

Тип 7 Record Route (Записать маршрут)
00000111 длина указатель данные о маршруте
Опция записи маршрута дает средства для записи маршрута Internet датаграммы.

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

Указатель отсчитывается от начала рассматриваемой опции, а его наименьшее допустимое значение - 4.

Записываемый маршрут состоит из серии Internet адресов. Каждый Internet адрес - это 32 бита или 4 октета. Если указатель больше, чем длина опции, то поле с записываемым маршрутом заполнено. Хост - компьютер, создающий эту опцию, должен зарезервировать поле с данными о маршруте и достаточным размером, с тем, чтобы оно вместило все ожидаемые адреса. Размер этой опции не изменяется при добавлении адресов. Первоначальное содержимое поля под данные о маршруте должно быть нулевым.

Когда Internet модуль направляет датаграмму, он проверяет ее на присутствие рассматриваемой опции с записываемым маршрутом. Если она присутствует, то он вставляет свой собственный Internet адрес в качестве распознанного во внешней среде, куда эта датаграмма направлена. Вставка осуществляется в опцию записи маршрута, в то место, на которое указывает октет указателя. Указатель затем увеличивается на 4.

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

При фрагментации не копируется, присутствует лишь в первом фрагменте.



В датаграмме присутствует не более одного раза.

Тип 136 (длина 4) Stream Identifier (Идентификатор потока)
10001000 00000010 идентификатор потока
Эта опция дает средства для поддержания 16-битовой SATNET идентификации потока в сетях, которые первоначально не поддерживали потоковую концепцию. Опция должна копироваться при фрагментации. В датаграмме появляется не более одного раза.

Тип 68 Internet timestamp (Временной штамп Internet)
01000100 длина указатель oflw flg
Internet адрес
Timestamp
Длина - это количество октетов в опции, которое учитывает октеты типа, длины, указателя и overflow/flag (максимальная длина 40 октетов).

Указатель - это количество октетов от начала этой опции до конца временных штампов, плюс единица (т.е. он указывает на октет, с которого начинается свободное место для следующего временного штампа). Наименьшее допустимое значение - 5. Поле временного штампа считается заполненным, когда указатель превышает длину опции.

Overflow (oflw, переполнение 4 бита) - это количество IP модулей, которые не могут произвести регистрацию временных штампов по причине отсутствия свободного места.

Flag (flg, флаги 4 бита) - это

0 - оставлять лишь временные штампы, размещенные в следующих друг за другом 32-битных словах
1 - каждому временному штампу предшествует Internet адрес регистрируемого объекта
3 - поля Internet адресов определены заранее. IP модуль лишь регистрирует свой временной штамп если его собственный адрес совпадает со следующим указанным Internet адресом.
Timestamp - это выровненный по правой границе 32-битный временной штамп в миллисекундах (относительно полуночи по Единому Времени).

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

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

Если поле с временными штампами уже заполнено (указатель превышает длину опции), то датаграмма передается без вставки временного штампа, а счетчик переполнения увеличивается на единицу.

Если имеется место, но оно недостаточно для вставки полного временного штампа, или же счетчик переполнения сам переполнен, то исходная датаграмма рассматривается как ошибочная и уничтожается. И в том, и в другом случае на хост-отправитель должно посылаться сообщение о проблеме с ICMP параметром.

Опция временного штампа не копируется при фрагментации, а сохраняется в первом фрагменте. В датаграмме появляется не более одного раза. <



table border="0" cellpadding="0" cellspacing="0" width="100%">




Описание функций


Функция или цель протокола Internet состоит в передаче датаграммы через набор объединенных компьютерных сетей. Это осуществляется посредством передачи датаграмм от одного модуля Internet к другому до тех пор, пока не будет достигнут получатель. Модули Internet находятся на хостах и шлюзах системы Internet. Датаграммы направляются с одного модуля Internet на другой через конкретные компьютерные сети, основанные на интерпретации Internet адресов. Таким образом, одним из важных механизмов протокола Internet является Internet адрес.

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

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

Адреса имеют фиксированную длину четыре октета (32 бита). Адрес начинается с сетевого номера, за которым следует локальный адрес (называемый полем остатка "rest"). Существуют три формата или класса адресов Internet. В классе a самый старший бит нулевой. Следующие 7 бит определяют сеть. а последние 24 бита - локальный адрес. В классе b самые старшие два бита равны соответственно 1 и 0, следующие 14 бит определяют сеть, а последние 16 бит - локальный адрес. В классе с три самых старших бита равны соответственно 1,1 и 0, следующие 21 бит определяют сеть, а последние 8 бит - локальный адрес.

При отображении карты Internet адресов на адреса локальной сети следует соблюдать осторожность. Единичный хост-компьютер должен уметь работать так, как если бы на его месте существовало несколько отдельных хост-компьютеров для использования нескольких адресов Internet. Некоторые хост-компьютеры будут также иметь несколько физических интерфейсов (multi-homing).

Таким образом, следует обеспечить каждый хост-компьютер несколькими физическими сетевыми интерфейсами, имеющими по несколько логических адресов Internet.

Примеры построения карты адресов можно найти в документе "Address Mapping".  Фрагментация. Фрагментация Internet датаграммы необходима, когда эта датаграмма возникает в локальной сети, позволяющей работать с пакетами большого размера, и затем должна пройти к получателю через другую локальную сеть, которая ограничивает пакеты меньшим размером.

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

Фрагментация, перенос и сборка в локальной сети, невидимые для модуля Internet протокола, называются внутрисетевой фрагментацией и могут быть всегда использованы.

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

Смещение фрагмента и длина определяют кусок исходной датаграммы, принесенный этим фрагментом. Флаг "more fragments" показывает (посредством перезагрузки) появление последнего фрагмента. Эти поля дают достаточное количество информации для сборки датаграмм.

Поле идентификации позволяет отличить фрагменты одной датаграммы от фрагментов другой. Модуль Internet, отправляющий Internet датаграмму, устанавливает в поле идентификации значение, которое должно быть уникальным для данной пары отправитель - получатель, а также время, в течении которого датаграмма будет активна в системе Internet. Модуль протокола, отправляющий нерасчлененную датаграмму, устанавливает в нуль флаг "more fragments" и смещение во фрагменте.

Чтобы расчленить большую Internet датаграмму, модуль протокола Internet (например, шлюз), создает две новые Internet датаграммы и копирует содержимое полей Internet заголовка из большой датаграммы в оба новых Internet заголовка. Данные из старой датаграммы делятся на две части по границе на очередном восьмом октете (64 бита). Полученная таким образом вторая часть может быть кратна 8 октетам, а может и не быть, но первая часть кратна всегда. Заказывается количество блоков первой части NFB (количество блоков фрагмента). Первая часть данных помещается в первую новую Internet датаграмму, в поле общей длины помещается длина первой датаграммы. Флаг "more fragments" устанавливается в единицу. Вторая часть данных помещается во вторую новообразованную Internet датаграмму, в поле общей длины заносится длина второй датаграммы. В поле смещения фрагмента во второй Internet датаграмме устанавливается значение такого же поля в исходной большой датаграмме, увеличенное на NFB.

Эта процедура может быть обобщена на случай многократного расщепления исходной датаграммы.

Чтобы собрать фрагменты Internet датаграммы, модуль протокола Internet (например, модуль на хост-компьютере) объединяет Internet датаграммы, имеющие одинаковые значения в полях идентификатора, отправителя, получателя и протокола. Собственно объединение заключается в помещении данных из каждого фрагмента в позицию, указанную в заголовке Internet пакета в поле "fragment offset". Первый фрагмент будет иметь в поле "fragment offset" нулевое значение, а последний фрагмент будет иметь флаг "more fragments", вновь установленный в нуль. <



Ошибки


Ошибки Internet заголовка могут быть оглашены посредством ICMP сообщений. <



Отображение физических адресов на IP-адреса: протоколы ARP и RARP


В протоколе IP-адрес узла, то есть адрес компьютера или порта маршрутизатора, назначается произвольно администратором сети и прямо не связан с его локальным адресом, как это сделано, например, в протоколе IPX. Подход, используемый в IP, удобно использовать в крупных сетях и по причине его независимости от формата локального адреса, и по причине стабильности, так как в противном случае, при смене на компьютере сетевого адаптера это изменение должны бы были учитывать все адресаты всемирной сети Internet (в том случае, конечно, если сеть подключена к Internet'у).

Локальный адрес используется в протоколе IP только в пределах локальной сети при обмене данными между маршрутизатором и узлом этой сети. Маршрутизатор, получив пакет для узла одной из сетей, непосредственно подключенных к его портам, должен для передачи пакета сформировать кадр в соответствии с требованиями принятой в этой сети технологии и указать в нем локальный адрес узла, например его МАС-адрес. В пришедшем пакете этот адрес не указан, поэтому перед маршрутизатором встает задача поиска его по известному IP-адресу, который указан в пакете в качестве адреса назначения. С аналогичной задачей сталкивается и конечный узел, когда он хочет отправить пакет в удаленную сеть через маршрутизатор, подключенный к той же локальной сети, что и данный узел.

Для определения локального адреса по IP-адресу используется протокол разрешения адреса Address Resolution Protocol, ARP. Протокол ARP работает различным образом в зависимости от того, какой протокол канального уровня работает в данной сети - протокол локальной сети (Ethernet, Token Ring, FDDI) с возможностью широковещательного доступа одновременно ко всем узлам сети, или же протокол глобальной сети (X.25, frame relay), как правило не поддерживающий широковещательный доступ. Существует также протокол, решающий обратную задачу - нахождение IP-адреса по известному локальному адресу. Он называется реверсивный ARP - RARP (Reverse Address Resolution Protocol) и используется при старте бездисковых станций, не знающих в начальный момент своего IP-адреса, но знающих адрес своего сетевого адаптера.


В локальных сетях протокол ARP использует широковещательные кадры протокола канального уровня для поиска в сети узла с заданным IP-адресом.

Узел, которому нужно выполнить отображение IP-адреса на локальный адрес, формирует ARP запрос, вкладывает его в кадр протокола канального уровня, указывая в нем известный IP-адрес, и рассылает запрос широковещательно. Все узлы локальной сети получают ARP запрос и сравнивают указанный там IP-адрес с собственным. В случае их совпадения узел формирует ARP-ответ, в котором указывает свой IP-адрес и свой локальный адрес и отправляет его уже направленно, так как в ARP запросе отправитель указывает свой локальный адрес. ARP-запросы и ответы используют один и тот же формат пакета. Так как локальные адреса могут в различных типах сетей иметь различную длину, то формат пакета протокола ARP зависит от типа сети. На рисунке 3.2 показан формат пакета протокола ARP для передачи по сети Ethernet.

0 8 16 31

Тип сети Тип протокола
Длина локального адреса Длина сетевого адреса Операция
Локальный адрес отправителя (байты 0 - 3)
Локальный адрес отправителя (байты 4 - 5) IP-адрес отправителя (байты 0-1)
IP-адрес отправителя (байты 2-3) Искомый локальный адрес (байты 0 - 1)
Искомый локальный адрес (байты 2-5)
Искомый IP-адрес (байты 0 - 3)
Рис. 3.2. Формат пакета протокола ARP

В поле типа сети для сетей Ethernet указывается значение 1. Поле типа протокола позволяет использовать пакеты ARP не только для протокола IP, но и для других сетевых протоколов. Для IP значение этого поля равно 080016.

Длина локального адреса для протокола Ethernet равна 6 байтам, а длина IP-адреса - 4 байтам. В поле операции для ARP запросов указывается значение 1 для протокола ARP и 2 для протокола RARP.

Узел, отправляющий ARP-запрос, заполняет в пакете все поля, кроме поля искомого локального адреса (для RARP-запроса не указывается искомый IP-адрес). Значение этого поля заполняется узлом, опознавшим свой IP-адрес.

В глобальных сетях администратору сети чаще всего приходится вручную формировать ARP-таблицы, в которых он задает, например, соответствие IP-адреса адресу узла сети X.25, который имеет смысл локального адреса.В последнее время наметилась тенденция автоматизации работы протокола ARP и в глобальных сетях. Для этой цели среди всех маршрутизаторов, подключенных к какой-либо глобальной сети, выделяется специальный маршрутизатор, который ведет ARP-таблицу для всех остальных узлов и маршрутизаторов этой сети. При таком централизованном подходе для всех узлов и маршрутизаторов вручную нужно задать только IP-адрес и локальный адрес выделенного маршрутизатора. Затем каждый узел и маршрутизатор регистрирует свои адреса в выделенном маршрутизаторе, а при необходимости установления соответствия между IP-адресом и локальным адресом узел обращается к выделенному маршрутизатору с запросом и автоматически получает ответ без участия администратора.


Отображение символьных адресов на IP-адреса: служба DNS


DNS (Domain Name System) - это распределенная база данных, поддерживающая иерархическую систему имен для идентификации узлов в сети Internet. Служба DNS предназначена для автоматического поиска IP-адреса по известному символьному имени узла. Спецификация DNS определяется стандартами RFC 1034 и 1035. DNS требует статической конфигурации своих таблиц, отображающих имена компьютеров в IP-адрес. Подробнее...



Padding (Выравнивание)


Выравнивание Internet заголовка используется для того, чтобы убедиться в том, Internet заголовок заканчивается на 32-битной границе. Выравнивание осуществляется нулями. <



Порядок передачи данных


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

01234567 89012345 67890123 45678901
1 2 3 4
5 6 7 8
9 10 11 12

Рис. 10 Порядок передачи байтов

Октет представляет собой число, для которого самый левый бит на диаграмме является самым старшим или самым значащим битом. Так бит, отмеченный нулем, является наиболее значащим битом. Например, следующая диаграмма представляет число 170 (десятичное)

0 1 2 3 4 5 6 7
1 0 1 0 1 0 1 0

Рис. 11 Старшинство битов

Аналогично, если многооктетное поле представляет число, то самый левый бит в этом поле является самым значащим битом. При передаче многооктетного числа самый значащий октет передается первым.

 



Пример минимальной Internet датаграммы, несущей


Пример минимальной Internet датаграммы, несущей данные

Ver = 4 IHL = 5 Type of Service Total Length = 21
Identification = 111 Flg = 0 Fragment Offset = 0
Time = 123 Protocol = 1 Header Checksum
Source Address
Destination Address
data .

Рис. 5 Пример Internet датаграммы
Напомним, что каждая метка означает место для одного бита. Здесь приведена Internet датаграмма версии 4 Internet протокола. Internet заголовок состоит из пяти 32 битных слов, а общая длина датаграммы составляет 21 октет. Данная датаграмма является полноценной датаграммой (а не фрагментом).


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

Ver = 4 IHL = 5 Type of Service Total Length = 472
Identification = 111 Flg = 0 Fragment Offset = 0
Time = 123 Protocol = 6 Header Checksum
Source Address
Destination Address
data
data

data
data .

Рис. 6 Пример Internet датаграммы
Теперь приведем первый фрагмент, который возникает при расщеплении исходной датаграммы по границе после 256 октета данных.

Ver = 4 IHL = 5 Type of Service Total Length = 276
Identification = 111 Flg = 1 Fragment Offset = 0
Time = 119 Protocol = 6 Header Checksum
Source Address
Destination Address
data
data

data
data

Рис. 7 Пример Internet фрагмента
и второй фрагмент

Ver = 4 IHL = 5 Type of Service Total Length = 216
Identification = 111 Flg = 0 Fragment Offset = 32
Time = 119 Protocol = 6 Header Checksum
Source Address
Destination Address
data
data

data
data .

Рис. 8 Пример Internet заголовка


Здесь мы показываем пример, когда датаграмма имеет опции

Ver = 4 IHL = 8 Type of Service Total Length = 576
Identification = 111 Flg = 0 Fragment Offset = 32
Time = 123 Protocol = 6 Header Checksum
Source Address
Destination Address
Opt.Code = x Opt.Len. = 3 option value Opt.Code = x
Opt.Len. = 4 option value Opt.Code = 1
Opt. Code = y Opt.Len. = 3 option value Opt. Code = 0
data
data

data

Рис. 9 Пример Internet датаграммы

Пример интерфейса с вышестоящим уровнем


Два примера вызовов, приведенные ниже, удовлетворяют запросы пользователя в общении с Internet протоколом (символ "=>" означает возвращаемое значение).

SEND(src,dst,prot,TOS,TTL,BufPTR,len,Id,DF,opt => result)

где

src - адрес отправителя
dst - адрес получателя
prot - протокол
TOS - тип сервиса
TTL - время жизни
BufPTR - указатель буфера
len - длина данных в буфере
Id - идентификатор
DF - запрет фрагментации
opt - опции
result - ответ:
Ok - успешная посылка датаграммы
Error - ошибка в аргументах функции или в локальной сети

Заметим, что тип сервиса TOS включает приоритет, а требование безопасности передается в качестве опции.

RECV(BufPTR,prot => result,src,dst,TOS,len,opt)

BufPTR - указатель буфера
prot - протокол
result - ответ:
Ok - успешное получение датаграммы
Error - ошибка в аргументах
len - длина буфера
src - адрес отправителя
dst - адрес получателя
TOS - тип сервиса
opt - опции

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

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

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

Сделанный пользователем запрос RECV может быть немедленно удовлетворен ждущей этого датаграммой или же он может быть задержан до получения соответствующей датаграммы.

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

Реализация протокола может допускать или даже требовать применения запроса к Internet модулю для обозначения заинтересованности, или же, наоборот, использование исключительно какого-либо класса датаграмм (т.е. всех датаграмм, которые имеют в поле протокола определенное значение).

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



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


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

Приоритет


111 - управление сетью
110 - межсетевое управление
101 - CRITIC/ECP
100 - более, чем мгновенно
011 - мгновенно
010 - немедленно
001 - приоритетно
000 - обычный маршрут

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

Тип обслуживания используется для указания типа обработки датаграммы при ее прохождении через систему Internet. Примеры отображения типа обслуживания в протоколе Internet на реальные услуги, предоставляемые такими сетями, как AUTODIN II, ARPANET, SATNET и PRNET даны в документе "Service Mapping" [8]. Значение "управление сетью" следует присваивать приоритету только для использования внутри локальной сети. Управление и реальное использование этого аргумента должно находиться в согласии с каждой применяющей его сетью. Аргумент "межсетевое управление" предназначен только для использования шлюзами, берущими на себя управление. Если вышеописанные аргументы приоритета находят применение в какой-либо сети, то это означает, что данная сеть может управлять приемом и использованием этих аргументов.



Protocol (Протокол) 8 бит


Это поле показывает, какой протокол следующего уровня использует данные из Internet датаграммы. Значение поля определяется рекомендациями RFC (RFC1700). Неполный список основных типов протоколов приведен здесь.



Протокол ICMP


Протокол Internet (IP) используется для обработки датаграммы, передаваемой между хост-компьютерами в системе объединенных сетей. Устройства, осуществляющие соединение различных сетей, называются шлюзами. Для обеспечения управления шлюзы общаются друг с другом посредством протокола Gateway to Gateway Protocol (GGP). Порой шлюз или хост-компьютер, получающий данные, обменивается информацией с хост-компьютером, отправляющим эти данные. Именно для таких целей используется данный протокол - протокол контрольных сообщений Internet (ICMP). ICMP использует основные свойства протокола Internet (IP), как если бы ICMP являлся протоколом более высокого уровня. Однако фактически ICMP является составной частью протокола Internet и должен являться составной частью каждого модуля IP.

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

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

Сообщения ICMP протокола, как правило, оповещают об ошибках, возникающих при обработке датаграмм. Чтобы проблемы с передачей сообщений не вызывали появление новых сообщений, чтобы это в свою очередь не привело к лавинообразному росту количества сообщений, циркулирующих в сети, констатируется, что нельзя посылать сообщения о сообщениях. Также констатируется, что ICMP сообщения можно посылать только о проблемах, возникающих при обработке нулевого фрагмента в сегментированной датаграмме (нулевой фрагмент имеет нуль в поле смещения фрагмента). <



Протокол ICMPv6 отличается от ICMPv4




Протокол ICMPv6 отличается от ICMPv4 только теми параметрами, которые напрямую связаны со структурой IP-пакета: изменился идентификатор ICMPv6, который определяет тип заголовка (Next Header), изменились коды типов сообщений ICMPv6, добавились параметры для типов сообщений, которые работают с вложенными заголовками и т. д.

Поскольку работа и структура сообщений ICMP зависит, в основном, от принадлежности сообщения к тому или иному типу, и различие или сходство протоколов также будет зависеть от типа передаваемого сообщения.

Подробное описание ICMPv6 можно найти в RFC-1885. <


Протокол IP


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

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



с тех пор основные принципы


Развитие стека TCP/IP: протокол IPv.6

Технология стека TCP/IP сложилась в основном в конце 1970-х годов и с тех пор основные принципы работы базовых протоколов, таких как IP, TCP, UDP и ICMP, практически не изменились. Однако, сам компьютерный мир за эти годы значительно изменился, поэтому долго назревавшие усовершенствования в технологии стека TCP/IP сейчас стали необходимостью.

Основными обстоятельствами, из-за которых требуется модификация базовых протоколов стека TCP/IP, являются следующие.













Повышение производительности компьютеров и коммуникационного оборудования. За время существования стека производительность компьютеров возросла на два порядка, объемы оперативной памяти выросли более чем в 30 раз, пропускная способность магистрали Internet в Соединенных Штатах выросла в 800 раз.
Появление новых приложений. Коммерческий бум вокруг Internet и использование ее технологий при создании intranet привели к появлению в сетях TCP/IP, ранее использовавшихся в основном в научных целях, большого количества приложений нового типа, работающих с мультимедийной информацией. Эти приложения чувствительны к задержкам передачи пакетов, так как такие задержки приводят к искажению передаваемых в реальном времени речевых сообщений и видеоизображений. Особенностью мультимедийных приложений является также передача очень больших объемов информации. Некоторые технологии вычислительных сетей, например, frame relay и ATM, уже имеют в своем арсенале механизмы для резервирования полосы пропускания для определенных приложений. Однако эти технологии еще не скоро вытеснят традиционные технологии локальных сетей, не поддерживающие мультимедийные приложения (например, Ethernet). Следовательно, необходимо компенсировать такой недостаток средствами сетевого уровня, то есть средствами протокола IP.
Бурное расширение сети Internet. В начале 90-х годов сеть Internet расширялась очень быстро, новый узел появлялся в ней каждые 30 секунд, но 95-й год стал переломным - перспективы коммерческого использования Internet стали отчетливыми и сделали ее развитие просто бурным. Первым следствием такого развития стало почти полное истощение адресного пространства Internet, определяемого полем адреса IP в четыре байта.
Новые стратегии администрирования. Расширение Internet связано с его проникновением в новые страны и новые отрасли промышленности. При этом в сети появляются новые органы администрирования, которые начинают использовать новые методы администрирования. Эти методы требуют появления новых средств в базовых протоколах стека TCP/IP.

<



/p>

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

Основным предложением по модернизации протокола IP является предложение, разработанное группой IETF. Сейчас принято называть ее предложение версией 6 - IPv6, а все остальные предложения группируются под названием IP Next Generation, IPng.

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

Использование более длинных адресов. Новый размер адреса - наиболее заметное отличие IPv6 от IPv4. Версия 6 использует 128-битные адреса.
Гибкий формат заголовка. Вместо заголовка с фиксированными полями фиксированного размера (за исключением поля Резерв), IPv6 использует базовый заголовок фиксированного формата плюс набор необязательных заголовков различного формата.
Поддержка резервирования пропускной способности. В IPv6 механизм резервирования пропускной способности заменяет механизм классов сервиса версии IPv4.
Поддержка расширяемости протокола. Это одно из наиболее значительных изменений в подходе к построению протокола - от полностью детализированного описания протокола к протоколу, который разрешает поддержку дополнительных функций.
Литература



Подробная информация о протоколе IPv6 и его использовании можно найти в RFC-1752, RFC- 1826, RFC- 1827, RFC – 1883, RFC- 1885, RFC- 1887, RFC- 1924, RFC- 1971, RFC 2073.

Протокол передачи видео- и аудиоинформации в реальном масштабе времени — RTP


Стремительный рост Internet предъявляет новые требования к скорости и объемам передачи данных. И для того чтобы удовлетворить все эти запросы, одного увеличения емкости сети недостаточно, необходимы разумные и эффективные методы управления графиком и контролем загруженности линий передачи.

В приложениях реального времени отправитель генерирует поток данных с постоянной скоростью, а получатель (или получатели) должен предоставлять эти данные приложению с той же самой скоростью. Такие приложения включают, например, аудио- и видеоконференции, живое видео, удаленную диагностику в медицине, компьютерную телефонию, распределенное интерактивное моделирование, игры, мониторинг в реальном времени и др.

Наиболее широко используемый протокол транспортного уровня — это TCP. Несмотря на то что TCP позволяет поддерживать множество разнообразных распределенных приложений, он не подходит для приложений реального времени.

Эту задачу и призван решить новый транспортный протокол реального времени — RTP (Real-Time Transport Protocol), который гарантирует доставку данных одному или более адресатам с задержкой в заданных пределах, т. е. данные могут быть воспроизведены в реальном времени.

Принципы построения протокола RTP

RTP не поддерживает каких-либо механизмов доставки пакетов, обеспечения достоверности передачи или надежности соединения. Эти все функции возлагаются на транспортный протокол. RTP работает поверх UDP и может поддерживать передачу данных в реальном времени между несколькими участниками RTP-сеанса.

Примечание

Для каждого участника RTP сеанс определяется парой транспортных адресов назначения пакетов (один сетевой адрес — IP и пара портов: RTP и RTCP).

Пакеты RTP содержат следующие поля: идентификатор отправителя, указывающий, кто из участников генерирует данные, отметки о времени генерирования пакета, чтобы данные могли быть воспроизведены принимающей стороной с правильными интервалами, информация о порядке передачи, а также информация о характере содержимого пакета, например, о типе кодировки видеоданных (MPEG, Indeo и др.).


Наличие такой информации позволяет оценить величину начальной задержки и объема буфера передачи.



Примечание



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

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

Более простое устройство — транслятор, создает один исходящий пакет RTP для каждого поступающего пакета RTP. Этот механизм может изменить формат данных в пакете или использовать иной комплект низкоуровневых протоколов для передачи данных из одного домена в другой.



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



Методы контроля работы



Протокол RTP используется только для передачи пользовательских данных — обычно многоадресной — всем участникам сеанса. Совместно с RTP работает протокол RTCP (Real-time Transport Control Protocol), основная задача которого состоит в обеспечении управления передачей RTP. RTCP использует тот же самый базовый транспортный протокол, что и RTP (обычно UDP), но другой номер порта.

RTCP выполняет несколько функций:

Обеспечение и контроль качества услуг и обратная связь в случае перегрузки. Так как RTCP-пакеты являются многоадресными, все участники сеанса могут оценить, насколько хороши работа и прием других участников. Сообщения отправителя позволяют получателям оценить скорость данных и качество передачи. Сообщения получателей содержат информацию о проблемах, с которыми они сталкиваются, включая утерю пакетов и избыточную неравномерность передачи. Обратная связь с получателями важна также для диагностирования ошибок при распространении. Анализируя сообщения всех участников сеанса, администратор сети может определить, касается данная проблема одного участника или носит общий характер. Если приложение-отправитель приходит к выводу, что проблема характерна для системы в целом, например, по причине отказа одного из каналов связи, то оно может увеличить степень сжатия данных за счет снижения качества или вообще отказаться от передачи видео — это позволяет передавать данные по соединению низкой емкости.

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



Оценка размеров сеанса и масштабирование. Для обеспечения качества услуг и обратной связи с целью управления загруженностью, а также с целью идентификации отправителя, все участники периодически посылают пакеты RTCP. Частота передачи этих пакетов снижается с ростом числа участников. При небольшом числе участников один пакет RTCP посылается максимум каждые 5 секунд. RFC-1889 описывает алгоритм, согласно которому участники ограничивают частоту RTCP-пакетов в зависимости от общего числа участников. Цель состоит в том, чтобы трафик RTCP не превышал 5% от общего трафика сеанса.



Формат заголовка протокола RTP



RTP — потоко -ориентированный протокол. Заголовок RTP-пакета создавался с учетом потребностей передачи в реальном времени. Он содержит информацию о порядке следования пакетов, чтобы поток данных был правильно собран на принимающем конце, и временную метку для правильного чередования кадров при воспроизведении и для синхронизации нескольких потоков данных, например, видео и аудио.

Каждый пакет RTP имеет основной заголовок, а также, возможно, дополнительные поля, специфичные для приложения.

Использование TCP в качестве транспортного протокола для этих приложений невозможно по нескольким причинам:



1. Этот протокол позволяет установить соединение только между двумя конечными точками, следовательно, он не подходит для многоадресной передачи.

2. TCP предусматривает повторную передачу потерянных сегментов, прибывающих, когда приложение реального времени уже их не ждет.

3. TCP не имеет удобного механизма привязки информации о синхронизации к сегментам — дополнительное требование приложений реального времени.



Другой широко используемый протокол транспортного уровня — LJDP не имеет части ограничений TCP, но и он не предоставляет критической информации о синхронизации.

Несмотря на то, что каждое приложение реального времени может иметь свои собственные механизмы для поддержки передачи в реальном времени, они имеют много общих черт, а это делает определение единого протокола весьма желательным.



Эту задачу и призван решить новый транспортный протокол реального времени — RTP (Real-time Transport Protocol), который гарантирует доставку данных одному или более адресатам с задержкой в заданных пределах, т. е. данные могут быть воспроизведены в реальном времени.

На рис. 1 представлен фиксированный RTP-заголовок, который содержит ряд полей, идентифицирующих такие элементы, как формат пакета, порядковый номер, источники, границы и тип полезной нагрузки. За фиксированным заголовком могут следовать другие поля, содержащие дополнительную информацию о данных.

0           2    3    4                 8                    16                                                                 31


V=2
P X CC M PT Sequence Number
Timestamp
Synchronization Source (SSRC) Identifier
Contributing Source (CSRC) Identifiers


Рис. 1. Фиксированный RTP-заголовок.

V (2 бита). Поле версии. Текущая версия — вторая.



Р (1 бит). Поле заполнения. Это поле сигнализирует о наличии заполняющих октетов в конце полезной нагрузки. Заполнение применяется, когда приложение требует, чтобы размер полезной нагрузки был кратен, например, 32 битам. В этом случае последний октет указывает число заполняющих октетов.



Х (1 бит). Поле расширения заголовка. Когда это поле задано, то за основным заголовком следует еще один дополнительный, используемый в экспериментальных расширениях RTP.



СС (4 бита). Поле числа отправителей. Это поле содержит число идентификаторов отправителей, чьи данные находятся в пакете, причем сами идентификаторы следуют за основным заголовком.



М (1 бит). Поле маркера. Смысл бита маркера зависит от типа полезной нагрузки. Бит маркера используется обычно для указания границ потока данных. В случае видео он задает конец кадра. В случае голоса он задает начало речи после периода молчания.



РТ (7 бит). Поле типа полезной нагрузки. Это поле идентифицирует тип полезной нагрузки и формат данных, включая сжатие и шифрование. В стационарном состоянии отправитель использует только один тип полезной нагрузки в течение сеанса, но он может его изменить в ответ на изменение условий, если об этом сигнализирует протокол управления передачей в реальном времени (Real-Time Transport Control Protocol).



Sequence Number (16 бит). Поле порядкового номера. Каждый источник начинает нумеровать пакеты с произвольного номера, увеличиваемого затем на единицу с каждым посланным пакетом данных RTP. Это позволяет обнаружить потерю пакетов и определить порядок пакетов с одинаковой отметкой о времени. Несколько последовательных пакетов могут иметь одну и ту же отметку о времени, если логически они порождены в один и тот же момент, как, например, пакеты, принадлежащие к одному и тому же видеокадру.



Timestamp (32 бита). Поле отметки о времени. Это поле содержит момент времени, в который первый октет данных полезной нагрузки был создан. Единицы, в которых время указывается в этом поле, зависят от типа полезной нагрузки. Значение определяется по локальным часам отправителя.



Synchronization Source (SSRC) Identifier (32 бита). Поле идентификатора источника синхронизации: генерируемое случайным образом число, уникальным образом идентифицирующее источник в течение сеанса и независимое от сетевого адреса. Это число играет важную роль при обработке поступившей порции данных от одного источника.



Contributing source (CSRC) Identifier (32 бита). Список полей идентификаторов источника, "подмешанных" в основной поток, например, с помощью микшера. Микшер вставляет целый список SSRC идентификаторов источников, которые участвовали в построении данного RTP-пакета. Этот список и называется CSRC. Количество элементов в списке: от 0 до 15. Если число участников более 15 — выбираются первые 15. Примером может служить аудио-конференция, в RTP-пакеты которой собраны речи всех участников, каждый со своим SSRC — они-то и образуют список CSRC. При этом вся конференция имеет общий SSRC.

Протокол RTCP, как и всякий управляющий протокол, значительно сложнее и по структуре, и по выполняемым функциям (сравните, например, протоколы IP и TCP). Хотя основу протокола RTCP составляет RTP, он содержит множество дополнительных полей, с помощью которых он реализует свои функции.

Решить проблему приоритетности для чувствительных к задержкам данных, в противовес традиционным данным, для которых задержки не столь критичны, призван протокол резервирования ресурсов — RSVP, находящийся в настоящее время на рассмотрении в группе инженерной поддержки Internet (IETF). RSVP позволяет конечным системам резервировать сетевые ресурсы для получения необходимого качества услуг, в особенности ресурсы для графика реального времени по протоколу RTP. RSVP касается прежде всего маршрутизаторов, хотя приложения в конечных узлах также должны знать, как использовать RSVP в целях резервирования необходимой полосы пропускания для данного класса услуг или уровня приоритета.

RTP вместе с другими описанными стандартами позволяет с успехом передавать видео и аудио по обычным IP-сетям. RTP/RTCP/RSVP — стандартизованное решение для сетей с передачей данных в реальном времени. Единственным его недостатком является то, что оно предназначено только для IP-сетей. Однако это ограничение временное: сети так или иначе будут развиваться в этом направлении. Данное решение обещает решить проблему передачи чувствительных к задержкам данных по Internet.



Литература



Описание протокола RTP можно найти в RFC-1889.

 <



table border="0" cellpadding="0" cellspacing="0" width="100%">




Протокол резервирования ресурсов RSVP


Протокол резервирования ресурсов RSVP (Resource Reservation Protocol) позволяет конечным системам резервировать сетевые ресурсы для получения необходимого качества услуг. Отправители предоставляют маршрутизаторам общие характеристики трафика (например, темп передачи данных, вариабельность), получатели определяют требуемый уровень качества услуг. Маршрутизаторы сводят затем воедино запросы на выделение ресурсов на общих участках маршрутов движения полезной нагрузки. Протокол активно используется маршрутизаторами фирмы CISCO для передачи видео и речевой информации. <



Сценарий работы


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

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

Модуль Internet готовит заголовок датаграммы и стыкует с ним данные. Модуль Internet определяет локальный сетевой адрес, соответствующий данному адресу Internet. В данном случае это адрес шлюза.

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

Интерфейс локальной сети создает соответствующий этой сети заголовок и соединяет с ним датаграмму. Затем он передает по локальной сети полученный таким образом результат.

Датаграмма достигает хост-компьютер, играющий роль шлюза и расположенный в вершине сети. Интерфейс локальной сети отделяет этот заголовок и передает датаграмму на модуль Internet. Модуль Internet определяет из Internet адреса, что датаграмма должна быть направлена на хост-компьютер во второй сети. Модуль Internet определяет адрес хоста-получателя в локальной сети. Он обращается к интерфейсу локальной сети с тем, чтобы она переслала данную датаграмму по назначению.

Интерфейс создает заголовок локальной сети и соединяет с ним датаграмму, а затем результат направляет на хост-получатель. На хосте-получателе интерфейс локальной сети удаляет заголовок локальной сети и передает оставшееся на Internet модуль.

Модуль Internet определяет, что рассматриваемая выше датаграмма предназначена для прикладной программы на этот хосте. Модуль передает данные прикладной программе в ответ на системный вызов. В качестве результата этого вызова передаются адрес получателя и другие параметры.

Рис. 2 Путь передачи датаграммы



Соглашения о специальных адресах: broadcast, multicast, loopback


В протоколе IP существует несколько соглашений об особой интерпретации IP-адресов:

если IР-адрес состоит только из двоичных нулей,

0 0 0 0 ................................... 0 0 0 0

то он обозначает адрес того узла, который сгенерировал этот пакет;

если в поле номера сети стоят 0,

0 0 0 0 .......0 Номер узла

то по умолчанию считается, что этот узел принадлежит той же самой сети, что и узел, который отправил пакет;

если все двоичные разряды IP-адреса равны 1,

1 1 1 1 .........................................1 1
 

то пакет с таким адресом назначения должен рассылаться всем узлам, находящимся в той же сети, что и источник этого пакета. Такая рассылка называется ограниченным широковещательным сообщением (limited broadcast);

если в поле адреса назначения стоят сплошные 1,

Номер сети 1111................11

то пакет, имеющий такой адрес рассылается всем узлам сети с заданным номером. Такая рассылка называется широковещательным сообщением (broadcast);

адрес 127.0.0.1 зарезервирован для организации обратной связи при тестировании работы программного обеспечения узла без реальной отправки пакета по сети. Этот адрес имеет название loopback.

Уже упоминавшаяся форма группового IP-адреса - multicast - означает, что данный пакет должен быть доставлен сразу нескольким узлам, которые образуют группу с номером, указанным в поле адреса. Узлы сами идентифицируют себя, то есть определяют, к какой из групп они относятся. Один и тот же узел может входить в несколько групп. Такие сообщения в отличие от широковещательных называются мультивещательными. Групповой адрес не делится на поля номера сети и узла и обрабатывается маршрутизатором особым образом.

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



Спецификация протокола IP


Формат заголовка Internet
Коментарии
Интерфейсы
Примеры и сценарии



Структура протокольного блока


Разряды

Описание

7 6 5 4 3 2 1 0

Версия

= 4 протокола

Длина заголовка

дейтаграммы

 

1

байт

Type of Service

Вид обслуживания

старший байт

Общая длина

дейтаграммы в байтах

младший байт

старший байт

Identification

Идентификатор дейтаграммы

Формируется исходным абонентом, формирующим дейтаграмму, служит для идентификации конкретной дейтаграммы. Выглядит как 16-ти разрядный счетчик

младший байт

O DF MF

Flags

Смещение фрагмента

старшая тетрада

Поле флагов

и поля смещения фрагмента данных от начала исходного блока данных (используется при сегментации)

младший байт

1 байт

Time to Live

Время жизни

Поле показывает количество переходов через маршрутизаторы

1 байт

Protocol.

Тип следующего протокола

2 байта

Header Checksum

Контрольная сумма заголовка

старший байт

Source Address

Адрес отправителя

1 байт

1 байт

младший байт

старший байт

Адрес получателя

Destination Address

1 байт

1 байт

младший байт

. .  .

Options

Поле дополнительных услуг (может отсутствовать)

Длина поля дополнительных услуг определяется как разность заданной длины заголовка и размера фиксированной части.

1, 2 или 3 байта Padding (Выравнивание)

Выравнивание Internet заголовка используется для того, чтобы убедиться в том, Internet заголовок заканчивается на 32-битной границе. Выравнивание осуществляется нулями.

. . .

Данные



Связь с другими протоколами


Следующая диаграмма иллюстрирует место протокола Internet в иерархии протоколов.

Рис. 1 Взаимодействие протоколов

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



Time to Live (Время жизни) 8 бит


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



Тип обслуживания


Тип обслуживания (TOS) используется для выбора качества Internet сервиса. Тип обслуживания определяется абстрактными параметрами приоритета, задержки, продолжительности и достоверности. Эти параметры должны отображаться на реальные параметры сервиса для конкретных сетей, через которые проходит данная датаграмма.

Приоритет. Независимая единица измерения для важности данной датаграммы.

Задержка. Указание задержки важно для датаграмм с этим знаком.

Пропускная способность. Для датаграмм с этим знаком важна высокая скорость передачи данных.

Достоверность. Для датаграмм с таким типом обслуживания важен более высокий уровень усилий, предпринимаемых для обеспечения достоверности.

Например, сеть ARPANET имеет бит приоритета, а также выбор между "стандартными" сообщениями (тип 0) и "неконтролируемыми" (тип 3) (также в качестве одного из сервисных параметров может использоваться выбор между единичным пакетом и многопакетными сообщениями). Неконтролируемые сообщения имеют тенденцию иметь меньшую достоверность, но и меньшую задержку. Допустим, Internet датаграмма должна быть передана через сеть ARPANET.

Пусть тип Internet сервиса определен как

приоритет: 5
задержка: 0
пропускная способность: 1
достоверность: 1

В рассматриваемом примере отображение описанных параметров на параметры, допустимые в сети ARPANET, привело бы к установке бита приоритета ARPANET (поскольку приоритет Internet находится в верхней половине своего диапазона), выбору стандартного типа сообщений (поскольку указаны требования высокой пропускной способности и достоверности, а параметр задержки сброшен). Дополнительные детали реализации сервиса даны в документе "Service Mappings".



Типы адресов: физический (MAC-адрес), сетевой (IP-адрес) и символьный (DNS-имя)


Каждый компьютер в сети TCP/IP имеет адреса трех уровней:

Локальный адрес узла, определяемый технологией, с помощью которой построена отдельная сеть, в которую входит данный узел. Для узлов, входящих в локальные сети - это МАС-адрес сетевого адаптера или порта маршрутизатора, например, 11-А0-17-3D-BC-01. Эти адреса назначаются производителями оборудования и являются уникальными адресами, так как управляются централизовано. Для всех существующих технологий локальных сетей МАС-адрес имеет формат 6 байтов: старшие 3 байта - идентификатор фирмы производителя, а младшие 3 байта назначаются уникальным образом самим производителем. Для узлов, входящих в глобальные сети, такие как Х.25 или frame relay, локальный адрес назначается администратором глобальной сети.
IP-адрес, состоящий из 4 байт, например, 109.26.17.100. Этот адрес используется на сетевом уровне. Он назначается администратором во время конфигурирования компьютеров и маршрутизаторов. IP-адрес состоит из двух частей: номера сети и номера узла. Номер сети может быть выбран администратором произвольно, либо назначен по рекомендации специального подразделения Internet (Network Information Center, NIC), если сеть должна работать как составная часть Internet. Обычно провайдеры услуг Internet получают диапазоны адресов у подразделений NIC, а затем распределяют их между своими абонентами.

Номер узла в протоколе IP назначается независимо от локального адреса узла. Деление IP-адреса на поле номера сети и номера узла - гибкое, и граница между этими полями может устанавливаться весьма произвольно. Узел может входить в несколько IP-сетей. В этом случае узел должен иметь несколько IP-адресов, по числу сетевых связей. Таким образом IP-адрес характеризует не отдельный компьютер или маршрутизатор, а одно сетевое соединение.

Символьный идентификатор-имя, например, SERV1.IBM.COM. Этот адрес назначается администратором и состоит из нескольких частей, например, имени машины, имени организации, имени домена. Такой адрес, называемый также DNS-именем, используется на прикладном уровне, например, в протоколах FTP или telnet.



Толковый словарь


1822 BBN доклад 1822, "The Specification of the Interconnection of a Host and an IMP". Спецификация взаимодействия между хост-компьютером и сетью ARPANET.

ARPANET проводник

Управляющая информация в ARPANET сообщении для интерфейса между хост-компьютером и IMP процессором.

ARPANET сообщение

Единица передачи между хост-компьютером и IMP процессором в сети ARPANET. Максимальный ее размер примерно 1012 октетов (8096 битов).

ARPANET пакет

Единица передачи внутри сети ARPANET между IMP процессорами. Максимальный размер ее около 126 октетов (1008 бит).

Destination (Получатель)

Адрес получателя, поле в Internet заголовке.

DF

Бит запрета фрагментации в поле флагов.

Flags (Флаги)

Поле Internet заголовка, содержащее различные управляющие биты.

Fragment Offset (Смещение фрагмента)

Это поле Internet заголовка указывает, к какому месту в Internet датаграмме относится фрагмент.

GGP

Gateway to Gateway Protocol - Протокол общения между шлюзами. Данный протокол первоначально использовался шлюзами для управления маршрутизацией и другими функциями шлюзов.

header (заголовок)

Управляющая информация в начале сообщения, сегмента, датаграммы, пакета или блока данных.

ICMP

Internet Control Message Protocol - Протокол контрольных сообщений Internet. Поддерживаемое Internet модулем, ICMP сообщение передается от шлюзов к хост-компьютерам и между хост-компьютерами, используется для отчетов об ошибках а также для создания предположений о маршрутизации.

Identification (Идентификация)

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

IHL

The Internet Header Length - Поле Internet заголовка. Представляет собой длину Internet заголовка, измеренную в 32-битных словах.

IMP

The Interface Message Processor - Процессор сообщений интерфейса. Пакетный переключатель сети ARPANET.

Internet Address (адрес Internet)

Четырехоктетный (32 бита) адрес отправителя или получателя. Состоит из поля сети и поля локального адреса.

Internet фрагмент

Порция данных из Internet датаграммы, снабженная Internet заголовком.

Local Address (локальный адрес)

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

MF

Флаг появления дополнительных фрагментов, содержащийся в поле флагов Internet заголовка

module (модуль)

Реализация, обычно программная, протокола или других процедур

more-fragments flag (флаг дополнительных фрагментов)

Флаг, показывающий, содержит ли данная Internet датаграмма заключительную часть исходной Internet датаграммы. Флаг включен в поле флагов Internet заголовка.

NFB

The Number of Fragments Blocks - количество блоков фрагментации с данными в Internet фрагменте. Иными словами, длина поля с данными. Единица измерения - 8 октет.

octet (октет)

байт с восемью битами

Options (опции)

Поле опций Internet заголовка, может содержать несколько опций. Каждая опция может иметь длину в несколько октет. Padding (Выравнивание)

Поле выравнивания Internet заголовка, используемое для того, чтобы убедиться в том, что данные начинаются по границе 32-битного слова. Выравнивание осуществляется нулями.

Protocol (Протокол)

Для данного документа это идентификатор протокола более высокого уровня, поле в Internet заголовке.

Rest (Остаток)

Часть Internet адреса, указывающая локальный адрес.

Source (Отправитель)

Адрес отправителя, поле Internet заголовка.

TCP

Transmission Control Protocol - Протокол управления передачей. Протокол общения между хост-компьютерами для осуществления коммуникаций в среде Internet.

TCP сегмент

Единица данных, передаваемая между TCP модулями (имеющая TCP заголовок).

TFTP

Trivial File Transfer Protocol: Простой протокол передачи файлов, созданный для UDP.

Time to Live (Время жизни)

Поле Internet заголовка, показывающее верхний предел для времени существования данной Internet датаграммы.

TOS

Тип сервиса Total length (общая длина)

Поле Internet заголовка Total Length, определяющее длину датаграммы в октетах, включающее Internet заголовок и данные.

TTL

Время жизни

Type of Service (Тип сервиса)

Поле Internet заголовка, определяющее тип сервиса для данной Internet датаграммы.

UDP

User Datagram Protocol. Протокол на уровне пользователя для приложений, ориентированных на транзакции.

User (Пользователь)

Пользователь Internet протокола. Это может быть модуль протокола более высокого уровня, прикладная программа или программа шлюза.

Version (версия)

Поле версии, определяющее формат Internet заголовка. <



Total Length (общая длина) 16 бит


Общая длина - это длина датаграммы, измеренная в октетах, включая Internet заголовок и поле данных. Это поле может задавать длину датаграммы вплоть до 65535 октетов. В большинстве хост-компьютеров и сетей столь большие датаграммы не используются. Все хосты должны быть готовы принимать датаграммы вплоть до 576 октетов длиной (приходят ли они целиком или по фрагментам). Хостам рекомендуется отправлять датаграммы размером более чем 576 октетов, только если они уверены, что принимающий хост готов обслуживать датаграммы повышенного размера.

Значение 576 выбрано с тем, чтобы соответствующим образом ограниченный блок данных передавался вместе с требуемой информацией в заголовке. Например, этот размер позволяет заполнять датаграмму полем данных размером в 512 октетов и заголовком в 64 октета. Наибольший Internet заголовок занимает 60 октетов, а его типичный размер составляет всего 20 октетов, что оставляет место под заголовки протоколов более высокого уровня.

Identification

(идентификатор) 16 бит

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



Три основных класса IP-адресов


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

128.10.2.30 - традиционная десятичная форма представления адреса,

10000000 00001010 00000010 00011110 - двоичная форма представления этого же адреса.

На рисунке 3.1 показана структура IP-адреса.

Класс А

0 N сети N узла

Класс В

1 0 N сети N узла

Класс С

1 1 0 N сети N узла

Класс D

1 1 1 0 адрес группы multicast

Класс Е

1 1 1 1 0 зарезервирован

Рис. 3.1. Структура IР-адреса

Адрес состоит из двух логических частей - номера сети и номера узла в сети. Какая часть адреса относится к номеру сети, а какая к номеру узла, определяется значениями первых битов адреса:

Если адрес начинается с 0, то сеть относят к классу А, и номер сети занимает один байт, остальные 3 байта интерпретируются как номер узла в сети. Сети класса А имеют номера в диапазоне от 1 до 126. (Номер 0 не используется, а номер 127 зарезервирован для специальных целей, о чем будет сказано ниже.) В сетях класса А количество узлов должно быть больше 216 , но не превышать 224.
Если первые два бита адреса равны 10, то сеть относится к классу В и является сетью средних размеров с числом узлов 28 - 216. В сетях класса В под адрес сети и под адрес узла отводится по 16 битов, то есть по 2 байта.
Если адрес начинается с последовательности 110, то это сеть класса С с числом узлов не больше 28. Под адрес сети отводится 24 бита, а под адрес узла - 8 битов.
Если адрес начинается с последовательности 1110, то он является адресом класса D и обозначает особый, групповой адрес - multicast. Если в пакете в качестве адреса назначения указан адрес класса D, то такой пакет должны получить все узлы, которым присвоен данный адрес.
Если адрес начинается с последовательности 11110, то это адрес класса Е, он зарезервирован для будущих применений.

В таблице приведены диапазоны номеров сетей, соответствующих каждому классу сетей.


Класс Наименьший адрес Наибольший адрес
A 01.0.0 126.0.0.0
B 128.0.0.0 191.255.0.0
C 192.0.1.0. 223.255.255.0
D 224.0.0.0 239.255.255.255
E 240.0.0.0 247.255.255.255

Type of Service (тип сервиса) 8 бит


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

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

биты 0-2 приоритет
бит 3 0 - нормальная задержка,

1 - малая задержка

бит 4 0 - нормальная пропускная способность,

1 - высокая пропускная способность

бит 5 0 - обычная достоверность,

1 - высокая достоверность

биты 6-7 зарезервированы

0 1 2 3 4 5 6 7
приоритет D T R 0 0



Version (версия) 4 бита


Поле версии показывает формат заголовка Internet. Данный документ описывает версию 4.

IHL (длина Internet заголовка) 4 бита

Длина Internet заголовка измеряется в словах по 32 бита каждый и указывает на начало поля данных. Заметим, что корректный заголовок может иметь минимальный размер 5 слов.



Время жизни


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

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

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

Некоторые протоколы более высокого уровня, управляющие соединениями, основываются на предположении, что старые датаграммы-дубликаты не достигают цели по истечении определенного времени. TTL - это способ, с помощью которого такие протоколы могли бы убедиться, что их предположение удовлетворяется.



Библиографическая справка (NetWare)


NetWare является операционной системой сети (network operating system - NOS) и связанной с ней средой обеспечения услуг, разработанной Novell, Inc. и представленной на рынок в начале 1980 гг. В то время сети были небольшими и преимущественно гомогенными, связь рабочих групп с помощью локальных сетей была еще новым явлением, а идея о персональном компьютере еще только начала завоевывать популярность.

Большая часть технологии организации сетей NetWare была заимствована из Xerox Network Systems (XNS)

- системы организации сетей, разработанной Xerox Corporation в конце 1970 гг. Подробная информация о XNS   в разделе "XNS".

K началу 1990 гг. доля в рынке NOS NetWare возросла до 50-75 % (данные зависят от исследовательских групп, занимавшихся изучением рынка). Установив свыше 500,000 сетей NetWare по всему миру и ускорив продвижение по пути об'единения сетей с другими сетями, NetWare и подддерживающие ее протоколы часто сосуществуют на одном и том же физическом канале с многими другими популярными протоколами, в том числе ТСР/IP, DECnet и AppleTalk.

  <



Доступ к среде (NetWare)


NetWare работает с Ethenet/IEEE 802.3, Token Ring/IEEE 802.5, Fiber Distributed Data Interface (FDDI) и ARCnet.  NetWare также работает в синхронных каналах глобальных сетей, использующих Point-to-Point Protocol (PPP) (Протокол непосредственных соединений).

ARСnet представляет собой систему простой сети, которая поддерживает все три основных носителя (скрученную пару, коаксиальный кабель и волоконно-оптический кабель) и две топологии (шина и звезда). Она была разработана корпорацией Datapoint Corporation и выпущена в 1977. Хотя ARCnet не приобрела такую популярность, какой пользуются Ethernet и Token Ring, ее гибкость и низкая стоимость завоевали много верных сторонников. <



Протоколы высших уровней (NetWare)


NetWare поддерживает большое разнообразие протоколов высших уровней; некоторые из них несколько более популярны, чем другие. NetWare shell (командный процессор) работает в оборудовании клиентов (которое часто называется рабочими станциями среди специалистов по NetWare) и перехватывает обращения прикладных задач к устройству Ввод/Вывод, чтобы определить, требуют ли они доступ к сети для удовлетворения запроса. Если это так, то NetWare shell организует пакеты запросов и отправляет их в программное обеспечение низшего уровня для обработки и передачи по сети. Если это не так, то они просто передаются в ресурсы местного устройства Ввода/Вывода. Прикладные задачи клиента не осведомлены о каких-либо доступах к сети, необходимых для выполнения обращений прикладных задач. NetWare Remote Procedure Call (Netware RPC) (Вызов процедуры обращения к отдаленной сети) является еще одним более общим механизмом переадресации, поддерживаемым Novell.

Netware Core Protocol (NCP) (Основной протокол NetWare) представляет собой ряд программ для сервера, предназначенных для удовлетворения запросов прикладных задач, приходящих, например, из NetWare shell. Услуги, предоставляемые NCP, включают доступ к файлам, доступ к принтеру, управление именами, учет использования ресурсов, защиту данных и синхронизацию файлов.

NetWare также поддерживает спецификацию интерфейса сеансового уровня Network Basic I/O System (NetBIOS) компаний IBM и Microsoft. Программа эмуляции NetBIOS, обеспечиваемая NetWare, позволяет программам, написанным для промышленного стандартного интерфейса NetBIOS, работать в пределах системы NetWare.

Услуги прикладного уровня NetWare включают NetWare Message Handling Service (NetWare MHS) (Услуги по обработке сообщений), Btrieve, NetWare Loadable Modules (NLM)

(Загружаемые модули NetWare) и различные характеристики связности IBM. NetWare MHS является системой доставки сообщений, которая обеспечивает транспортировку электронной почты. Btrieve представляет собой реализацию механизма доступа к базе данных двоичного дерева (btree) Novell. NLM реализуются как дополнительные модули, которые подключаются к системе NetWare. В настоящее время компания Novell и третьи участвующие стороны предоставляют NLM для чередующихся комплектов протоколов (alternate protocol stacks), услуги связи, услуги доступа к базе данных и много других услуг. <



Сетевая архитектура NetWare


В качестве среды NOS, NetWare определяет пять высших уровней эталонной модели OSI. Она обеспечивает совместное пользование файлами и принтером, поддержку различных прикладных задач, таких как передача электронной почты и доступ к базе данных, и другие услуги. Также, как и другие NOS, такие как Network File System (NFS) компании Sun Microsystems, Inc. и LAN Manager компании Microsoft Corporation, NetWare базируется на архитектуре клиент-сервер (slient-server architecture). В таких архитектурах клиенты (иногда называемые рабочими станциями) запрашивают у серверов определенные услуги, такие как доступ к файлам и принтеру.

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

Основная характеристика системы клиент-сервер заключается в том, что доступ к отдаленной сети является прозрачным для пользователя. Это достигается с помощью удаленного вызовова процедур (remote procedure calls) - такого процесса, когда программа местного компьютера, работающая на оборудовании клиента, отправляет вызов в удаленный сервер. Этот сервер выполняет указанную процедуру и возвращает запрошенную информацию клиенту местного компьютера.

Рисунок  иллюстрирует в упрощенном виде известные протоколы NetWare и их связь с эталонной моделью OSI. При наличии соответствующих драйверов, NetWare может работать с любым протоколом доступа к носителю. На рисунке перечислены те протоколы доступа к носителю, которые в настоящее время обеспечиваются драйверами NetWare.

<



Сетевой уровень (NetWare)


Internet Packet Exchange (IPX) является оригинальным протоколом сетевого уровня Novell. Если устройство, с которым необходимо установить связь, находится в другой сети, IPX прокладывает маршрут для прохождения информации через любые промежуточные сети, которые могут находиться на пути к пункту назначения. На Рисунке представлен формат пакета IPX.

Пакет IPX начинается с 16-битового поля контрольной суммы (checksum), которое устанавливается на единицы.

16-битовое поле длины (length) определяет длину полной дейтаграммы IPX в байтах. Пакеты IPX могут быть любой длины, вплоть до размеров максимальной единицы передачи носителя (MTU). Фрагментация пакетов не применяется.

За полем длины идет 8-битовое поле управления транспортировкой (transport control), которое обозначает число роутеров, через которые прошел пакет. Когда значение этого поля доходит до 15, пакет отвергается исходя из предположения, что могла иметь место маршрутная петля.

8-битовое поле типа пакета (packet type) определяет протокол высшего уровня для приема информации пакета. Двумя общими значениями этого поля являются 5, которое определяет Sequenced Packet Exchange (SPX) (Упорядоченный обмен пакетами) и 17, которое определяет NetWare Core Protocol (NCP) (Основной протокол NetWare).

Информация адреса пункта назначения (destination address) занимает следующие три поля. Эти поля определяют сеть, главную вычислительную машину и гнездо (процесс) пункта назначения.

Следом идут три поля адреса источника (source address), определяющих сеть, главную вычислительную машину и гнездо источника.

За полями пункта назначения и источника следует поле данных (data). Оно содержит информацию для процессов высших уровней.

Хотя IPX и является производной XNS, он имеет несколько уникальных характеристик. С точки зрения маршрутизации , наиболее важное различие заключается в механизмах формирования пакетов данных этих двух протоколов. Формирование пакета данных - это процесс упаковки информации протокола высшего уровня и данных в блок данных. Блоки данных являются логическими группами информации, очень похожими на слова телефонного разговора. XNS использует стандартное формирование блока данных Ethernet, в то время как пакеты IPX формируются в блоки данных Ethernet Version 2.0 или IEEE 802.3 без информации IEEE 802.2, которая обычно сопровождает эти блоки данных. Следующий рисунок иллюстрирует формирование пакета данных Ethernet, стандарта IEEE 802.3 и IPX.

Примечание: NetWare 4.0 обеспечивает формирование пакетов IPX в блоки данных IEEE 802.3.

Для маршрутизации пакетов в об'единенных сетях IPX использует протокол динамической маршрутизации, называемый Routing Information Protocol (RIP) (Протокол маршрутной информации). Также, как и XNS, RIP получен в результате усилий компании Xerox по разработке семейства протоколов XNS. В настоящее время RIP является наиболее часто используемым протоколом для внутренних роутеров (interior gateway protocol-IGP) в сообществе Internet-среде международной сети, обеспечивающей связность практически со всеми университетами и исследовательскими институтами и большим числом коммерческих организаций в США, а также со многими иностранными организациями.

В дополнение к разнице в механизмах формирования пакетов, Novell также дополнительно включила в свое семейство протоколов IPX протокол, называемый Service Adverticement Protocol (SAP) (Протокол об'явлений об услугах). SAP позволяет узлам, обеспечивающим услуги, об'являть о своих адресах и услугах, которые они обеспечивают.

Novell также поддерживает "Блок адресуемой сети" LU 6.2 компании IBM (LU 6.2 network addressable unit - NAU). LU 6.2 обеспечивает связность по принципу равноправных систем через среду сообщений IBM. Используя возможности LU 6.2, которые имеются у NetWare, узлы NetWare могут обмениваться информацией через сеть IBM. Пакеты NetWare формируются в пределах пакетов LU 6.2 для передачи через сеть IBM. <



Транспортный уровень (NetWare)


Sequenced Packet Exchange (SPX) (Упорядоченный обмен пакетами) является наиболее часто используемым протоколом транспортного уровня NetWare. Novell получила этот протокол в результате доработки Sequenced Packet Protocol (SPP) системы XNS. Как и протокол ТСР (Transmission Control Protocol) и многие другие протоколы транспортного уровня, SPX является надежным, с установлением соединения протоколом, который дополняет услуги дейтаграмм, обеспечиваемые протоколами Уровня 3.

Novell также предлагает поддержку протокола Internet Protocol (IP) в виде формирования протоколом User Datagram Protocol(UDP)/IP других пакетов Novell, таких как пакеты SPX/IPX. Для транспортировки через об'единенные сети, базирующиеся на IP, дейтаграммы IPX формируются внутри заголовков UDP/IP. <



ФОРМАТ RFC 850.


Статьи, используемые в системе телеконференций, как уже оговаривалось, имеют формат, определенный в RFC 850, и очень похожи на сообщения электронной почты. Каждая статья состоит из тех же частей: заголовка и тела. Тело статьи - это текст сообщения. Заголовок указывает программным средствам системы телеконференций, как следует распространять эту статью по сети INTERNET, а также содержит информацию о теме статьи. Информация заголовка используется для построения индекса серверов новостей, который позволяет клиентам создавать меню и искать интересующие их статьи без просмотра совокупности статей. Таким образом, в заголовке содержатся данные об авторе, теме, конспект и некоторые индексирующие ключевые слова. Ниже приведен пример статьи, составленной в формате RFC 850. Статья была передана через последовательность UNIX-компьютеров с помощью протокола UUCP. В таком виде она может быть получена сервером новостей, поддерживающим протокол NNTP.

Relay-Version: version B 2.10.3 4.3bsd-beta 6/6/89; site sdcsvax.UUCP * текущий

компьютер-получатель, выступающий в роли транслятора

Posting-Version: version B 2.10.1 6/24/89 SMI; site unitek.uucp * компьютер, на кото ром была опубликована статья

Path:sdcsvax!sdcrdcf!hplabs!qantel!ihnp4!alberta!ubc-vision!unitek !honman * серверы новостей, через которые была передана статья

From: honman@unitek.uucp (Man Wong) * отправитель статьи

Newsgroups: net.unix-wizards * название группы новостей, в которой опубликована данная статья

Subject: foreground -> background ? * тема статьи (указывается автором)

Message-ID: <167@unitek.uucp> * идентификатор сообщения, машины отправителя

Date: 25 Sep 93 23:51:52 GMT * дата отправки

Date-Received: 29 Sep 93 09:54:48 GMT * дата получения последним сервером

Reply-To: honman@unitek.UUCP (Hon-Man Wong) * E-Mail адрес автора для желающих ответить

Distribution: net.all * область распространения статьи, задаваемая автором

Organization: Unitek Technologies Corporation * место работы автора

Lines: 12 * количество строк текста в статье

I have a process (C program) which generates a child and waits for

it to return. What I would like to do is to be able to run the

child process interactively for a while before kicking itself into

the background so I can return to the parent process (while the

child process is RUNNING in the background). Can it be done? And

if it can, how?

Please reply by E-mail. Thanks in advance.

Hon-Man Wong

<



Формат статей и сообщений UseNet


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

Стандартный формат сообщений электронной почты определяет структуру самого сообщения, расположение и типы его частей, форматы кодировок (см. раздел "Формат почтовых сообщений, MIME" главы "SMTP"). Формат статьи UseNet использует формат сообщений электронной почты как структуру, организующую передаваемую информацию, дополняя ее полями, специфичными для системы передачи новостей. Текст и конверт почтового сообщения образуют единую структуру, которая используется для построения статьи UseNet.

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

Структура почтового сообщения подробно рассматривалась в разделе, посвященном протоколу SMTP. Поэтому, обсуждая структуру статьи UseNet, остановимся на описании только тех частей сообщения, которые добавляются системой UseNet. Типичный заголовок статьи UseNet выглядит следующим образом:

From: jerry@cock.att.com (Jerry Balls)

Path: cbosgd!mhuxj!mhuxt!cock! jerry

Newsgroups: news.announce

Subject: UseNet Etiquette -- Please Read

Message-ID: <642@cock.att.com>

Date: Fri, 19 Nov 97 16:14:55 GMT

Followup-To: news.misc

Expires: Sat, 1 Jan 98 00:00:00 -0500

rganization: AT&T Bell Laboratories

This is a trivial news!

Стандартное UseNet-сообщение состоит (так же как и почтовое сообщение) из нескольких строк заголовка, отделенных от тела сообщения пустой строкой. Каждая строка состоит из ключевого слова, двоеточия ":", пробела, информации и символов завершения строки -<CRLF>.


Часть полей заголовка может отсутствовать. Это — поля: "Followup-To:", "Expires:", "Reply-To:", "Sender:", "References:", "Control:", "Distribution:", "Keywords:", "Summary:", "Approved:", "Lines:", "Xref:", "Organization:". Однако часть полей должна присутствовать в каждой статье: "From:", "Date:", "Newsgroups:", "Subject:" "Message-ID:", "Path:".







Поля "From:", "Date:", "Subject:", "Message-ID:" содержат те же параметры, что и аналогичные поля конверта почтового сообщения. Форматы этих полей в статьях UseNet зависят от программного обеспечения клиента для работы с UseNet.
Поле "Newsgroups:" заголовка статьи определяет группу и содержит название дискуссии или конференции, которой принадлежит данная статья. Одна и та же статья может принадлежать нескольким группам, тогда их названия перечисляются через запятую.




Все группы, упомянутые в поле "Newsgroups:", должны существовать. Если в поле "Newsgroups:" поступившего сообщения содержатся имена недоступных для данного сервера или несуществующих групп дискуссий, эти имена при обработке статьи игнорируются.







Поле "Path:" содержит путь сообщения, который был проделан, чтобы попасть в данную систему. Когда система переправляет сообщение с одного хоста на другой, она добавляет имя хоста в поле "Path:". Имена хостов могут отделяться друг от друга любым знаком пунктуации за исключением точки — "." (поскольку точка используется в именах хостов). Например, так: "Path: cbosgd!mhuxj!mhuxt" или "Path: cbosgd, mhuxj, mhuxt", или "Path: @cbosgd.att.com,@mhuxj. att.com,@mhuxt. att.com". Как правило, имя следующего хоста добавляется в строчку слева, поэтому хост — инициатор сообщения всегда стоит в этой строке справа. Это нужно для обеспечения совместимости со старыми системами. Например, хост А получил сообщение с параметром "Path: X!Y!Z". Если хост А отправляет его хосту В, то хост В получит статью с параметром "Path:
<



/p>



A!X!Y!Z" и т. д.

Параметр "Path:" не используется для адресации ответов как почтовый адрес (за исключением некоторых реализации старых версий программ). Он предназначен для хранения и обработки информации маршрута данной статьи. Этот параметр играет очень важную роль при построении графа тиражирования данного сообщения и предотвращения "зацикливаний" передачи статей.

Если, например, хост А отправляет статью хосту В, параметр статьи "Path:" будет содержать имя хоста А. Поэтому хост В или какой-либо из следующих хостов, обрабатывающих эту статью, не отправит эту же статью обратно на хост А.



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





Поле "Followup-To:" имеет тот же формат, что и поле "Newsgroups:". Если это поле присутствует, дополнительные статьи, относящиеся к данной статье, направляются в конференцию(ии), указанные в этом поле. Если поле отсутствует, дополнения к данной статье направляются в конференцию(ии), указанные в поле "Newsgroups:".






Поле "Expires:" содержит дату "истечения срока действия" сообщения. Поле может быть использовано для удаления статей, содержащих информацию, имеющую ограниченный срок действия (для того чтобы статьи, содержащие критичную по времени информацию, находились в сети заданное время). Это может относиться, например, к объявлению о дате какого-либо симпозиума или семинара. Если это поле не указано, используется значение, устанавливаемое локальным программным обеспечением по умолчанию, например, по соображениям экономии дискового пространства. Пользователям настоятельно не рекомендуется использовать это поле, если в этом нет необходимости.






Поле "References:" содержит список идентификаторов сообщений (Message-ID), на которые ссылается данное сообщение. Это поле обязательно должно присутствовать во всех сообщениях, являющихся дополнительными к данному. Как правило, поле "Subject:" сообщений, которые являются ответными к данному, содержит префикс "Re:". Например:
<



/p>

References: AAckqIqWy5@jone.tamu.edu

Message-Id: AARABLqq2H@lisa.silly.edu

Subject: Re: Hello

Если сообщение, к которому относится дополнительное сообщение, содержит поле "References:", дополнительное сообщение должно содержать в этом поле значения "References:" и значение поля "Message-ID:" этого сообщения. Данное поле позволяет группировать статьи в потоки обсуждений какой-либо темы и организовывать временные иерархические структуры внутри конференции. Если строка "References:" получается слишком длинной, локальное программное обеспечение может ее "обрезать", сохраняя количество ссылок, достаточное для идентификации потока обсуждения.

Поле "Organization:" содержит имя организации, к которой принадлежит отправитель или хост отправителя.
Поле "Keywords:" содержит ключевые слова-идентификаторы сообщения. Оно используется при поиске сообщения конкретного содержания.
Поле "Summary:" содержит краткое описание содержания статьи.
Поле "Distribution:" используется для ограничения распространения статей определенных конференций. Поле содержит идентификаторы зон распространения статьи. Например:
Newsgroups: rec.auto,misc.forsale

Distribution: nj,ny

Данная статья будет передаваться подписчикам конференций "rec.auto" и "misc.forsale", расположенным в доменах New Jersy — nj и New York — ny. Эту же задачу можно было решить, если создать для подписчиков New York и New Jersy отдельные конференции, например, "nj.rec.auto" "ny.rec.auto", "nj.misc.forsale" и "ny.misc.forsale". Но если вам нужно от-" править одну или несколько статей ограниченному кругу лиц, создавать для этого специальные конференции крайне неэффективно.

Поле "Xref:" содержит имя локального хоста без идентификатора домена, номер данной статьи и номер данной конференции в почтовой системе локального хоста. Например, если заголовок сообщения содержит следующие строки:


Newsgroups: news.lists,news.groups



Xref: alibaba news.lists:461 news.groups:6378

Это означает, что данное сообщение имеет номер 461 в группе "news.list" и 6378 в группе "news.groups" локального хоста "alibaba". Эти значения могут быть использованы локальным программным обеспечением.

Модели передачи статей


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

Примечание

Например, поле "From:" сообщений новостей нельзя будет использовать в его стандартном виде, если синтаксис имен хостов во взаимодействующих системах будет различным.

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

Одним из решений этой проблемы является инкапсуляция статьи дискуссии, вместе с заголовком, в тело почтового сообщения. Для этого в начало каждой строчки статьи новостей, как тела, так и заголовка, вставляется буква "N". После этого статья записывается в тело почтового сообщения. Это гарантирует, что ни одна строчка статьи не будет интерпретироваться почтовым сервером как управляющая для почтового сообщения. Программа, ко-горая получит такое сообщение, извлекает из него статью и передает ее соответствующей программе обработки статей дискуссий.

В таком формате сообщение будет выглядеть следующим образом:

Date: Mon, 3 Jan 95 08:33:47 MST

From: news@cbosgd.att.corn

Subject: network news message

To: rnews@npois.att.com

NPath: cbosgdimhuxj!harpo!utah-cs!sask!derek

NFrom: derek@sask.UUCP

NNewsgroups: misc.test

NSubject: test

NMessage-ID: <176@aask.UUCP>

NDate: Mon, 3 Jan 95 00:59:15 MST

N

NThis really is a test.

N

<


/p>

Подобная форма передачи статей позволяет отдельно задавать приоритеты почтовых сообщений и статей новостей.

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

Например, пакет может быть построен так, что каждому сообщению в пакете предшествует строка "#!rnews <number>", где <number> — длина статьи. Такой пакет будет выглядеть следующим образом:

# ! rnews 239

From: jerry@eagle.att.corn (Jerry Schwarz)

Path: cbosgdimhuxj imhuxt!eagle!jerry

Newsgroups: news.announce

Subject: UseNet Etiquette -- Please Read

Message-ID: 642@eagle.att.corn

Date: Fri, 19 Nov 96 16:14:55 EST

Approved: mark@cbosgd.att.corn

Here is an important message about UseNet Etiquette.

# ! rnews 234

From: jerry@eagle.att.corn (Jerry Schwarz)

Path: cbosgd!mhuxj!mhuxt!eagle ! jerry

Newsgroups: news.announce

Subject: Notes on Etiquette message

Message-ID: 643@eagle.att.corn

Date: Fri, 19 Nov 96 17:24:12 EST

Approved: mark@cbosgd.att.corn

There was something I forgot to mention in the last message.

В данном примере, символ "#"

используется как идентификатор, а строка "rnews" задает формат пакета.



Примечание



Некоторые сети позволяют работать с механизмом удаленных процедур. В таких сетях статьи новостей могут передаваться через удаленные вызовы процедур серверов новостей (например, через стандартные потоки ввода/вывода UUCP-соединения). В этом случае важно, чтобы статьи отправлялись через достоверное соединение, т. е., если во время работы удаленной системы произойдет сбой, поток передачи должен восстановиться при восстановлении ее работоспособности.

Протокол NNTP, описание команд


Сервер новостей UseNet использует протокол NNTP для взаимодействия с другими серверами. Механизм работы протокола NNTP во многом похож на механизм работы по протоколу SMTP. Протокол поддерживает канал обмена новостями и простейший интерфейс работы с распределенной базой данных новостей. При использовании в качестве транспортного протокола TCP, протокол NNTP, как правило, работает с портом 119.

Команды и ответы протокола состоят из ASCII-символов. Если соединение позволяет передавать 8-битные данные, восьмой (старший) бит устанавливается в ноль. Команды могут содержать параметры, которые отделяются пробелами или символами табуляции. Каждая строка может содержать только одну команду (с параметрами или без), должна заканчиваться парой <CRLF> и быть длиной не более 512 байт.

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

Ответы бывают двух видов: текстовые и статус-ответы. Текстовые ответы следуют только после строки цифрового статус-ответа, который указывает на то, какого рода текстовый ответ будет за ним следовать. Текстовый ответ представляет собой последовательность строк текстового содержания, каждая из которых заканчивается комбинацией <CRLF>. Отдельная строка, содержащая только символ (.), а точнее комбинацию символов <CRLF>.<CRLF>,

передается для обозначения конца текста. В случае, если исходный текст содержит в качестве первого символа строки символ (.), то при передаче он будет продублирован. На приемной стороне пользователь отбросит этот символ.

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

Статус-ответы являются сообщениями о статусе от сервера и индицируют ответ на последнюю команду, принятую от клиента.


Строка статус-ответа начинается с 3- х цифрового кода, достаточного для различения всех возможных ответов. Некоторые из них предваряют передачу текста.

Ниже приводится список основных кодов ответов, которые могут быть посланы NNTP-сервером. Они не являются строго привязанными к конкретным командам и могут быть возвращены как результат установления соединения, ошибки или других необычных ситуаций.

Обычно коды ответов типа 1хх могут быть проигнорированы или отображены по желанию; коды 200

или 201 посылаются после установления соединения с NNTP-сервером в зависимости от того, разрешена публикация или нет; код 400

будет послан тогда, когда NNTP-сервер прекратит обслуживание (например, по запросу оператора); и коды 5хх указывают на то, что команда не может быть выполнена по каким-либо причинам.



100 Текст с инструкциями.



190 – 199 Отладка выхода.



200 Сервер готов - публикация разрешена.



201 Сервер готов - публикация не разрешена.



400 Прекращение обслуживания.



500 Команда не опознана.



501 Ошибка в синтаксисе команды.



502 Ограничение доступа или отказ в разрешении.



503 Ошибка программы - команда не выполнима.



Примечание



Числовые коды ответов сервера новостей составляют определенную иерархию и обозначают состояние сервера после выполнения команды. Описание кодов возврата выходит за рамки данной книги. Подробное описание структуры системы кодов вы можете найти, например, в RFC-977.

Итак, после того как клиент установил TCP-соединение с сервером новостей, сервер отвечает приглашением к работе по протоколу NNTP (далее символом "S" будем обозначать сервер новостей, а символом "С" — клиента). Например:





S: 200 newsvax news server ready — posting ok





Код 200 означает, что данный сервер позволяет клиенту передавать ему новые статьи. Если код ответа — 201, сервер не позволяет клиенту передавать на него новые статьи:





S: 201 badvax netnews server ready -- no posting allowed





Теперь клиент может начать работу. Далее будут описаны наиболее употребительные в ежедневной работе команды NNTP.







Команда LIST возвращает список групп сервера новостей и сопутствующую информацию. Например:






С: LIST

S: 215 list of newsgroups follows

S: net.wizards 10125 10011 у

S: net.idiots 00100 00001 n

S: ...

S: <groupname> <last> <first> p



где <groupname> — имя группы новостей, <last> и <first> — номера последней и первой статьи в группах, р — флаг, показывающий, может ли клиент отправлять свои статьи в эти группы ('n' — не может, 'у' — может).

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







Для того чтобы получить статьи из конкретной группы, пользователь должен к ней подсоединиться. Это делается с помощью команды GROUP. В качестве параметра этой команды задается название группы новостей. Если пользователь не знает названия группы, может взять его из списка, возвращаемого командой LIST. Например:






С: GROUP net.deneg

S: 211 104 10011 10125 net.deneg group selected

(there are 104 articles on file, from 10011 to 10125)





где 211 — код успешного открытия группы (если код =411, такой группы нет), число 104 — количество статей в группе, 10011 — номер первой статьи группы, 10125 — номер последней статьи. После выполнения этой команды создается указатель на текущую статью, который по умолчанию будет указывать на первую статью в группе.





После того как выбрана группа новостей, пользователь может прочитать статью из этой группы. Для этого можно использовать команды: ARTICLE, BODY, HEAD. В качестве аргументов команды используют либо номер статьи, либо ее уникальный идентификатор (Message-ID). Последний может использоваться, например, для предотвращения повторного чтения одной и той же статьи. Разница между этими командами заключается в том, что ARTICLE возвращает как заголовок, так и тело статьи, HEAD возвращает только заголовок, a BODY — только тело сообщения. Например:
<



/p>





С: ARTICLE <87623@baz.net>

S: 220 <87623@baz.net> All of article follows

S: ... text ...

C: BODY 402

S: 220 402 <4105@ucbvax.arpa> Article retrieved, body follows

S: ... text ...

C: HEAD 404

S: 220 404 <mik@vax.net> Article retrieved, head follows

S: ... text ...









Сообщения в группе можно читать последовательно, не обращаясь к номеру статьи. Для этого требуется установить указатель на текущую статью. Это делает команда STAT. Аргументом команды является или номер статьи в группе, или уникальный идентификатор сообщения (Message-ID). После того как указатель установлен, вы можете читать текст статей, например, командой BODY, не указывая номера. Для того чтобы передвинуть указатель на следующую статью, следует подать команду NEXT без аргументов, соответственно, на предыдущую — команду LAST. Например:






С: STAT 110

S: 223 110 <23445@svax.com> article retrieved — statistics

C: BODY

S: 222 110 <23445@svax.com> article retrieved - body follows

S: ... text ...

C: NEXT

S: 223 113 <21495@nuke.uucp> article retrieved - statistics









Пользователь может получить от сервера новостей список групп, которые были созданы позднее заданной даты. Этот сервис предоставляется командой NEWGROLJPS. Аргументами команды NEWGROUPS являются дата и время в формате "YYMMDD HHMMSS", флаг отсчета времени (локальное или по GMT), маска имен групп. Например, запрос списка групп, созданных на данном сервере с 15 мая 1995 года по GMT и имеющих в своем названии строку "net" выглядит следующим образом:






С: NEWGROUPS 950515 000000 GMT <net>

S: 235 New newsgroups since 950515 follow

S: net.fluff

S: ...









Пользователь может получить от сервера новостей список уникальных идентификаторов статей которые были созданы в указанной группе позднее заданной даты. Этот сервис предоставляется командой NEW-NEWS. Аргументами команды являются дата и время в формате "YYMMDD HHMMSS", флаг отсчета времени (локальное или по GMT), маска имени группы новостей. Маска имени в данной команде позволяет использовать символ джокеры ("*") и символ отрицания ("!"). Например, запрос списка статей, полученных всеми группами новостей данного сервера после 16 июня 1997 года выглядит следующим образом:
<



/p>

С: NEWNEWS * 970616 000000

S: 230 New news since 970616 000000 follows

S: <1772@foo.UUCP>

S: ...

Команда IHAVE информирует сервер, что пользователь имеет статью с идентификатором <Message-ID>, который указывается в качестве аргумента данной команды. Например:
С: IHAVE <4105@vax.com>

S: 435 Already seen that one, where you been?

С: IHAVE <4109@vax.com>

S: 335 News to me! <CRLF.CRLF> to end.

С: (sends article)

С : .

S: 235 Article transferred successfully. Thanks.

Если сервер уже имеет данную статью, он ответит, что копия статьи у него уже есть. Если указанной статьи нет, сервер попросит ее отправить, и пользователь может отправить статью. При отправке клиент должен передать всю статью целиком, включая заголовок и тело сообщения в том же формате, в каком он получает статьи от данного сервера. Передача сообщения завершается строчкой, содержащей символ "." (т. е. последовательностью "<CRLF>.<CRLF>").

Ситуация, когда сервер новостей не имеет сообщения, в то время как оно находится у его клиента, может возникнуть, например, если клиент работает с несколькими серверами, которые еще не успели или не могут по каким-либо причинам обменяться данными сообщениями.

Для того чтобы отправить в конференцию новую статью, пользователь должен сначала убедиться, что данная конференция доступна для записи новых статей и дать команду POST. Сервер должен ответить кодом готовности принять сообщение (340). После этого пользователь может отправить статью, включая заголовок и тело сообщения в том же формате, в каком он получает статьи от данного сервера. Передача сообщения завершается последовательностью "<CRLF>.<CRLF>". Например:
С: POST

S: 340 Continue posting; Period on a line by itself to end

C: ...

C: .

S: 240 Article posted successfully.

Завершает сессию обмена команда QUIT:
С: QUIT

S: 205 VAX closing connection. Goodbye.

 

Сценарий работы NNTP


Далее представлен простейший пример сессии работы клиента и сервера по протоколу NNTP:

S: 200 atvax news server ready — posting ok

C: GROUP net. Wizards

S: 211 104 10011 10125 net.wizards group selected

(there are 104 articles on file, from 10011 to 10125)

C: STAT 10110

S: 223 10110 <23445@svax.ARPA> article retrieved - statistics

only (article 10110 selected, its message-id is

<23445@svax.ARPA>)

C: BODY

S: 222 10110 <23445@svax.ARPA> article retrieved - body follows

S: ... text body ...

S: .

C: NEXT

S: 223 10113 <21495@nudebch.uucp> article retrieved - statistics

only (article 10113 was next in group)

C: ARTICLE 10120

S: 220 10120 <4105@ucbvax.ARPA> Article retrieved, text follows

S: ... text article ...

S:

C: QUIT

S: 205 goodbye. <



Серверы новостей


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

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

Для небольшого количества пользователей идеальной схемой построения обмена новостями была бы структура, состоящая из одного News-сервера и пользователей, обращающихся к нему для отправки или получения новых статей. В системах с большим количеством клиентов, например, масштаба университета или крупного предприятия, необходимо использовать так называемые промежуточные серверы новостей — intermediate news server.

Такой промежуточный сервер работает к каждом домене сети организации и отвечает за обеспечение посреднических действий между своими клиентами и главным News-сервером. В его обязанности, например, входит кэширование новых статей для подписчиков на данные конференции внутри домена. Для работы с UseNet клиент такой сети сначала соединяется со "своим" промежуточным сервером и читает размещенные на нем статьи новостей. Если сервер оказывается неработоспособным или у него нет требуемых статей, программное обеспечение может обратиться на более высокий уровень иерархии сервера новостей.

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

Для обмена сообщениями между серверами, а также для доступа к серверам используется протокол NNTP. <



Система UseNet


Internet-сообщество уже много лет пользуется системой тиражирования объявлений, рекламы, сообщений и другой информации. Всю подобным образом тиражируемую информацию называют новостями — "news". Новости делятся на группы новостей — "newsgroups". Группы новостей организованы в определенном порядке, основанном на распределении дискуссий по темам, например, отдых, спорт, новости, информация, религия и др. Внутри каждой из этих групп может быть до нескольких тысяч подгрупп, которые, в свою очередь, обладают такой же иерархической структурой. Принцип этой организации подобен структуре размещения каталогов и подкаталогов на жестком диске.

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

Biz - бизнес;

Comp – вычислительная техника;

News - новости общего характера;

Rec - развлечения, хобби, отдых;

Sci - наука;

Soc – социальные темы;

Talk – с ориентацией на дискуссию;

Alt – альтернативные взгляды;

Misc – всё остальное.

К примеру, группа, обменивающаяся информацией об отдыхе (recreation), использует ключ гес для построения иерархии более низкого уровня, такой как rec.arts, rec.games, rec.pets, rec.sports, rec.travel и т. д. Каждая из подгрупп, например, rec.pets, может быть, в свою очередь, разделена на более мелкие подгруппы, например, rec.pets.dogs, rec.pets.cats и др. Так организованные группы новостей позволяют пользователям, имеющим общие интересы, обмениваться новостями, отправлять свои статьи и отвечать на заметки других пользователей, обмениваться иллюстрациями и программным обеспечением для просмотра статей этой группы и т. п.

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


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

Каждое ребро графа UseNet можно соотнести с идентификатором конференции, тогда отношение "подписки" топологически можно изобразить так:

хост А "подписан" на конференцию хоста В, если между А и В существует ребро графа, принадлежащее подсети данной конференции.



Примечание



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

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

Одним из решений этой проблемы является отслеживание истории прохождения хостов данной статьей. Так, каждый хост, при. прохождении через него статьи, фиксирует уникальный номер сообщения (Message-ID). Если сообщение с тем же номером приходит на хост еще раз, оно уже не принимается. Другой способ предотвращения петель состоит в фиксировании пути внутри самого сообщения. То есть сообщение никогда не будет отправлено на хост, зафиксированный в определенном поле заголовка статьи (Path).



Способы тиражирования сообщений



Широко используются два основных метода тиражирования сообщений:

Отправка статей по электронной почте по спискам рассылки участников конференций.



Использование распределенной базы данных и серверов новостей системы UseNet.





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






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









Другой способ тиражирования информации заключается в работе с системой серверов новостей и распределенной базы данных для хранения информационных сообщений. Этот метод используется в системе UseNet и объединяет работу множества различных сетей с разнообразным аппаратным и программным обеспечением.






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

<


Управляющие сообщения NNTP


Если сообщение содержит строку "Control:", это означает, что данное сообщение — управляющее. Управляющие сообщения используются для обмена служебной информацией между UseNet-хостами (а не пользователями). Управляющие сообщения передаются с использованием того же самого механизма, как и обычные сообщения, т. е. через систему групп или конференций подписки.

Примечание

Для совместимости со старыми версиями системы, сообщения адресованные группе "all.all.ctl" считаются управляющими. Если сообщение этой группы не содержит поля "Control:", поле предмета сообщения "Subject:" для таких сообщений интерпретируется как параметр "Control:". Кроме того, если в сообщениях этой группы первые 4 символа поля "Subject:" содержат подстроку "cmsg", оставшаяся часть поля "Subject:" интерпретируется как управляющее сообщение.

Поля "Control:" заголовка сообщения содержат команду и параметры команды: первое слово представляет собой команду, остальные — параметры этой команды. Другие поля заголовка и тело сообщения тоже могут использоваться как потенциальные параметры команды. Например:

Control: cancel <any.string@host.domen>

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

Сообщение "cancel" позволяет пользователю удалять статьи из локальной системы уже после того, как статья была тиражирована. Параметр команды — идентификатор сообщения "Message-ID".

cancel <Message-ID>

Отправить такую команду может только автор статьи или администратор локальной UseNet-системы. Обработчик данного управляющего сообщения, прежде чем его применить, сверяет параметры "Sender:" и "From:" управляющего и исходного сообщений.

<


/p>





Сообщения "ihave/sendme". Эти сообщения являются частью ihave/sendme-протокола, который позволяет одному хосту (А) сообщить другому хосту (В), что данное сообщение им получено — команда "ihave" (а другому хосту (В) запросить это сообщение — команда "sendme").






ihave <Message-ID list> [<remotesys>]

sendme <Message-ID list> [<remotesys>]



Например, хост (А) получил сообщение <1234@vax.berkeley.edu> и хочет передать его на хост (В). Тогда (А) отправляет через какую-либо из конференций, на которые подписан (В), хосту (В) управляющее сообщение "ihave <1234@vax.berkeley.edu> А". Хост (В) отвечает, опять же через какую-либо из конференций, на которые подписан хост (А), управляющим сообщением "sendme <1234@vax.berkeley.edu> В". После получения сообщения "sendme", хост (А) отправляет хосту (В) данное сообщение.

Эти команды позволяют хостам выбирать статьи для пересылки, тем самым уменьшая передаваемый поток новостей "вслепую".

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







Управляющие сообщения могут создавать или удалять группы (конференции) новостей.






newgroup <groupname> [moderated]



Это сообщение создает конференцию с именем "groupname". Тело данного управляющего сообщения может содержать краткую аннотацию новой группы (предназначение, уровень и темы дискуссий и т. д.). Если указан аргумент "moderated" — это означает, что у данной группы есть председательствующий, который следит за уровнем и темами дискуссий. По умолчанию новая конференция не имеет председательствующего. Статья новостей может быть отправлена в конференцию только после того, как данная конференция будет создана.



rmgroup <groupname>

Это сообщение удаляет конференцию с именем "groupname".

Управляющее сообщение "sendsys" ( без аргументов) представляет собой запрос к данному UseNet-хосту на получение списка всех его соседей и групп статей новостей, которые он передает своим соседям. Ответ на запрос передается отправителю данного управляющего сообщения, указанному в поле "Reply-To:" или в поле "From:" управляющего сообщения.
Передаваемая в ответ информация общедоступна и должна быть отправлена по запросу автоматически или вручную, в той или иной форме. Например, ответное сообщение может быть таким: (пользователь "mark" отправил запрос своему хосту):

From: cbosgd!mark (Mark Horton)

Date: Sun, 27 Mar 83 20:39:37 –0500

Subject: response to your sendsys request

To: mark@home.att.com

Responding-System: cbosgd.att.com

cbosgd:osg,cb,btl,bell,world,comp,sci,rec/talk,misc,news,soc

ucbvax:world,comp,to.ucbvax

cbosg:world,comp,be 11,btl,cb,osg,to.cbosg

cbosgb:osg,to.cbosgb sescent:wo rid,comp,bell,to.sescent:F:/usr/spool/outnews/sescent

Первая строчка тела сообщения содержит имя отвечающей системы, затем располагается информация ответа. Разделитель колонок — символ ":". Первая колонка содержит имя хоста соседа, вторая — имена конференций, в которые данный хост отправляет статьи. Третья и четвертая колонки не специфицированы, их интерпретация зависит от конкретной реализации программного обеспечения.

Управляющее сообщение "version" (без аргументов) используется для запроса имени и версии программного обеспечения системы UseNet, используемой на запрашиваемом хосте.
 

PPPS


АТМ Bridge Frame Relay HDLC

Протокол PPP (Point-to-Point Protocol)

ОГЛАВЛЕНИЕ

1. Введение
2. Общее описание протокола PPP
3. Инкапсуляция PPP
3.1. Принцип инкапсуляции

3.2. Формат кадра РРР при инкапсуляции

4. Функционирование звена PPP
4.1. Краткий обзор
4.2. Диаграмма стадий PPP
4.3. Стадия "Выключено"
4.4. Стадия "Установление связи"
4.5. Стадия "Аутентификация"
4.6. Стадия "Протокол сетевого уровня"
4.7. Стадия "Завершение связи"
5. Автомат согласования опций
5.1. Таблица переходов состояний
5.2. Состояния
5.3. События
5.4. Действия
5.5. Предотвращение зацикливания
5.6. Счетчики и таймеры
6. Форматы пакетов LCP
6.1. Формат пакетов LCP "Запрос конфигурации"
6.2. Формат пакетов LCP "Подтверждение конфигурации"

6.3. Формат пакетов LCP "Неподтверждение конфигурации"
6.4. Формат пакетов LCP "Сброс конфигурации"
6.5. Формат пакетов LCP "Запрос разъединения" и "Подтверждение разъединения"
6.6. Формат пакетов LCP "Сброс кода"
6.7. Формат пакетов LCP "Сброс протокола"
6.8. Формат пакетов LCP "Запрос эха" и "Ответ эха"
6.9. Формат пакетов LCP "Запрос сброса"
7. Опции конфигурации LCP
7.1. Максимальный размер принимаемого блока
7.2. Протокол аутентификации
7.3. Протокол качества
7.4. Мagic-номера
7.5. Сжатие поля протокола
7.6. Сжатие полей адреса и управления
Список литературы
Список используемых сокращений и терминов

1. Введение

С конца 1980-х годов в сети Internet наблюдается резкий рост числа главных вычислительных машин (ГВМ или хостов), работающих с протоколами TCP/IP. Их преобладающее большинство было подключено к локальным вычислительным сетям различных типов, наиболее популярной среди которых была сеть Ethernet. Большая часть других хостов соединялась через глобальные сети, такие как сети передачи данных общего пользования типа Х.25. Сравнительно небольшое число ГВМ было подключено к каналам связи с непосредственным соединением точка-точка (т.е.


к последовательным каналам связи), хотя такое соединение относится к числу старейших методов передачи информации, и почти каждый хост поддерживает данный тип соединения. Например, асинхронные интерфейсы RS-232-С в настоящее время имеют очень широкое распространение.

Одной из причин малого числа каналов связи TCP/IP с непосредственным соединением было отсутствие стандартного протокола нижележащего уровня для передачи дейтаграмм через последовательные линии связи. Для разрешения этой проблемы и был разработан протокол PPP (Point-to-Point Protocol - протокол канала связи с непосредственным соединением). Помимо решения задачи формирования стандартных пакетов данных IP для каналов с непосредственным соединением, РРР также должен был решить другие проблемы, в том числе присвоение и управление адресами IP, асинхронное (старт-стопное) и синхронное (бит-ориентированное) формирование пакета данных, конфигурацию канала связи, проверку его качества, обнаружение ошибок, согласование способа сжатия информации и т.д. В РРР эти вопросы решаются путем использования протокола управления каналом LCP (Link Control Protocol) и семейства протоколов управления сетью NCP (Network Control Protocols), которые позволяют согласовывать необязательные параметры конфигурации и различные возможности. Сегодня PPP, помимо IP, обеспечивает поддержку также и других протоколов, в том числе IPX и DECnet.

2. Общее описание протокола PPP



Компоненты PPP



РРР обеспечивает метод передачи дейтаграмм через последовательные каналы связи с непосредственным соединением типа "точка-точка" (point-to-point). Он включает три основных компонента:

Метод инкапсуляции (метод формирования дейтаграмм для передачи по последовательным каналам). РРР в качестве базиса для формирования дейтаграмм при прохождении через каналы с непосредственным соединением использует кадры, подобные кадрам процедуры HDLC (High-level Data Link Control -

управление каналом передачи данных высокого уровня).
Расширяемый протокол контроля канала LCP

(Link Control Protocol). LCP предназначен для организации, выбора конфигурации и проверки соединения канала передачи данных.
Семейство протоколов контроля сети NCP (Network Control Protocols). Служит для организации и выбора конфигурации различных протоколов сетевого уровня.
<



/p>

РРР может использовать множество различных протоколов контроля сети, описанных в других источниках, поэтому в этой спецификации они рассмотрены обобщенно. Данное описание протокола PPP содержит рассмотрение его общих принципов, метода инкапсуляции и подробное описание протокола LCP.



Основные принципы работы



Для того, чтобы организовать связь через канал с непосредственным соединением, инициирующий РРР в начале отправляет пакеты LCР для задания конфигурации соединения, а также проверки канала передачи данных. После того, как канал установлен и пакетом LCР выполнено необходимое согласование факультативных средств, инициирующий РРР отправляет пакеты NCP, чтобы выбрать и определить конфигурацию одного или более протоколов сетевого уровня. Как только конфигурация каждого выбранного протокола определена, дейтаграммы из каждого протокола сетевого уровня могут быть отправлены через данный канал. Канал сохраняет свою конфигурацию до тех пор, пока пакеты LCP или NCP явно не закроют его или пока не произойдет какое-нибудь внешнее событие (например, истечет срок бездействия таймера или вмешается какой-нибудь пользователь).



Требования, определяемые физическим уровнем



РРР может работать через любой интерфейс DTE/DCE (например, EIA RS-232-C, EIA RS-422, EIA RS-423 и МСЭ-Т V.35). Единственным абсолютным требованием, которое предъявляет РРР, является требование обеспечения дублированных схем (либо специально назначенных, либо переключаемых), которые могут работать как в синхронном, так и в асинхронном последовательном режиме, прозрачном для блоков данных канального уровня РРР. Протокол РРР не предъявляет каких-либо ограничений, касающихся скорости передачи информации, кроме тех, которые определяются используемым интерфейсом DTE/DCE.



Канальный уровень PPP



РРР использует принципы, терминологию и структуру блока данных процедур HDLC (ISO 3309-1979) Международной организации по стандартизации (ISO - International Standards Organization), модифицированных стандартом ISO 3309-1984/PDAD1 "Addendum 1:Start/stop Trasmission" (Приложение 1: Стартстопная передача").



ISO 3309- 1979 определяет структуру блока данных HLDC для применения в синхронных окружениях. ISO 3309-1984/PDAD1 определяет предложенные для стандарта ISO 3309-1979 модификации, которые позволяют его использование в асинхронных окружениях. Процедуры управления РРР используют определение и кодирование управляющих полей, стандартизированных ISO 4335-1979 и ISO 4335-1979/Addendum 1-1979.

Протокол PPP разработан для каналов связи, которые транспортируют пакеты между двумя одноранговыми объектами. Эти каналы обеспечивают полнодуплексное одновременное двунаправленное функционирование и передают пакеты в соответствующем порядке. Предполагается, что PPP обеспечит общее решение для несложной связи широкого разнообразия хостов, мостов и маршрутизаторов [2].



Инкапсуляция



Инкапсуляция PPP обеспечивает мультиплексирование различных протоколов сетевого уровня одновременно в одном и том же канале (звене передачи данных - ЗПД). Метод инкапсуляции PPP разработан для сохранения совместимости с наиболее часто используемыми аппаратными средствами поддержки.

Для проведения инкапсуляции при использовании по умолчанию кадров, подобных кадрам HDLC, необходимы только 8 дополнительных октетов. В системах, где требуется повышенная пропускная способность, для инкапсуляция и формирования кадров выделяются лишь 2 или 4 октета.

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



Протокол контроля канала LCP



Протокол PPP для достаточной универсальности и применимости к широкому разнообразию систем включает протокол контроля канала LCP (Link Control Protocol). LCP используется, чтобы автоматически согласовывать опции формата инкапсуляции, изменять пределы размеров пакетов, обнаруживать зацикливание звена и другие ошибочные ситуации, связанные с различиями конфигураций, и разрывать связь.



Его другие дополнительные средства обслуживания - это аутентификация идентичности однорангового объекта на канале и определение, когда связь функционирует должным образом, а когда - нет.

Процесс LCD проходит через четыре четко различаемые фазы:

Организация канала и согласование его конфигурации. Прежде, чем может быть произведен обмен какими-либо дейтаграммами сетевого уровня (например, IP), LCP сначала должен открыть связь и согласовать параметры конфигурации. Эта фаза завершается после того, как будет отправлен и принят пакет подтверждения конфигурации.
Определение качества канала связи. LCP обеспечивает необязательную фазу определения качества канала, которая следует за фазой организации канала и согласования его конфигурации. В этой фазе проверяется канал с целью выяснения, является ли качество канала достаточным для вызова протоколов сетевого уровня. Эта фаза является полностью факультативной. LСP может задержать передачу информации протоколов сетевого уровня до завершения этой фазы.
Согласование конфигурации протоколов сетевого уровня. После того, как LСP завершит фазу определения качества канала связи, соответствующими NCP может быть выбрана конфигурация сетевых протоколов, и они могут быть в любой момент вызваны и освобождены для последующего использования. Если LCP закрывает данный канал, он информирует об этом протоколы сетевого уровня, чтобы они могли принять соответствующие меры.
Прекращение действия канала. LCP может в любой момент закрыть канал. Это обычно делается по запросу пользователя, но может произойти также из-за какого-нибудь физического события, такого, как потеря носителя или истечение периода бездействия таймера.
Существует три класса пакетов LCP:

Пакеты для организации канала связи. Используются для организации и выбора конфигурации канала.
Пакеты для завершения действия канала. Используются для завершения действия канала связи.
Пакеты для поддержания работоспособности канала. Используются для поддержания и отладки канала.
<



/p>

Эти пакеты используются для достижения работоспособности каждой из фаз LCP.



Протоколы контроля сети (NCPs)



Каналы РРР имеют много проблем с используемым семейством сетевых протоколов. Например, назначение и управление адресов IP, которые являются проблемой даже в ЛВС, являются особенно трудными для коммутируемых каналов точка-точка (point-to-point). Эти проблемы решаются семейством протоколов контроля сети (NCPs - Network Control Protocols), каждый из которых отвечает за определенные функции, требуемые соответствующими протоколами сетевого уровня.



Конфигурация



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

Эта самоконфигурация осуществляется через расширяемый дополнительный механизм согласования, в котором каждое окончание канала сообщает другому свои возможности и требования. Хотя для протокола LCP определен дополнительный механизм согласования, описанный в данной спецификации, тот же самый механизм используется другими протоколами контроля, в частности семейством NCPs.

3. Инкапсуляция PPP

3.1. Принцип инкапсуляции

Инкапсуляция PPP используется для прозрачной передачи дейтаграмм различных протоколов. Она требует указаний на начало и конец инкапсуляции.

В соответствии с RFC 1661 [1] протокольный блок данных PPP имеет следующий вид (где поле "Информация" - содержит данные, инкапсулируемые в РРР). Поля передаются слева направо.

Протокол

(8/16 бит)
Информация Дополнение




Рассмотрим особенности использования данных полей подробнее.



Поле "Протокол"



Поле "Протокол" (согласно RFC 1661) содержит один или два октета. Их значения идентифицируют вид дейтаграммы, вставленной в поле "Информация".



Наиболее значащие октеты поля передаются первыми.

Структура этого поля соответствует механизму расширения стандарта ISO 3309 для полей адреса. Все значения поля "Протокол" должны быть нечетными; наименее значащий бит наименее значащего октета должен равняться "1". Кроме того наименее значащий бит наиболее значащего октета должен равняется нулю.

Полученные кадры, которые не согласуются c этими правилами, должны расцениваться как кадры нераспознанного протокола.

Значения полей "Протокол" в диапазоне от 0*** до 3*** идентифицируют протокол сетевого уровня специальных пакетов, а значения от 8*** до b*** идентифицируют пакеты, принадлежащие соответствующим протоколам контроля сети (NCPs), если таковые имеются в наличии.

Значения полей "Протокол" в диапазоне от 4*** до 7*** используются для протоколов с низким объемом трафика, которые не соответствуют NCP. Значения полей "Протокол" в диапазоне от c*** до f*** идентифицируют пакеты протоколов уровня ЗПД (таких, как LCP).

Значения поля "Протокол" определяются в последнем издании "Assigned Numbers RFC" [3]. В настоящее время эта спецификация определяет следующие значения:

Значение (в 16-ричном виде) Наименование протокола
0001 Протокол дополнения
0003..001f Резерв
007d Резерв
00cf Резерв
00ff Резерв
8001..801f Не используется
807d Не используется
80cf Не используется
80ff Не используется
C021 Протокол LCP
C023 Протокол аутентификации пароля
C025 Сообщение о качестве связи
C223 Отклик протокола аутентификации в режиме подтверждения
Разработчики новых протоколов должны получить номер для разрабатываемого ими протокола в Отделе назначения номеров Internet (IANA - Internet Assigned Numbers Authority), по адресу IANA@isi.edu.



Поле "Информация"



Поле "Информация" включает ноль или более октетов. Оно содержит дейтаграмму в соответствии с протоколом, указанным в поле "Протокол".



Максимальная длина поля "Информация", включая поле "Дополнение", но не включая поле "Протокол", называется максимальным размером блока (MRU - Maximum Receive Unit), который не должен превышать 1500 октетов. Приложения PPP путем согласования могут использовать другие значения MRU.



Поле "Дополнение"



Поле "Информация" при передаче может дополняться произвольным числом октетов, вплоть до значения MRU. Каждый протокол должен иметь возможность отличать дополнительные октеты от реальной информации.

3.2. Формат кадра РРР при инкапсуляции

Ниже приведен пример формата кадра РРР при инкапсуляции.

Длина поля в байтах: 1 1 1 2/1 Переменная 2 или 4
Флаг Адрес Управление Протокол Данные FCS
Рассмотрим назначение указанных полей.



Последовательность "Флаг"



Длина последовательности "Флаг" равна одному байту; она указывает на начало или конец блока данных. Эта последовательность имеет вид: 01111110.



Поле "Адрес"



Длина поля "Адрес" равна 1 байту; поле содержит двоичную последовательность 11111111, представляющую собой стандартный широковещательный адрес. РРР не присваивает индивидуальных адресов станциям.



Поле "Управление"



Поле "Управление" составляет 1 байт и содержит двоичную последовательность 00000011, которая требует от пользователя передачи информации непоследовательным кадром. Предусмотрены услуги без установления соединения канала связи, аналогичные услугам LLC Type 1.



Поле "Протокол"



Длина поля "Протокол" равна 2 байтам (или 1 байту); его значение идентифицирует протокол, заключенный в информационном поле блока данных. Большинство современных значений поля "Протокол" определены в последнем выпуске Assigned Numbers Request for Comments (RFC).



Поле "Данные"



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



Конец информационного поля определяется локализацией замыкающей последовательности "флаг" и предоставлением двух байтов полю FCS. Максимальная длина информационного поля по умолчанию равна 1500 байтам. В соответствии с априорным соглашением, реализации РРР могут использовать другие значения максимальной длины информационного поля.



Поле FCS



Поле проверочной последовательности блока данных (FCS - frame check sequence) обычно составляет 16 бит (два байта). В соответствии с априорным соглашением реализации РРР могут использовать 32-х битовое (четырехбайтовое) поле FCS, чтобы улучшить процесс выявления ошибок.

4. Функционирование звена PPP

4.1. Краткий обзор

Чтобы установить соединение по каналу типа "точка-точка", каждое окончание канала PPP должно сначала послать пакеты LCP, чтобы сконфигурировать и протестировать канал данных. После того, как связь установлена, одноранговый объект может быть подвергнут аутентификации.

Затем PPP должен послать пакеты NCP, чтобы выбрать и сконфигурировать один или более протоколов сетевого уровня. Если каждый из выбранных протоколов сетевого уровня сконфигурирован, то по данному каналу из каждого протокола сетевого уровня можно посылать дейтаграммы.

Канал будет оставаться сконфигурированным для связи до тех пор, пока пакеты LCP или NCP явно не закроют его или пока не произойдет некоторое внешнее событие (завершение работы неактивного таймера или вмешательство администратора сети).

4.2. Диаграмма стадий PPP

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



Основные характеристики данных стадий подробнее рассмотрены ниже.

4.3. Стадия "Выключено"

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



В течении этой стадии автомат LCP (рассматривается ниже) находится в состояниях "Начальное" или "Старт". Переход к стадии "Установление связи" выполняется по сигналу "Включение" автомату LCP.

Примечание:

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

4.4. Стадия "Установление связи"

Чтобы установить связь, используется протокол LCP путем обмена пакетами выбора конфигурации. При завершении обмена LCP входит в состояние "Открыто" (когда пакет "Запрос конфигурации", описанный ниже, был послан и получен). Все опции конфигурации, если они не изменены при согласовании конфигурации, имеют значения по умолчанию.

Важно заметить, что с использованием LCP конфигурируются только те опции конфигурации, которые являются независимыми от специфических протоколов сетевого уровня. Конфигурация индивидуальных протоколов сетевого уровня выполняется в соответствии c отдельными протоколами контроля сети (NCPs) в течение стадии "Протокол сетевого уровня".

Любые пакеты, не соответствующие протоколу LCP, полученные в течение этой стадии, должны быть сброшены без уведомления.

Получение запроса конфигурации LCP вызывает переход из стадий "Протокол сетевого уровня" или "Аутентификация" к стадии "Установление связи".

4.5. Стадия "Аутентификация"

На некоторых каналах может возникнуть необходимость подтверждения одноранговым объектом своей подлинности перед разрешением обмена пакетами протокола сетевого уровня.

По умолчанию, установление подлинности не обязательно. Если приложение требует, чтобы подлинность однорангового объекта подтверждалась некоторым определенным протоколом аутентификации, тогда оно должно запрашивать использование этого протокола аутентификации в течение стадии "Установление связи".



Установление подлинности должно проводиться как можно скорее после установления связи. Однако, одновременно может происходить определение качества связи. В этом случае приложение не должно позволять обмен пакетами определения качества связи, чтобы не задерживать установление подлинности на неопределенное время.

Переход от стадии "Аутентификация" к стадии "Протокол сетевого уровня" не должен наступать до завершения аутентификации. Если установление подлинности не выполнено, то должен произойти переход к стадии "Завершение связи".

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

Заметим, что приложение не должно завершать аутентификацию по тайм-ауту или при отсутствии ответа. Установление подлинности должно предусматривать некоторый метод повторной передачи и переходить к стадии "Завершение связи" только после того, как число попыток аутентификации превысит заданный порог.

Приложение, которое не признало подлинность однорангового объекта, инициирует стадию "Завершение связи".

4.6. Стадия "Протокол сетевого уровня"

Когда PPP завершает предыдущие стадии, каждый протокол сетевого уровня (такой как IP, IPX или AppleTalk) должен быть индивидуально сконфигурирован согласно соответствующему протоколу контроля сети (NCP). Каждый NCP может быть открыт и закрыт в любое время.

После того, как NCP достиг состояния "Открыто", PPP будет передавать соответствующие пакеты протокола сетевого уровня. Любые пакеты протокола сетевого уровня, полученные, когда NCP не находится в состоянии "Открыто", должны быть сброшены без уведомления.

Примечание:

Когда LCP находится в состоянии "Открыто", любой пакет протокола, который не поддерживается приложением, должен быть указан в пакете сброса протокола (Protocol-Reject), описанном ниже.



Только пакеты поддерживаемых протоколов сбрасываются без уведомления.

В течение этой стадии, трафик канала состоит из любой возможной комбинации пакетов LCP, NCP и протокола сетевого уровня.

4.7. Стадия "Завершение связи"

PPP может расторгнуть связь в любое время. Это может случиться из-за потери носителя, непризнания подлинности при аутентификации, неудовлетворительного качества связи, истечения таймера незанятого периода или административного закрытия связи.

LCP закрывает связь путем обмена пакетами разъединения. Когда связь закрывается, PPP информирует протоколы сетевого уровня, чтобы они выполнили соответствующие действия.

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

Любой пакет не LCP, полученный в течение этой стадии, должен быть сброшен без уведомления.

Закрытие канала связи с помощью LCP является достаточным. Посылать поток пакетов разъединения в каждом NCP нет необходимости. Более того, тот факт, что один NCP закрылся, не является достаточной причиной для разъединения канала PPP, даже если этот NCP был единственным в тот момент в состоянии "Открыто".

5. Автомат согласования опций

Для согласования параметров канала связи в протоколе РРР предусмотрено использования специального автомата с конечным числом состояний. Переходы из одного состояния в другое определяются событиями и действиями. События состоят в поступлении внешних команд, таких как "Открыть" и "Закрыть", истечение таймера перезапуска и прием пакетов от однорангового объекта.



Действия включают старт таймера перезапуска и передачу пакетов одноранговому объекту.

Некоторые типы пакетов: "Неподтверждение конфигурации" (Configure-Naks) и "Сброс конфигурации" (Configure-Rejects) или "Сброс кода" (Code-Rejects) и "Сброс протокола" (Protocol-Rejects) или "Запрос эха" (Echo-Requests), "Ответ эха" (Echo-Replies) и "Запрос сброса" (Discard-Requests) - не дифференцируются в описании автомата. Как будет показано ниже, эти пакеты выполняют различные функции, но они всегда вызывают одни и те же переходы.

События: Действия:
Up = включение нижнего уровня tlu = этот уровень включается
Down = выключение нижнего уровня tld = этот уровень выключается
Open = административное открытие tls = этот уровень начинается
Close= административное закрытие tlf = этот уровень завершается
TO+ = таймаут со счетчиком > 0 irc = счетчик перезапуска инициализируется
TO- = таймаут с истекшим счетчиком zrc = счетчик перезапуска обнуляется
RCR+ = принят запрос конфигурации (удовлетворительный) scr = посылается запрос конфигурации
RCR- = принят запрос конфигурации (неудовлетворительный)  
RCA = принято подтверждение конфигурации sca = посылается подтверждение конфигурации
RCN = принято неподтверждение/сброс конфигурации scn = посылается неподтверждение/сброс конфигурации
RTR = принят запрос разъединения str = посылается запрос разъединения
RTA = принято подтверждение разъединения sta = посылается подтверждение разъединения
RUC = принят нераспознанный код scj = посылается сброс кода
RXJ+ = принят сброс кода (разрешаемый) или сброс протокола  
RXJ- = принят сброс кода (аварийный) или сброс протокола  
RXR = принят запрос эха или ответ эха или запрос сброса ser = посылается ответ эха
5.1. Таблица переходов состояний

Ниже представлена полная таблица переходов состояний. Состояния указаны по горизонтали, а события - по вертикали.



Переходы состояний и действия представлены в форме действие/ новое состояние. Многократные действия отделяются запятыми и могут осуществляться в любом порядке. Состояние может помечаться буквой p, r или x, где:

p - пассивная опция (см. состояние "Стоп");

r - опция рестарта (см. событие "Открытие");

x - перекрестное соединение (см. событие RCA).

Дефис ( "- ") указывает на отсутствие перехода.

  Состояния
События 0. Начальное 1. Старт 2. Закрыто 3. Стоп 4. Закрытие 5. Остановка
Up 2 irc, scr/6 - - - -
Down - - 0 tls/1 0 1
Open tls/1 1 irc, scr/6 3r 5r 5r
Close 0 tlf/0 2 2 4 4
TO+ - - - - str/4 str/5
TO- - - - - tlf/2 tlf/3
RCR+ - - sta/2 irc, scr, sca/8 4 5
RCR- - - sta/2 irc, scr, scn/6 4 5
RCA - - sta/2 sta/3 4 5
RCN - - sta/2 sta/3 4 5
RTR - - sta/2 sta/3 sta/4 sta/5
RTA - - 2 3 tlf/2 tlf/3
RUC - - scj/2 scj/3 scj/4 scj/5
RXJ+ - - 2 3 4 5
RXJ- - - tlf/2 tlf/3 tlf/2 tlf/3
RXR - - 2 3 4 5
  Состояния
События 6. Послан запрос 7. Принято подтверждение 8. Послано подтверждение 9. Открыто
Up - - - -
Down 1 1 1 tld/1
Open 6 7 8 9r
Close irc, str/4 irc, str/4 irc, str/4 tld, irc, str/4
TO+ scr/6 scr/6 scr/8 -
TO- tlf/3p tlf/3p tlf/3p -
RCR+ sca/8 sca, tlu/9 sca/8 tld, scr, sca/8
RCR- scn/6 scn/7 scn/6 tld, scr, scn/6
RCA irc/7 scr/6x irc, tlu/9 tld, scr/6x
RCN irc, scr/6 scr/6x irc, scr/8 tld, scr/6x
RTR sta/6 sta/6 sta/6 tld, zrc, sta/5
RTA 6 6 8 tld, zrc, sta/5
RUC scj/6 scj/7 scj/8 scj/9
RXJ+ 6 6 8 9
RXJ- tlf/3 tlf/3 tlf/3 tld, irc, str/5
RXR 6 7 9 ser/9
Состояния, в которых работает таймер рестарта, идентифицируются присутствием событий TO. Действия scr (посылается запрос конфигурации), str (посылается запрос разъединения) и zrc (счетчик перезапуска обнуляется) запускают или перезапускают таймер рестарта.



При переходе от любого состояния, где таймер работает, к состоянию, где таймер не работает, таймер рестарта останавливается.

5.2. Состояния

Рассмотрим каждое состояние автомата более подробно.



Начальное



В начальном состоянии нижний уровень недоступен (выключен), открытия не произошло. Таймер рестарта в начальном состоянии не работает.



Старт



Состояние "Старт" - стыкуется с состоянием "Начальное". Административное событие "Открытие" было инициировано, но нижележащий уровень все еще недоступен (выключен). Таймер рестарта в состоянии "Старт" не работает.

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



Закрыто



В состоянии "Закрыто" связь доступна (включена), но события "Открытие" не произошло. Таймер рестарта в состоянии "Закрыто" не работает.

В ответ на прием пакетов запроса выбора конфигурации посылается подтверждение разъединения. Подтверждения разъединения сбрасываются без уведомления во избежание зацикливания.



Стоп



Состояние "Стоп" стыкуется с состоянием "Закрыто". Оно наступает, когда автомат ждет события "Выключение" после действия tlf ("этот уровень завершается") или после посылки подтверждения разъединения. Таймер рестарта в состоянии "Стоп" не работает.

На прием пакетов "Запрос выбора конфигурации" посылается соответствующий ответ. На прием других пакетов посылается подтверждение разъединения. Пакеты "Подтверждение разъединения" сбрасываются без уведомления во избежание зацикливания.

Пояснение:

"Стоп" - состояние перехода при завершении связи, неполадках конфигурации связи и других режимах отказа автомата. Эти потенциально отдельные состояния были объединены.

Имеется связь между ответом события "Выключение" (от действия tlf - "этот уровень завершается") и событием RCR ("Принят запрос конфигурации"). Когда прибывает запрос конфигурации перед событием "Выключение", событие "Выключение" будет уступать, а автомат возвращаться в состояние "Старт".



Это предотвращает размножение копий.

Опции приложения:

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

Эта опция полезна для выделенных каналов или каналов, которые не имеют никаких сигналов состояний, но ее не следует использовать для коммутируемых каналов.



Закрытие



В состоянии "Закрытие" делается попытка расторжения связи. Посылается запрос на разъединение, таймер рестарта работает, но подтверждение разъединения еще не получено.

После получения запроса разъединения наступает состояние "Закрыто".

После истечения таймера рестарта посылается новый запрос разъединения, и таймер рестарта запускается заново. После того, как таймер рестарта превысил величину максимального времени разъединения, наступает состояние "Закрыто".



Остановка



Состояние "Остановка" стыкуется с состоянием "Закрытие". Запрос разъединения был послан, таймер рестарта работает, но подтверждение разъединения еще не получено.

Состояние "Остановка" обеспечивает возможность расторгнуть связь перед разрешением нового трафика. После того, как связь закончилась, через состояния "Стоп" или "Старт" может иметь место новая конфигурация.



Запрос послан



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



Принято подтверждение



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



Послано подтверждение





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



Открыто



В состоянии "Открыто" подтверждение конфигурации было послано и получено. Таймер рестарта не работает.

При входе в состояние "Открыто" приложению следует сигнализировать верхним уровням, которые теперь включены. При выходе из состояния "Открыто" приложению следует сообщить верхним уровням о выключении.

5.3. События

Переходы и действия в автомате вызываются событиями, рассмотренными ниже.



Включение



Это событие происходит, когда нижний уровень указывает, что готов переносить пакеты. Обычно, это событие используется в процессе настройки модема или вызова или при некоторых других соединениях звена PPP с физической средой для сигнализации протоколу LCP о том, что звено входит в стадию "Установление связи".

Оно также может использоваться протоколом LCP для сигнализации NCP о том, что звено вошло в стадию "Протокол сетевого уровня". То есть действие tlu ("этот уровень включается") от протокола LCP вызывает событие "Включение" в NCP.



Выключение



Это событие происходит, когда нижележащий уровень указывает, что более не готов переносить пакеты. Обычно, это событие используется в процессе настройки модема или вызова или при некоторых других соединениях звена PPP с физической средой для сигнализации протоколу LCP о том, что звено входит в стадию "Выключено".

Оно также может использоваться протоколом LCP для сигнализации NCP о том, что звено вышло из стадии "Протокол сетевого уровня". То есть действие tld ("этот уровень выключается") от протокола LCP вызывает событие "Выключение" в NCP.



Открытие



Это событие указывает, что связь административно доступна для трафика; т.е. администратор сети (человек или программа) указал, что разрешено открыть канал.



Когда это событие происходит, а связь не находится в открытом состоянии, автомат пытается послать пакеты конфигурации одноранговому объекту.

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

Когда получен запрос разъединения или происходят другие события, которые заставляют канал стать недоступным, автомат будет переходить в состояние, где связь готова открываться повторно. Никакое дополнительное административное вмешательство не требуется.

Опции приложения:

Пользователи когда хотят переустановить связь, выполняют дополнительную команду "Открыть". Это может указывать, что должны быть рассмотрены новые величины опций.

Так как это не означает события "Открытие", предлагается, что когда команда пользователя "Открыть" выполняется в состояниях "Открыто", "Закрытие", "Остановка" или "Стоп", приложение запускает событие "Выключение", за которым немедленно следует событие "Включение". Необходимо позаботиться о том, чтобы событие "Выключение" не происходило от другого источника.

Событие "Выключение", за которым немедленно следует событие "Включение", вызывает обычную переустановку связи, переход от состояния "Старт" к состоянию "Послан запрос". Это вызывает переинициализацию связи без каких-либо побочных эффектов.



Закрытие



Этот событие указывает, что связь не доступна для трафика, т.е. администратор сети (человек или программа) указал, что не разрешается открывать связь. Когда происходит это событие, а связь не находится в состоянии "Закрыто", автомат пытается разорвать связь. Дальнейшие попытки переконфигурировать канал отклоняются, пока не происходит новое событие "Открытие".

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



Так как связь административно доступна (по определению), это может быть выполнено путем моделирования протоколом LCP события "Закрытие", за которым немедленно следует событие "Открытие". Необходимо побеспокоиться, чтобы событие "Закрытие" не могло происходить от другого источника.

Событие "Закрытие", сопровождаемое событием "Открытие", вызывает обычное завершение связи, переход от состояния "Закрытие" к состоянию "Остановка", а действие tlf ("этот уровень завершается") может разъединить связь. Автомат ждет в состоянии "Стоп" или "Старт" следующую попытку связи.



Таймаут (ТО +, ТО-)



Это событие указывает истечение таймера рестарта. Таймер рестарта используется для отсчета времени ответа на пакеты "Запрос конфигурации" и "Запрос разъединения". Событие ТО+ указывает, что счетчик рестарта продолжает быть больше нуля, что вызывает повторную передачу пакетов "Запрос конфигурации" и "Запрос разъединения". Событие ТО- указывает, что счетчик рестарта не превышает нуль, и в повторной передаче пакетов необходимости нет.



Принят запрос конфигурации, удовлетворительный или неудовлетворительный (RCR+, RCR-)



Это событие происходит, когда от однорангового объекта получен пакет "Запрос конфигурации". Пакет "Запрос конфигурации" указывает на желание открыть связь и может определять опции конфигурации. Формат пакета "Запрос конфигурации" описан в п. 6.1.

Событие RCR+ показывает, что запрос конфигурации был приемлем, и вызывает передачу соответствующего подтверждения конфигурации. Событие RCR- показывает, что запрос конфигурации не является допустимым, и вызывает передачу соответствующего неподтверждения или сброса конфигурации. Эти события могут происходить на соединении, которое находится уже в состоянии "Открыто". Приложение должно быть готово немедленно заново согласовать опции конфигурации.



Принято подтверждение конфигурации (RCA)





Это событие происходит, когда от однорангового объекта получен корректный пакет "Подтверждение конфигурации". Пакет "Подтверждение конфигурации" - это положительный ответ на пакет "Запрос конфигурации". Пакеты вне последовательности или недействительные - сбрасываются без уведомления.

Так как корректный пакет уже был получен перед достижением состояний "Принято подтверждение" или "Открыто", то чрезвычайно маловероятно, что будет прибывать другой такой пакет. Как определено, все недействительные пакеты подтверждения, неподтверждения, сброса (Ack/Nak/Rej) - сбрасываются без уведомления и не влияют на переходы автомата.

Однако, не исключается, что правильно сформированный пакет будет прибывать через перекрестное соединение с совпадающим таймированием. Это, наиболее вероятно, может быть результатом ошибки приложения. По крайней мере, этот факт должен контролироваться.



Принято неподтверждение/сброс конфигурации (RCN)



Этот событие происходит, когда от однорангового объекта поступает корректный пакет "Неподтверждение конфигурации" или "Сброс конфигурации". Пакеты "Неподтверждение конфигурации" и "Сброс конфигурации" - это отрицательные ответы на пакет "Запрос конфигурации". Пакеты вне последовательности или недействительные сбрасываются без уведомления.

Хотя "Неподтверждение конфигурации" и "Сброс конфигурации" - вызывают одинаковые переходы в автомате, эти пакеты имеют различное влияние на опции конфигурации, посылаемые в результирующем пакете "Запрос конфигурации".



Принят запрос разъединения (RTR)



Это событие происходит, когда получен пакет "Запрос разъединения". Данный пакет указывает на желание однорангового объекта закрыть связь.

Событие "Принят запрос разъединения" не идентично событию "Закрытие" (см. выше) и не делает перенос команды "Открыть" локального администратора сети. Приложение должно быть подготовлено к получению нового запроса конфигурации без вмешательства администратора сети.





Принято подтверждение разъединения (RTA)



Это событие происходит, когда от однорангового объекта получен пакет "Подтверждение разъединения". Пакет "Подтверждение разъединения" обычно является ответом на пакет "Запрос разъединения". Пакет "Подтверждение разъединения" может также показать, что одноранговый объект находится в состоянии "Закрыто" или "Стоп", и служит для повторной синхронизации конфигурации канала.



Принят нераспознанный код (RUC)



Это событие происходит, когда от однорангового объекта получен не интерпретируемый пакет. В ответ посылается пакет "Сброс кода".



Принят сброс кода (разрешаемый или аварийный) или сброс протокола (RXJ +, RXJ-)



Это событие происходит, когда от однорангового объекта получен пакет "Сброс кода" или "Сброс протокола".

Событие RXJ+ наступает, когда отклоненная величина является приемлемой, например, сброс расширенного кода или сброс протокола NCP. Они находятся в пределах нормального действия. Приложение должно прекратить отправку нежелательных пакетов.

Событие RXJ- возникает, когда отклоненная величина является неприемлемой, например, сброс кода запроса конфигурации или сброс протокола LCP. Это приводит к невосстанавливаемой ошибке, которая разрывает связь.



Принят запрос эха, ответ эха или запрос сброса (RXR)



Это событие происходит, когда от однорангового объекта получен пакет "Запрос эха", "Ответ эха" или "Запрос сброса". Пакет "Ответ эха" - это ответ на пакет "Запрос эха". На пакет "Ответ эха" или "Запрос сброса" никакого ответа не предусмотрено.

5.4. Действия

Действия в автомате вызываются событиями и обычно показывают передачу пакетов и/или старта или остановки таймера рестарта. Действия, выполняемые в автомате, рассмотрены ниже.



Незаконное событие (-)



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



Никакой переход не происходит, и приложению не следует сбрасываться или останавливаться.



Этот уровень включается (tlu - This-Layer-Up)



Это действие указывает верхним уровням, что автомат входит в состояние "Открыто". Обычно, это действие используется протоколом LCP для сообщения о включении протоколу NCP, протоколу аутентификации (AP - Authentication Protocol) или протоколу качества связи (LQP - Link Quality Protocol) или может использоваться протоколом NCP, чтобы показать, что связь для трафика сетевого уровня доступна.



Этот уровень выключается (tld - This-Layer-Down)



Это действие указывает верхним уровням, что автомат выходит из состояния "Открыто". Обычно, это действие используется протоколом LCP для сигнализации о выключении протоколу NCP, протоколу аутентификации AP или протоколу качества связи LQP или может использоваться протоколом NCP, чтобы показать, что связь для трафика сетевого уровня более не доступна.



Этот уровень начинается (tls - This-Layer-Started)



Это действие показывает нижним уровням, что автомат входит в состояние "Старт", и для связи необходим нижний уровень. Нижнему уровню, если он доступен, следует ответить событием "Включение". Результаты этого действия в значительной степени зависят от приложения.



Этот уровень завершается (tlf - This-Layer-Finished)



Это действие показывает нижним уровням, что автомат входит в состояние "Начальное", "Закрыто" или "Стоп", а нижний уровень для связи больше не требуется. Нижнему уровню, когда он будет разъединен, следует ответить событием "Выключение".

Обычно, это действие может использовать LCP, чтобы перейти к стадии "Выключено" или может использоваться протоколом NCP для указания протоколу LCP, что связь может быть расторгнута, когда нет никакого другого открытого протокола NCP. Результаты этого действия в значительной степени зависят от приложения.



Счетчик перезапуска инициализируется (irc - Initialize-Restart-Count)





Это действие устанавливает счетчик перезапуска в соответствующее значение: максимум разъединения (МТ - Max-Terminate) или максимум конфигурации (МС - Max-Configure). Счетчик декрементируется с каждой передачей, включая первую.

Когда используется возврат таймера рестарта, в дополнение к установке счетчика рестарта, приложение должно устанавливать период таймаута в исходное значение.



Счетчик перезапуска обнуляется (zrc - Zero-Restart-Count)



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



Посылается запрос конфигурации (scr - Send-Configure-Request)



Пакет "Запрос конфигурации" передан. Это указывает на намерение открыть связь с установленным набором опций конфигурации. Для предотвращения потерь пакетов после передачи пакета "Запрос конфигурации" запускается таймер рестарта. Счетчик рестарта декрементируется всякий раз, когда посылается запрос конфигурации.



Посылается подтверждение конфигурации (sca - Send-Configure-Ack)



Пакет "Запрос конфигурации" передан. Это подтверждает прием пакета "Запрос конфигурации" с приемлемым набором опций конфигурации.



Посылается неподтверждение конфигурации (scn - Send-Configure-Nak)



Передаются пакеты "Неподтверждение конфигурации" или "Сброс конфигурации". Этот отрицательный ответ сообщает о приеме пакета "Запрос конфигурации" с недопустимым набором опций конфигурации.

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



Использование неподтверждения конфигурации вместо сброса конфигурации более полно описано в части, посвященной форматам пакетов протокола LCP.



Посылается запрос разъединения (str - Send-Terminate-Request)



Пакет "Запрос разъединения" передан. Это указывает на желание закрыть связь. Чтобы предотвратить потери пакетов, когда пакет "Запрос разъединения" передан, запускается таймер рестарта. Счетчик рестарта декрементируется всякий раз, когда посылается запрос разъединения.



Посылается подтверждение разъединения (sta - Send-Terminate-Ack)



Пакет "Подтверждение разъединения" передан. Это подтверждает прием пакета "Запрос разъединения" или служит для синхронизации автоматов.



Посылается сброс кода (scj - Send-Code-Reject)



Пакет "Сброс кода" передан. Это указывает на прием пакета неизвестного типа.



Посылается ответ эха (ser - Send-Echo-Reply)



Пакет "Ответ эха" передан. Это подтверждает прием пакета "Запрос эха".

5.5. Предотвращение зацикливания

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

5.6. Счетчики и таймеры



Таймер рестарта



Это - специальный таймер, используемый автоматом. Таймер рестарта используется для измерения времени передачи пакетов "Запрос конфигурации" и "Запрос разъединения". Истечение таймера рестарта вызывает событие "Время истекло" и повторную передачу соответствующего пакета "Запрос конфигурации" или "Запрос разъединения". Таймер рестарта должен конфигурироваться.



По умолчанию его следует устанавливать на 3 секунды.

Таймер рестарта следует конфигурировать в зависимости от скорости передачи данных по каналу связи. Величина по умолчанию предназначена для низких скоростей (от 2,4 до 9,6 кбит/с) и большого времени задержки при коммутации (обычные телефонные линии). Каналам с большими скоростями или каналам с низкой коммутационной задержкой следует иметь соответственно меньшую величину времени.

Вместо постоянной величины, таймер рестарта может начинаться с начальной небольшой величины при увеличении ее до сконфигурированной конечной величины. Начальная величина таймера должна быть достаточно большой, чтобы учесть размер пакетов, двойное время передачи туда и обратно со скоростью канала связи и по крайней мере еще 100 миллисекунд, чтобы позволить одноранговому объекту обработать пакеты перед ответом. Некоторые цепи добавляют еще 200 миллисекунд спутниковой задержки. Время передачи пакета туда и обратно для модемов, работающих в режиме 14,4 кбит/с, находятся в пределах от 160 до более, чем 600 миллисекунд.



Maксимальное число пакетов "Запрос разъединения" (МТ - Max-Terminate)



Имеется один счетчик рестарта для запросов разъединения. MТ показывает число пакетов "Запрос разъединения", посланных без получения подтверждения разъединения, перед принятием решения о том, что одноранговый объект не способен ответить. МТ должно быть конфигурируемо, но по умолчанию его следует делать равным двум.



Maксимальное число пакетов "Запрос конфигурации" (МС - Max-Configure)



Подобный счетчик рекомендуется для запросов конфигурации. MC показывает число пакетов "Запрос конфигурации", посланных без получения корректного подтверждения, неподтверждения или сброса конфигурации перед принятием решения о том, что одноранговый объект не способен ответить. MС должно быть конфигурируемо, но по умолчанию его следует устанавливать равным десяти.



Максимальное число пакетов "Неподтверждение конфигурации" (MF - Max-Failure)





Соответствующий счетчик рекомендован для неподтверждения конфигурации. MF указывает число пакетов "Неподтверждение конфигурации", посланных без передачи запроса конфигурации, перед принятием решения о том, что конфигурация не стыкуема. Любые дальнейшие пакеты "Неподтверждение конфигурации" для опций, запрашиваемых одноранговым объектом, преобразуются в пакеты "Сброс конфигурации", и какие-либо опции больше не присоединяются. MF должно быть конфигурируемо; по умолчанию его следует устанавливать равным пяти.

6. Форматы пакетов LCP

Имеются три класса пакетов LCP:

1) пакеты конфигурации связи, используемые для установления и конфигурирования канала связи ("Запрос конфигурации", "Подтверждение конфигурации", "Неподтверждение конфигурации" и "Сброс конфигурации").

2) пакеты разъединения связи, используемые для разрыва связи ("Запрос разъединения", "Подтверждение разъединения").

3) пакеты обслуживания связи, используемые для управления и отладки звена связи ("Сброс кода", "Сброс протокола", "Запрос эха", "Ответ эха" и "Запрос сброса").

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

Независимо от того, какие опции конфигурации разрешаются, все пакеты конфигурации звена LCP, разъединения связи и сброса кода (кодирование от 1 до 7) посылаются всегда, как будто никакие опции конфигурации не были установлены. В частности, каждая опция конфигурации имеет значение по умолчанию. Это гарантирует постоянную распознаваемость пакетов LCP.

В информационном поле PPP инкапсулируется только один пакет LCP, где поле протокола PPP показывает тип c021 (протокол контроля звена LCP).

Общий формат пакетов протокола LCP показан ниже.



Поля передаются слева направо.

0 1 2 3  
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
Код Идентификатор Длина Данные ...


Поле "Код"



Поле "Код" - один октет, задает вид пакета LCP. Когда пакет получен с неопределенным полем "Код", передается пакет "Сброс кода".

Значения поля "Код" протокола LCP определяются в наиболее позднем издании "Assigned Numbers" RFC [3]. В настоящее время этот документ определяет следующие величины:

1 Запрос конфигурации

2 Подтверждение конфигурации

3 Неподтверждение конфигурации

4 Сброс конфигурации

5 Запрос разъединения

6 Подтверждение разъединения

7 Сброс кода

8 Сброс протокола

9 Запрос эха

10 Ответ эха

11 Запрос сброса



Поле "Идентификатор"



Поле "Идентификатор" содержит один октет и обеспечивает соответствие запросов ответам. Когда пакет получен с недействительным полем "Идентификатор", он сбрасывается без воздействия на автомат.



Поле "Длина"



Поле "Длина" (два октета) указывает длину пакетов LCP, включая поля "Код", "Идентификатор", "Длина" и "Данные". Длина не должна превышать величину MRU для звена передачи данных.

Октеты вне диапазона поля "Длина" рассматриваются как дополнение и игнорируются при приеме. Когда пакет получен с недействительным значением поля "Длина", пакет сбрасывается без воздействия на автомат.



Поле "Данные"



Поле "Данные" содержит нуль или более октетов, как показано в поле "Длина". Формат поля "Данные" определяется полем "Код".

Особенности форматов различных типов пакетов протокола LCP более подробно рассмотрены ниже.

6.1. Формат пакетов LCP "Запрос конфигурации"



Общее описание



Приложение, желая открыть связь, должно передать пакет "Запрос конфигурации" (Configure-Request). Поле "Опции" заполняется любыми желательными изменениями величин, установленных по умолчанию.



Опции конфигурации не должны включать величины по умолчанию.

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

0 1 2 3  
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
Код Идентификатор Длина Опции ...


Поле "Код"



Для запроса конфигурации принимает значение, равное 1.



Поле "Идентификатор"



Поле "Идентификатор" должно быть изменено всякий раз, когда изменяется содержание поля "Опции", и всякий раз, когда для предыдущего запроса был получен корректный ответ. Для повторных передач поле "Идентификатор" может оставаться неизменным.



Поле "Опции"



Поле "Опции" имеет переменную длину и содержит нуль или более опций конфигурации, которые отправитель желает установить. Все опции конфигурации всегда устанавливаются одновременно. Формат опций конфигурации описан ниже.

6.2. Формат пакетов LCP "Подтверждение конфигурации"



Общее описание



Если каждая опция конфигурации, полученная при запросе конфигурации, распознана, и все значения приемлемы, тогда приложение должно передать пакет "Подтверждение конфигурации" (Configure-Ack). Подтвержденные опции конфигурации нельзя повторно заказывать или изменять любым способом.

При приеме подтверждения конфигурации поле "Идентификатор" должно соответствовать последнему переданному запросу конфигурации. Кроме того, опции конфигурации в подтверждении конфигурации должны точно соответствовать последнему переданному запросу конфигурации. Недействительные пакеты сбрасываются без уведомления. Формат пакетов "Подтверждение конфигурации" показан ниже. Поля передаются слева направо.

0 1 2 3  
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
Код Идентификатор Длина Опции ...


Поле "Код"



Для подтверждения конфигурации принимает значение, равное 2.





Поле "Идентификатор"



Поле "Идентификатор" - это копия поля "Идентификатор" пакета "Запрос конфигурации", который вызвал это подтверждение конфигурации.



Поле "Опции"



Поле "Опции" имеет переменную длину и содержит нуль или более опций конфигурации, которые отправитель подтверждает. Все опции конфигурации всегда подтверждаются одновременно.

6.3. Формат пакетов LCP "Неподтверждение конфигурации"



Общее описание



Если каждая из опций конфигурации распознаваема, но некоторые значения не приемлемы, то приложение должно передать пакет "Неподтверждение конфигурации" (Configure-Nak). При этом поле "Опции" заполняется единственным недопустимым значением опции конфигурации из запроса конфигурации. Для опций, которые не имеют численных значений (логические опции), вместо этого ответа должен использоваться "Сброс конфигурации".

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

Когда для какой-то опции конфигурации существует несколько значений, приемлемых для отправителя неподтверждения конфигурации, все они должны быть включены в список значений для этой опции. Наконец, приложение может быть сконфигурировано так, чтобы согласовывать определенные опции конфигурации. Если какая-либо опция не была внесена в список, тогда она может быть добавлена в конец списка неподтвержденных опций конфигурации, чтобы побудить одноранговый объект включить эту опцию в свой следующий пакет "Запрос конфигурации". Любые значащие поля для этой опции должны указывать величины, приемлемые для отправителя конфигурации.

При приеме неподтверждения конфигурации поле "Идентификатор" должно соответствовать последнему переданному запросу конфигурации. Недействительные пакеты сбрасываются без уведомления.



Прием корректного пакета неподтверждения конфигурации указывает, что при формировании нового запроса конфигурации опции конфигурации могут быть заданы так, как определено в неподтверждении конфигурации. Когда представлено несколько вариантов опций конфигурации, одноранговый объект должен выбрать единственное значение, чтобы включить в следующий пакет "Запрос конфигурации".

Некоторые опции конфигурации имеют переменную длину. Так как неподтвержденные опции модифицируются одноранговым объектом, приложение должно быть способно воспринимать длину опций, которая зависит от исходного запроса конфигурации.

Формат пакетов "Неподтверждение конфигурации" показан ниже. Поля передаются слева направо.

0 1 2 3  
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
Код Идентификатор Длина Опции ...


Поле "Код"



Для неподтверждения конфигурации принимает значение, равное 3.



Поле "Идентификатор"



Поле "Идентификатор" - это копия поля "Идентификатор" запроса конфигурации, который вызвал это неподтверждение конфигурации.



Поле "Опции"



Поле "Опции" имеет переменную длину и содержит нуль или более опций конфигурации, которые отправитель не подтверждает. Все опции конфигурации всегда не подтверждаются одновременно.

6.4. Формат пакетов LCP "Сброс конфигурации"



Общее описание



Если некоторые опции конфигурации, полученные в запросе конфигурации, не распознаваемы или не приемлемы, то приложение должно передать пакет "Сброс конфигурации" (Configure-Reject). Поле "Опции" пакета при этом содержит значение единственной недопустимой опции конфигурации из запроса конфигурации. Все распознанные и приемлемые опции конфигурации не изменяются при сбросе конфигурации, но, с другой стороны, опции конфигурации нельзя повторно заказывать или изменять.

При приеме сброса конфигурации поле "Идентификатор" должно соответствовать последнему переданному запросу конфигурации.



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

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

Формат пакетов "Сброс конфигурации" показан ниже. Поля передаются слева направо.

0 1 2 3  
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
Код Идентификатор Длина Опции ...


Поле "Код"



Для сброса конфигурации принимает значение, равное 4.



Поле "Идентификатор"



Поле "Идентификатор" - это копия поля "Идентификатор" запроса конфигурации, который вызвал этот сброс конфигурации.



Поле "Опции"



Поле "Опции" имеет переменную длину и содержит нуль или более опций конфигурации, которые отправитель сбрасывает. Все опции конфигурации всегда сбрасываются одновременно.

6.5. Формат пакетов LCP "Запрос разъединения" и "Подтверждение разъединения"



Общее описание



Для обеспечения механизма закрытия связи протокол LCP использует пакеты "Запрос разъединения" (Terminate-Request) и "Подтверждение разъединения" (Terminate-Ack).

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

После приема запроса разъединения, должно быть передано подтверждение разъединения. Прием нетребуемого подтверждения разъединения показывает, что одноранговый объект находится в состоянии "Закрыто" или "Стоп", или указывает на необходимость новых транзакций.



Формат пакетов "Запрос разъединения" и " Подтверждение разъединения" показан ниже. Поля передаются слева направо.

0 1 2 3  
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
Код Идентификатор Длина Данные...


Поле "Код"



Для запроса разъединения принимает значение, равное 5. Для подтверждения разъединения принимает значение, равное 6.



Поле "Идентификатор"



Поле "Идентификатор" при передаче должно изменяться всякий раз, когда изменяется содержание поля "Данные" и когда для предыдущего запроса получен корректный ответ. Для повторных передач идентификатор может оставаться неизменным.

При приеме поле "Идентификатор" пакета "Запрос разъединения" копируется в поле "Идентификатор" пакета "Подтверждение разъединения".



Поле "Данные"



Поле "Данные" содержит нуль или более октетов и включает неинтерпретируемые протоколом PPP данные для использования отправителем. Данные могут состоять из любой двоичной последовательности. Конец области определяется полем "Длина".

6.6. Формат пакетов LCP "Сброс кода"



Общее описание



Прием пакета протокола LCP с неизвестным кодом указывает, что одноранговый объект работает с другой версией. Об этом должно быть сообщено отправителю неизвестного кода путем передачи пакета "Сброса кода" (Code-Reject).

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

Формат пакетов "Сброс кода" показан ниже. Поля передаются слева направо.

0 1 2 3  
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
Код Идентификатор Длина Сброшенный пакет...


Поле "Код"



Для сброса кода принимает значение, равное 7.



Поле "Идентификатор"



Поле "Идентификатор" должно изменяться для каждого посланного сброса кода.





Поле "Сброшенный пакет"



Поле " Сброшенный пакет" содержит копию пакета LCP, которая отклонена. Оно начинается с информационного поля и не включает никакие заголовки уровня звена передачи данных (ЗПД) и контрольную сумму (FCS). Для согласования c величиной MRU, установленной одноранговым объектом, поле "Сброшенный пакет" может сегментироваться.

6.7. Формат пакетов LCP "Сброс протокола"



Общее описание



Прием пакета PPP с неизвестным полем протокола указывает, что одноранговый объект пытается использовать протокол, который не поддерживается. Это обычно происходит, когда одноранговый объект пытается сконфигурировать новый протокол. Если автомат LCP находится в состоянии "Открыто", то об этом должно быть сообщено одноранговому объекту путем передачи пакета "Сброс протокола" (Protocol-Reject).

При приеме сброса протокола, приложение должно прекратить посылать пакеты обозначенного протокола. Пакеты "Сброс протокола" могут быть посланы только в состоянии LCP "Открыто". Данные пакеты, полученные в любом другом состоянии LCP, следует сбрасывать без уведомления. Формат пакетов "Сброс протокола " показан ниже. Поля передаются слева направо.

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Код Идентификатор Длина
Сброшенный протокол Сброшенная информация...


Поле "Код"



Для сброса протокола принимает значение, равное 8.



Поле "Идентификатор"



Поле "Идентификатор" должно изменяться для каждого посланного сброса протокола.



Поле "Сброшенный протокол"



Поле "Сброшенный протокол" включает два октета и содержит поле протокола PPP пакета, который был сброшен.



Поле "Сброшенная информация"



Поле "Сброшенная информация" содержит копию пакета, который сброшен. Оно начинается с информационного поля и не включает заголовки уровня ЗПД и контрольную сумму (FCS). Поле "Сброшенная информация" должно сегментироваться, чтобы согласовываться c величиной MRU, установленной одноранговым объектом.



6.8. Формат пакетов LCP "Запрос эха" и "Ответ эха"



Общее описание



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

При приеме запроса эха в состояние LCP "Открыто", должен быть передан ответ эха. Пакеты "Запрос эха" (Echo-Request) и "Ответ эха" (Echo-Reply) должны посылаться только, когда LCP находится в состоянии "Открыто". Пакеты "Запрос эха" и "Ответ эха", полученные в любом другом состоянии, следует сбрасывать без уведомления. Формат пакетов "Запрос эха" и "Ответ эха" показан ниже. Поля передаются слева направо.

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Код Идентификатор Длина
Номер Данные...


Поле "Код"



Для запроса эха принимает значение, равное 9. Для ответа эха принимает значение, равное 10.



Поле "Идентификатор"



При передаче поле "Идентификатор" должно изменяться всякий раз, когда изменяется содержание поля "Данные", и когда для предыдущего запроса был получен корректный ответ. Для повторных передач идентификатор может оставаться неизменным. При приеме поле "Идентификатор" пакета "Запрос эха" копируется в поле "Идентификатор" пакета "Ответ эха".



Magic-номер



Поле magic-номера содержит четыре октета и помогает в обнаружении каналов, которые находятся в состоянии зацикливания. До согласования опций конфигурации magic-номера, он должен иметь нулевое значение. Для более подробного объяснения см. опции конфигурации magic-номера.



Поле "Данные"



Поле "Данные" содержит нуль или более октетов и включает неинтерпретируемые данные для использования отправителем. Данные могут состоять из любой двоичной последовательности.



Конец области определяется полем "Длина".

6.9. Формат пакетов LCP "Запрос сброса"



Общее описание



Для обеспечения механизма сброса уровня ЗПД при контроле канала в направлении от местной к отдаленной стороне в протоколе LCP предусмотрен код запроса сброса. Это полезно при отладке, тестировании работоспособности и для многих других функций.

Пакеты "Запрос сброса" (Discard-Request) должны посылаться только, когда LCP находится в состоянии "Открыто". При приеме любой пакет "Запрос сброса" должен сбрасываться без уведомления. Формат пакетов "Запрос сброса" показан ниже. Поля передаются слева направо.

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Код Идентификатор Длина
Номер Данные...


Поле "Код"



Для запроса сброса принимает значение, равное 11.



Поле "Идентификатор"



Поле "Идентификатор" должно изменяться для каждого посланного запроса сброса.



Magic-номер



Поле magic-номера содержит четыре октета и помогает в обнаружении каналов, которые находятся в состоянии зацикливания. Пока опции конфигурации magic-номера не были согласованы, magic-номер должен иметь нулевое значение (см. опции конфигурации magic-номера).



Поле "Данные"



Поле "Данные" включает нуль или более октетов и содержит не интерпретируемые протоколом данные для использования отправителем. Данные могут состоять из любой двоичной последовательности. Конец области определяется полем "Длина".

7. Опции конфигурации протокола LCP

Опции конфигурации протокола LCP позволяют модифицировать величины, установленные по умолчанию, для связи "точка-точка". Если опции конфигурации не включены в пакет "Запрос конфигурации", то для данной опции конфигурации используется значение, принятое по умолчанию.

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



Конец списка опций конфигурации определяется полем "Длина" пакетов LCP.

Если не определено иначе, то все опции конфигурации применяются в полудуплексном режиме; обычно, в приемном направлении связи с точки зрения отправителя запроса конфигурации.



Общие понятия



Опции указывают дополнительные возможности или требования приложения, которое требует опции. Приложению, которое не воспринимает какую-либо опцию, следует взаимодействовать с тем, которое поддерживает все опции.

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

0 1  
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
Тип Длина Данные...


Поле "Тип"



Поле "Тип" содержит один октет и указывает тип опций конфигурации. В настоящее время значения поля "Тип" протокола LCP определены в последнем издании "Assigned Numbers" RFC [3]. Возможны следующие значения:

0 Резерв
1 Максимальный размер принимаемого блока (MRU - Maximum-Receive-Unit)
3 Протокол аутентификации (Authentication-Protocol)
4 Протокол качества (Quality-Protocol)
5 Magic-номер
7 Сжатие полей протокола (Protocol-Field-Compression)
8 Сжатие адресных и управляющих полей (Address-and-Control-Field-Compression)


Поле "Длина"



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



Поле "Данные"



Поле "Данные" содержит нуль или более октетов и включает информацию, относящуюся к опции конфигурации.



Формат и длина поля "Данные" определяются полями "Длина" и "Тип". Когда поле "Данные" определено длиной так, что оно простирается до конца информационного поля и далее, весь пакет сбрасывается без воздействия на автомат.

7.1. Максимальный размер принимаемого блока



Общее описание



Эту опцию конфигурации можно посылать, чтобы сообщить одноранговому объекту, что приложение может получить пакеты больших размеров, или запрашивать, чтобы одноранговый объект посылал меньшие пакеты. Максимальный размер принимаемого блока (MRU - Maximum-Receive-Unit) по умолчанию составляет 1500 октетов. Если требуются пакеты меньших размеров, приложение тем не менее должно быть способно получать полное 1500-октетное информационное поле.

Эта опция используется для указания возможности приложения. Одноранговому объекту максимизировать свои возможности не требуется. Например, когда указано, что MRU составляет 2048 октетов, одноранговому объекту не требуется посылать пакет с 2048 октетами. Одноранговый объект не требует неподтверждения конфигурации, чтобы указать, что он будет посылать только пакеты с меньшими размерами, так как приложение всегда будет требовать обеспечения по крайней мере 1500-октетных размеров.

Формат опции конфигурации MRU показан ниже. Поля передаются слева направо.

0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
Тип Длина MRU


Поле "Тип"



Имеет значение, равное 1



Поле "Длина"



Принимает значение, равное 4



Поле "MRU"



Поле "MRU" содержит два октета и определяет максимальное число октетов в информационном поле и поле заполнения. Сюда не включаются заголовок кадра, поле протокола, контрольная сумма (FCS), биты или байты прозрачности.

7.2. Протокол аутентификации



Общее описание



Для некоторых каналов может потребоваться, чтобы одноранговый объект подтвердил свою подлинность перед разрешением обмениваться пакетами протокола сетевого уровня.



Эта опция конфигурации обеспечивает способ согласования типа протокола установления подлинности. По умолчанию, установление подлинности не требуется.

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

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

Нет никаких требований того, чтобы аутентификация была полнодуплексной или чтобы один и тот же протокол использовался в обоих направлениях. Допускается использование различных протоколов в разных направлениях.

Формат опции конфигурации протокола аутентификации показан ниже. Поля передаются слева направо.

0 1 2 3  
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
Тип Длина Протокол аутентификации Данные...


Поле "Тип"



Принимает значение, равное 3.



Поле "Длина"



Не менее 4 октетов.



Поле "Протокол аутентификации"



Поле "Протокол аутентификации" включает два октета и указывает желательный протокол аутентификации. Величины этого поля - всегда те же самые, что и в поле протокола PPP для того же самого протокола аутентификации.

В настоящее время значения поля "Протокол аутентификации" определены в последнем издании "Assigned Numbers" RFC [3]. Текущие значения определены следующим образом:

Величина в 16-ричном виде Протокол
C023 - Протокол установления подлинности пароля PAP (Password Authentication Protocol);
C223 - Протокол аутентификации запроса диалога CHAP (Challenge Handshake Authentication Protocol).
<



/p>



Поле "Данные"



Поле "Данные" содержит нуль или более октетов и включает дополнительные данные, как определено соответствующим протоколом.

7.3. Протокол качества



Общее описание



На некоторых линиях связи требуется определять, когда и как часто канал теряет данные. Этот процесс называется контролем качества канала связи. Существует опция конфигурации, которая обеспечивает согласование типа протокола качества (QP - Quality-Protocol) канала связи. По умолчанию контроль качества связи не осуществляется.

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

Нет никаких требований того, чтобы контроль качества быть полнодуплексным или чтобы один и тот же протокол использоваться в обоих направлениях. Допускается использование различных протоколов в разных направлениях.

Формат опции конфигурации протокола качества показан ниже. Поля передаются слева направо.

0 1 2 3  
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1  
Тип Длина Протокол качества Данные...


Поле "Тип"



Имеет значение, равное 4.



Поле "Длина"



Не менее 4 октетов.



Поле "Протокол качества "



Поле "Протокол качества" содержит два октета и указывает желательный протокол, контролирующий качество связи. Значения этого поля - всегда те же, что и в поле протокола PPP для того тот же самого протокола контроля.

В настоящее время значения поля "Протокол качества" определены в последнем издании "Assigned Numbers" RFC [3]. Текущие значения определены следующим образом:

Величина в 16-ричном виде Протокол
C025 Сообщение качества канала связи LQR (Link Quality Report)
<



/p>



Поле "Данные"



Поле "Данные" включает нуль или более октетов и содержит дополнительные данные, как определено соответствующим специальным протоколом.

7.4. Magic-номер



Общее описание



Эта опция конфигурации обеспечивает метод обнаружения зацикленных звеньев и других аномалий уровня ЗПД. Она может требоваться некоторым другим опциям конфигурации, таким как опции конфигурации протокола качества. По умолчанию magic-номер не согласуется, и там, где он мог бы использоваться, вставляется нуль.

Прежде, чем эта опция конфигурации потребуется, приложение должно выбрать свой magic-номер. Рекомендуется, чтобы magic-номер был выбран случайным образом, чтобы обеспечить с очень высокой вероятностью его уникальность.

Уникальные случайные числа могут получаться из серийных номеров машин, других адресов аппаратных средств сети, времени дня и т.д. Особенно хороши такие случайные значения, как точные измерения времени между физическими событиями типа приема пакетов на других связанных сетях, времени ответа сервера или скорости ввода символов пользователя-человека. Желательно, чтобы одновременно использовалось столько источников, сколько возможно.

Когда запрос конфигурации с опцией конфигурации magic-номера получен, данный magic-номер сравнивается с magic-номером последнего запроса конфигурации, посланного одноранговому объекту.

Если два magic-номера различны, то связь не является зацикленной, и magic-номер следует подтвердить. Если два magic-номера равны, тогда возможно, но не обязательно достоверно, что связь зациклилась и что этот запрос конфигурации фактически тот, что был послан в последний раз. Чтобы в этом убедиться, нужно послать неподтверждение конфигурации, определяя другое значение magic-номера. Не следует посылать одноранговому объекту новый запрос конфигурации, пока ситуация не нормализуется (до тех пор, пока не будет получено неподтверждение конфигурации или таймер рестарта не обнулится).

Прием неподтверждения конфигурации с magic-номером, отличным от того, что был в последнем неподтверждении конфигурации, посланном одноранговому объекту, доказывает, что связь не является зацикленной, и указывает уникальный magic-номер.



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

Если звено действительно зациклено, эта последовательность (передача запроса конфигурации, получение запроса конфигурации, передача неподтверждения конфигурации, получение неподтверждения конфигурации) будет повторяться много раз. Если связь не зациклена, эта последовательность может происходить несколько раз, но вероятность этого чрезвычайно мала. Более вероятно, что magic-номера, выбранные в любом одноранговом объекте, будут быстро различаться, завершая эту цепочку. Следующая таблица показывает вероятности повторений при предположении, что оба окончания канала связи выбирают magic-номера с совершенно одинаковым распределением:

Число повторений Вероятность
1 1/2**32= 2.3 E-10
2 1/2**32**2 = 5.4 E-20
3 1/2**32**3 = 1.3 E-29
Для обеспечения данного расхождения требуются хорошие источники уникальных и случайных чисел. Если такой источник уникальности не может быть найден, рекомендуется, чтобы эта опция конфигурации не допускалась; запросы конфигурации с опциями не следует передавать, а любые опции конфигурации magic-номеров, которые посылает одноранговый объект, должны быть либо подтверждены, либо сброшены. В этом случае зацикленные звенья не могут надежно обнаруживаться приложением, хотя они могут все еще быть обнаружены одноранговым объектом.

Если приложение передает запрос конфигурации с опцией конфигурации magic-номера, то оно не должно отвечать сбросом конфигурации при получении запроса конфигурации с опцией конфигурации magic-номера. То есть, если приложение желает использовать magic-номера, тогда оно должно позволять то же одноранговому объекту. Если приложение получает сброс конфигурации в ответ на запрос конфигурации, то это может означать, что связь не зациклена и что одноранговый объект не будет использовать magic-номера.



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

Magic-номер может использоваться, чтобы обнаружить зацикленные звенья во время нормальной работы, а также в течение согласования опций конфигурации. Пакеты протокола LCP "Запрос эха", "Ответ эха" и "Запрос сброса" имеют поле "Мagic-номер". Если magic-номер был успешно согласован, то приложение должно передать эти пакеты с полем magic-номера, имеющим значение согласованного magic-номера.

Поле magic-номера этих пакетов следует рассматривать при приеме. Все полученные поля magic-номера должны быть равны нулю или уникальному magic-номеру однорангового объекта в зависимости от того, согласовал или нет одноранговый объект magic-номер.

Прием поля magic-номера, равного согласованному местному magic-номеру, указывает на зацикливание звена. Прием magic-номера, отличного от согласованного местного magic-номера, согласованного magic-номера однорангового объекта или нуля, если одноранговый объект не согласовал его, указывает на то, что связь была сконфигурирована для коммуникаций с другим одноранговым объектом.

Процедуры для восстановления от любого события - не определены и могут изменяться от приложения к приложению. Должно быть принято событие LCP "Выключение", следующее событие - "Открытие" - начнет процесс повторного установления связи, который не может завершиться пока не будет устранено зацикливание и согласован magic-номер. Другой путь в случае зацикливания звена - должны начать передаваться пакеты LCP "Запрос эха", пока соответствующий ответ эха не будет получен, указывая на прекращение зацикливания.

Формат опции конфигурации magic-номера показан ниже. Поля передаются слева направо.

0 1 2 3 4
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 12 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8
Тип Длина Мagic-номер


Поле "Тип"



5



Поле "Длина"





6 октетов.



Поле "Magic-номер "



Поле "Мagic-номер" содержит четыре октета и указывает номер, который является с большой вероятностью уникальным для одного окончания канала связи. Мagic-номер, равный нулю, не используется, должен не подтверждаться или сбрасываться.

7.5. Сжатие поля протокола



Общее описание



Эта опция конфигурации обеспечивает метод согласования сжатия полей протокола PPP (PFC - Protocol-Field-Compression). По умолчанию все приложения должны передать пакеты с двухоктетными полями протокола PPP.

Номера полей протокола PPP выбраны, так что некоторые их значения могут быть сжаты в один октет. Чтобы сообщить одноранговому объекту, что приложение может получить такие однооктетные поля протокола PPP, посылается специальная опция конфигурации.

Поле протокола использует механизм расширения, соответствующий механизму расширения ISO 3309 для полей адреса; наименее значащий бит (LSB - Least Significant Bit) каждого октета используется для указания на расширение поля протокола. Двоичный "0" в качестве LSB указывает, что поле протокола будет продолжаться в следующем октете. Присутствие двоичной единицы в качестве LSB свидетельствует о том, что этот октет поля протокола - последний.

Заметим, что к полю может быть присоединено любое число нулевых октетов, и двоичное значение будет тем же самым (например, вот два двоичных представления числа 3: 00000011 и 00000000 00000011).

При использовании узкополосных каналов желательно экономить пропускную способность, посылая как можно меньше избыточных данных. Опции конфигурации сжатия поля протокола являются компромиссом между требованиями простоты приложения и эффективностью использования пропускной способности. При успешном согласовании для сжатия поля протокола до одного октета может использоваться механизм расширения ISO 3309. Большую часть пакетов можно сжимать, т.к. протоколы данных обычно назначаются со значением поля протокола, меньшим, чем 256.

Сжатые поля протокола не должны передаваться, если эта опция конфигурации не была согласована.



После согласования, приложение должно принимать пакеты PPP с однооктетными или двухоктетными полями протокола, и не должно делать различия между ними.

Поле протокола никогда не сжимается при посылке любого пакета LCP. Это правило гарантирует однозначное распознавание пакетов LCP. Когда поле протокола сжато, поле FCS уровня ЗПД рассчитывается не по исходному, а по сжатому кадру.

Формат опции конфигурации сжатия полей протокола показан ниже. Поля передаются слева направо.

0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
Тип Длина


Поле "Тип"



7



Поле "Длина"



2 октета.

7.6. Сжатие полей адреса и контроля



Общее описание



Эта опция конфигурации обеспечивает метод согласования сжатия полей адреса и контроля (ACFC - Address-and-Control-Field-Compression) ЗПД. По умолчанию все приложения должны передавать кадры с полями адреса и контроля в соответствии с правилами созданием кадров ЗПД.

Так как эти поля обычно имеют постоянные значения для каналов точка-точка (point-to-point), их легко сжимать. Эта опция конфигурации посылается для информирования однорангового объекта о том, что приложение может получить сжатые поля адреса и контроля. Если получен сжатый кадр, а сжатие полей адреса и контроля не было согласовано, то приложение может сбросить кадр без уведомления.

Поля адреса и контроля не должны быть сжаты при посылке любого пакета LCP. Это правило гарантирует однозначное распознавание пакетов LCP. Когда поля адреса и контроля сжаты, поле FCS уровня ЗПД рассчитывается не по исходному, а по сжатому кадру.

Формат опции конфигурации сжатия полей адреса и контроля показан ниже. Поля передаются слева направо.

0 1
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
Тип Длина


Поле "Тип"



8



Поле "Длина"



2 октета.

Список литературы

1. Simpson W., "The Point-to-Point Protocol (PPP)", Network Working Group, Request for Сomments 1661, STD: 51, July 1994.

2. Perkins, D., "Requirements for an Internet Standard Point-to-Point Protocol", RFC 1547, Carnegie Mellon University, December 1993.



3. Reynolds, J., and Postel, J., "Assigned Numbers", STD 2, RFC 1340, USC/ Information Sciences Institute, July 1992.

Список используемых сокращений и терминов

ACFC (Address-and-Control-Field-Compression) - сжатие полей адреса и контроля;

AP (Authentication Protocol) - протокол аутентификации;

DCE (Data Communications Equipment) - аппаратура канала данных; устройства, обеспечивающие организацию и разрыв соединений, а также управление ими для передачи данных. Примером такого устройства является модем;

DTE (Data Terminal Equipment) - оконечное оборудование данных (ООД), оборудование пользователя, подключаемое к сети. Это может быть как просто терминал, так и большая ЭВМ. DTE и DCE могут объединяться в одном устройстве, как, например, в случае персонального компьютера с внутренним модемом;

FCS (frame check sequence) - проверочная последовательность кадра;

HDLC (High-level Data Link Control) - процедура управления каналом передачи данных высокого уровня);

IANA (Internet Assigned Numbers Authority) - отдел назначения номеров Internet;

ISO (International Standards Organization) - Международная организация по стандартизации;

LCP (Link Control Protocol) - протокол контроля канала;

LQP (Link Quality Protocol) - протокол качества связи;

LSB (Least Significant Bit) - наименее значащий бит;

MRU (Maximum Receive Unit) - максимальный размер блока;

NCP (Network Control Protocol) - протокол контроля сети;

PFC (Protocol-Field-Compression) - сжатие поля протокола;

PPP (Point-to-Point Protocol) - протокол канала связи с непосредственным соединением;

ГВМ (главная вычислительная машина, хост, host, host computer) - ЭВМ, используемая в сети для выполнения функций, которые характерны для процессоров передачи данных с промежуточным хранением и связных коммутаторов, и ряда дополнительных функций. Многие сети имеют иерархическую структуру, при этом подсеть связи реализует службы коммутации пакетов, а в компетенцию ГВМ входит обеспечение режима разделения времени, дистанционный ввод заданий и т.д. ГВМ одного из уровней иерархии может служить для коммутации пакетов или сообщений на другом уровне. Иногда ГВМ разделяются на два класса: обслуживающие машины, обеспечивающие некоторые ресурсы, и машины-потребители, использующие эти ресурсы. В качестве ГВМ могут служить самые разнообразные машины - от маломощных мини-ЭВМ до больших универсальных ЭВМ, работающих в пакетном режиме или режиме разделения времени;

Дейтаграмма - блок передаваемых данных на сетевом уровне (таком, как IP). Дейтаграмма может быть инкапсулирована в один или более пакетов, передаваемых на уровне звена передачи данных (ЗПД);

ЗПД - звено передачи данных (второй уровень Эталонной модели взаимодействия открытых систем);

Кадр - блок передаваемых данных на уровне ЗПД. Наряду с некотором числом единиц данных кадр может включать заголовок и/или хвостовик;

ЛВС - локальная вычислительная сеть;

МСЭ-Т - Сектор стандартизации электросвязи Международного союза электросвязи;

Одноранговый объект - другое окончание канала связи типа "точка-точка";

Пакет - основной блок инкапсуляции, прошедший через интерфейс между сетевым уровнем и уровнем звена передачи данных. Обычно пакет соответствует кадру; исключения - когда на уровне ЗПД выполняется фрагментация или когда в один кадр включено множество пакетов;

Сброс без уведомления - сброс приложением какого-либо пакета без дальнейшей обработки. Приложению следует обеспечить способность отработки ошибки с учетом содержания сброшенного без уведомления пакета и следует зарегистрировать этот случай в статистическом отчете.

<


Концепция удаленного вызова процедур


Идея вызова удаленных процедур (Remote Procedure Call - RPC) состоит в расширении хорошо известного и понятного механизма передачи управления и данных внутри программы, выполняющейся на одной машине, на передачу управления и данных через сеть. Средства удаленного вызова процедур предназначены для облегчения организации распределенных вычислений. Наибольшая эффективность использования RPC достигается в тех приложениях, в которых существует интерактивная связь между удаленными компонентами с небольшим временем ответов и относительно малым количеством передаваемых данных. Такие приложения называются RPC-ориентированными.

Характерными чертами вызова локальных процедур являются:

Асимметричность, то есть одна из взаимодействующих сторон является инициатором;
Синхронность, то есть выполнение вызывающей процедуры при останавливается с момента выдачи запроса и возобновляется только после возврата из вызываемой процедуры.

Существует несколько реализаций процедур удаленного вызова процедур в различных операционных системах.

В операционной системе UNIX используется процедура под одноименным названием (Remote Procedure Call - RPC). Данная процедура внедрена в ядро системы. Ее выполнение обеспечивается протоколом RPC.

В операционных системах Windows удаленный вызов процедур начал развиваться на базе механизмов OLE, которые постепенно развились в технологию DCOM   (Distributed Component Object Model). Данная технология позволяет создавать достаточно мощные распределенные сетевые вычислительные среды. В технологии используются фирменные протоколы Microsoft.

Для обеспечения межплатформенного   взаимодействия разработана и широко внедряется спецификация CORBA.