PPP
Point-to-Point Protocol (PPP) розроблений для розв’язання проблем зв'язаних з недостатньою кількістю стандартних засобів інкапсуляції протоколів виду "point-to-point IP". Також PPP був також розроблений для спрощення видачі і керування IP адресами, асинхронної і bit-oriented синхронною інкапсуляцією, змішування мережних протоколів(network protocol multiplexing), конфігурувания і тестування якості зв'язку, виявлення помилок і опціями для встановлення таких особливостей мережного рівня як налаштування адрес і установка стиску даних. Для підтримки вище перерахованих якостей, PPP повинен надавати керування по розширеному Link Control Protocol (LCP) і сімейству протоколів Network Control Protocols (NCPs) які використовуються для встановлення параметрів зв'язку. Hа сьогоднішній день PPP підтримує не тільки IP, але й інші протоколи, включаючи IPX і DECNet.
Протокол PPP (Point-to-Point Protocol;)служить для передачі мультипротокольних дейтограм від одного вузла до іншого. Даний протокол відноситься до числа найбільш важливих і широко використовуваних. Це і зрозуміло, більшість регіональних мереж будується з використанням з'єднань крапка-крапка. PPP підтримує, як асинхронний режим з 8 бітами даних без біта парності (погодиться з властивостями послідовного інтерфейсу, що мається практично на всіх ЕОМ), так і побітовий синхронний режим. Протокол містить у собі три складові частини:
- Метод інкапсуляції дейтограм при передачі по послідовних комунікаційних каналах.
- Протокол LCP для встановлення, конфігурування і тестування інформаційних каналів.
- Набір протоколів NCP для установки і конфігурування різних протоколів мережного рівня.
Протокол керування каналом (LCP - Link Control Protocol) є частиною PPP. Кожен кадр PPP починається і завершується прапором 0x7E. За стартовим прапором-октетом випливає байт адреси, що завжди дорівнює 0xFF. Формат кадру PPP представлений на малюнку
Кадр ppp може містити тільки ціле число байт. При інкапсуляції інших пакетів у PPP використовується біт-орієнтований протокол HDLC (High-level Data Link Control).
Поле адреси завжди містить байт 0xff . Це вказує на те, що всі станції повинні прийняти цей кадр, і виключає необхідність виділення якихось спеціальних адрес.
Байт керування завжди дорівнює 0x03, що вказує на ненумерований тип кадру. За замовчуванням кадри PPP передаються в режимі "без установлення з'єднання". Якщо потрібна надійна доставка, використовується версія, описана в RFC-1663. Двооктетне поле протокол подібно по функції з полем тип у кадрі Ethernet і визначає те, як варто інтерпретувати інформаційне поле. Значення 0x0021 цього поля говорить про те, що наступне інформаційне поле містить у собі IP-дейтограмму. Поле CRC (Cyclic Redundancy Check) являє собою циклічну контрольну суму, призначену для виявлення помилок при транспортуванні PPP-кадру.
Застосування прапорів-обмежників кадру (0x7E) створює ті ж проблеми, про які говорилося при описі SLIP-протоколу, - ці байти не можуть бути присутнім в інформаційному полі. У синхронному режимі ця проблема вирішується на апаратному рівні. При роботі в асинхронному режимі для цього використовується спеціальний ESC-символ, рівний 0x7D. Коли цей esc-символ зустрічається в інформаційному полі, шостий біт у наступному за ним байті інвертується. Так байт 0x7E буде перетворений у послідовність 0x7D, 0x5E, а байт 0x7D - у два байти 0x7D, 0x5D. Усі символи з кодами менше 0x20 також перетворяться в ESC-послідовності. Наприклад, 0x07 буде перетворений у 0x7D, 0x27. Це необхідно робити, тому що керуючі символи можуть зробити непередбачені впливи на режим роботи драйверів або модемів, використовуваних у каналі.
Протокол ppp на відміну від SLIP допускає мультипротокольність і динамічне визначення IP-адрес партнерів. Незважаючи на визначені переваги протоколу PPP перед SLIP, останній розповсюджений досить широко. Не важко бачити, що всі перераховані фізичні середовища використовують послідовний формат передачі інформації.
Значення кодів поля протоколу від 0xxx до 3xxx ідентифікують протоколи мережного рівня, а значення в інтервалі 8xxx - bxxx говорять про те, що протокол відповідає NCP (Network Control Protocol). Коди з діапазону 4xxx - 7xxx використовуються для протоколів з низьким рівнем трафіку, а коди від cxxx до exxx відповідають керуючим протоколам (наприклад, LCP).
Протокол PPP при встановленні з'єднання передбачає процедуру аутентификації, що є опціонною (дивися мал. нижче). Після переходу на мережний рівень викликається NCP-протокол, що виконує необхідну конфігурацію каналу.
При виявленні несущої або з ініціативи клієнта система може спробувати установити з'єднання. У випадку успіху система переходить у фазу аутентифікації. Якщо ж і фаза аутентифікації завершується благополучно, система виконує підключення до мережі (IP, IPX, Appletalk і т.д.), налаштування мережного рівня виробляється в рамках протоколу NCP. В всіх інших випадках виконується повернення у вихідний стан. Процедура закриття з'єднання здійснюється протоколом LCP.
У поле даних PPP-пакета може бути вкладений один LCP-пакет, у цьому випадку в поле протокол повинний бути записаний код 0x021 (Link Control Protocol). LCP-протокол служить для встановлення з'єднання шляхом обміну конфігураційними пакетами. По завершенні цього обміну система переходить у фазу аутентифікації. Формат LCP-пакета показаний на мал. нижче.
Слідом за заголовком слідує поле даних. Поле код (1 октет) ідентифікує модифікацію LCP-пакета. Якщо отримано пакет з невідомим полем код, посилається пакет-відгук “відхилення коду”. Поле ідентифікатор (1 октет) служить для перебування відповідності між запитами і відгуками. Якщо отримано пакет з неправильним ідентифікатором, він просто знищується. Двооктетне поле "довжина" визначає розмір LCP-пакета, включаючи розмір заголовка. Октети прийнятого пакета за межами, заданими полем, довжина ігноруються.
(докладніше дивись на http://book.itep.ru/3/ppp_35.htm)