Протокол РРР
Фаза установки соединения
После того как модемное соединение по протоколу HDLC между двумя сторонами установлено, устройство, инициировавшее соединение, пытается начать переговоры о параметрах, необходимых для передачи данных через это соединение. Подобно TCP-соединению, для определения состояния соединения между устройствами используется несколько параметров. Для выполнения этой задачи используется протокол управления соединением (Link Control Protocol — LCP). Все эти параметры показаны на рис. 8.3 и подробно описаны в последующих разделах.
Протокол LCP
Протокол LCP состоит из форматированных пакетов, которые позволяют двум сторонам обмениваться информацией для определения параметров соединения. На рис. 8.4 представлен формат пакета LCP.
Поле Код пакета LCP имеет длину в один байт и используется для идентификации типа пакета. Пакеты LCP используются в основном для переговоров о параметрах соединения, но с их помощью можно изменять текущее состояние соединения (например, прекратить соединение о чем мы будем говорить позже). В RFC 1661 определено 11 типов пакетов LCP, которые представлены в табл. 8.2.
Поле Идентификатор имеет длину в один октет и используется для уникальной идентификации пакета LCP. Таким образом, передатчик может однозначно определить, на какой именно запрос он посылает ответ.
Поле Длина имеет длину в два октета. В нем указывается общая длина пакета LCP (включая поля Код, Идентификатор, Длина и поле Данные ). Общая длина пакета LCP не должна превышать максимальный принимаемый блок соединения (maximum recieve unit — MRU).
В поле Данные может быть столько октетов, сколько определено полем Длина. В нем содержатся данные согласно полю Код.
Назначение пакета LCP также определяется полем Код. Как видно из табл. 8.2, существуют различные типы пакетов LCP. Ниже детально описаны некоторые типы пакетов LCP.
Пакет LCP типа Configure-Request
Пакет LCP типа Configure-Request используется для установления РРР-соединения между двумя устройствами. Параметры конфигурации, которые клиент хочет согласовать с удаленным хостом, находятся в поле данных пакета. Все параметры, для которых клиент запрашивает значения, отличные от значений по умолчанию, должны включаться в этот пакет. Все параметры, значения которых не отличаются от значений по умолчанию, в пакет LCP типа Configure-Request не включаются. Некоторые параметры Configure-Request описаны в табл. 8.3.
Пакет LCP типа Configure-Ack
Пакет LCP типа Configure-Ack посылается хостом РРР, если он согласен со значениями всех параметров, заявленных в пакете Configure-Request. Значения всех параметров в этом пакете должны полностью соответствовать параметрам, заявленным в пакете Configure-Request. Если имеется расхождение хотя бы в одном из параметров, то сервер РРР не выдает пакет Configure-Ack.
Пакет LCP типа Configure-Nak
Пакет LCP типа Configure-Nak используется для сигнализации о том, что по крайней мере один из параметров, заявленных в пакете Configure-Request, не принят сервером РРР. При этом сервер должен указать, какой именно параметр не принят, и предложить альтернативное значение этого параметра в поле Опции этого пакета.
Пакет LCP типа Configure-Reject
Пакет LCP типа Configure-Reject применяется с целью уведомления клиента о том, что параметры, указанные в пакете Configure-Request, либо не опознаны (являются ошибочными), либо не приняты сервером РРР. Когда клиент получает пакет типа Configure-Reject, то он должен сделать вывод о том, что ни один из предложенных им параметров недоступен для согласования с сервером РРР.
Пакет LCP типа Terminate-Request
Пакет LCP типа Terminate-Request используется клиентом для завершения текущего сеанса РРР. Поле данных в таком пакете может состоять из нулевых байт или заполняться данными, которые не имеют значения. Хост РРР должен обнаруживать пакеты такого типа и реагировать на них соответствующим образом в течение всего сеанса РРР.
Пакет LCP типа Terminate-Ack
Пакет LCP типа Terminate-Ack используется сервером РРР для уведомления клиента о том, что его запрос на завершение сеанса РРР получен. Поле данных этого пакета может заполняться нулевыми байтами или другой бессмысленной информацией. Когда сервер РРР принимает пакет типа Terminate-Request, он должен ответить на него пакетом типа Terminate-Ack и инициировать завершение соединения.