Протокол Пратта
Протокол Пратта — это алгоритм двухфазного детектирования коллизий в среде множественного доступа с контролем несущей и обнаружением коллизий (CSMA/CD), используемый в ранних версиях Ethernet. Протокол был разработан в 1970-х годах в исследовательском центре Xerox PARC (США) и назван в честь одного из его создателей — инженера Роберта Пратта (Robert Pratt). Он обеспечивает эффективное распределение пропускной способности общей среды передачи данных между несколькими узлами сети, минимизируя время простоя при возникновении коллизий.
История
Протокол Пратта был создан в рамках проекта Ethernet, который стартовал в 1972 году в Xerox PARC под руководством Роберта Меткалфа (Robert Metcalfe). Первоначальная версия Ethernet, известная как «экспериментальный Ethernet» (Ethernet Experimental), использовала коаксиальный кабель в качестве общей среды передачи данных. В 1976 году Меткалф и его коллега Дэвид Боггс (David Boggs) опубликовали статью «Ethernet: Distributed Packet Switching for Local Computer Networks», в которой впервые описали принципы CSMA/CD. Однако в этой ранней версии алгоритм разрешения коллизий был реализован через протокол Пратта.
Протокол получил название в честь Роберта Пратта, который предложил модификацию базового алгоритма CSMA/CD для повышения его эффективности. В 1980 году Ethernet был стандартизирован консорциумом DEC, Intel и Xerox (стандарт DIX Ethernet), и протокол Пратта стал частью спецификации. Позднее, с развитием коммутируемых сетей и появлением стандарта IEEE 802.3 (1983 год), протокол Пратта был заменён более совершенными алгоритмами, такими как экспоненциальная задержка (truncated binary exponential backoff), однако его принципы остаются основой для понимания работы CSMA/CD.
Принцип работы
Протокол Пратта реализует механизм двухфазного детектирования коллизий, который разделяет процесс передачи данных на две фазы: фазу обнаружения коллизии и фазу её разрешения.
Фаза обнаружения коллизии
- Прослушивание канала: Узел, желающий передать данные, сначала прослушивает среду передачи (канал) в течение определённого времени (обычно 9,6 микросекунд для Ethernet 10 Мбит/с). Если канал свободен, узел начинает передачу.
- Передача и мониторинг: Во время передачи узел продолжает прослушивать канал, сравнивая передаваемый сигнал с сигналом на линии. Если сигналы совпадают, коллизия не обнаружена. Если сигнал отличается (например, из-за наложения сигналов от другого узла), узел фиксирует коллизию.
- Сигнал коллизии: При обнаружении коллизии узел немедленно прекращает передачу данных и отправляет в канал специальный сигнал — jam signal (сигнал «заглушки»), который длится 32 бита (для Ethernet 10 Мбит/с — 3,2 микросекунды). Этот сигнал уведомляет все узлы сети о коллизии.
Фаза разрешения коллизии
После отправки jam signal узел переходит в фазу разрешения коллизии, которая реализуется через протокол Пратта:
- Выбор случайного интервала: Каждый узел, участвовавший в коллизии, выбирает случайное число из диапазона [0, 2^k - 1], где k — номер попытки повторной передачи (начиная с 1). Это число умножается на базовую единицу времени — slot time (время передачи одного минимального кадра Ethernet, равное 512 битовым интервалам, или 51,2 микросекунды для сети 10 Мбит/с). Полученный интервал становится временем ожидания перед повторной попыткой.
- Ожидание и повторная попытка: Узел ждёт выбранный случайный интервал, после чего снова прослушивает канал и пытается передать данные. Если коллизия повторяется, номер попытки k увеличивается, и диапазон случайных чисел расширяется (экспоненциальный рост). После 10-й попытки диапазон фиксируется на уровне [0, 1023]. После 16-й попытки узел прекращает попытки и сообщает об ошибке в протокол верхнего уровня.
Ключевые параметры
Протокол Пратта использует несколько ключевых параметров, которые определяют его эффективность:
- Slot time (время слота) — минимальное время, необходимое для обнаружения коллизии в сети. Для Ethernet 10 Мбит/с slot time составляет 512 битовых интервалов (51,2 мкс). Это значение выбрано так, чтобы гарантировать обнаружение коллизии даже в самом длинном сегменте сети (максимальная длина кабеля — 500 метров).
- Jam signal — сигнал длиной 32 бита, который отправляется для уведомления всех узлов о коллизии. Его длина выбрана так, чтобы он не мог быть ошибочно принят за начало кадра.
- Попытки повторной передачи — максимальное число попыток (16), после которых узел отказывается от передачи и сообщает об ошибке. Это предотвращает бесконечные зацикливания при высокой загрузке сети.
Преимущества и недостатки
Преимущества
- Простота реализации: Алгоритм не требует сложных вычислений или дополнительного оборудования, что делает его подходящим для ранних сетей Ethernet.
- Эффективность при низкой загрузке: При небольшом количестве узлов и низкой интенсивности трафика протокол обеспечивает высокую пропускную способность (до 80–90% от номинальной скорости).
- Детерминированность: Двухфазный подход позволяет чётко разделить этапы обнаружения и разрешения коллизий, что упрощает отладку и анализ сети.
Недостатки
- Неэффективность при высокой загрузке: При большом количестве узлов и высокой интенсивности трафика частота коллизий возрастает, что приводит к значительному снижению пропускной способности (до 30–40% от номинальной скорости). Это связано с тем, что случайные интервалы ожидания могут совпадать, вызывая повторные коллизии.
- Ограничение на длину сети: Для гарантированного обнаружения коллизий максимальная длина сегмента Ethernet ограничена (500 метров для коаксиального кабеля). При превышении этого расстояния коллизии могут оставаться необнаруженными.
- Отсутствие приоритетов: Протокол не поддерживает приоритеты трафика — все узлы имеют равные права на доступ к среде, что может быть проблематично для приложений, требующих гарантированной задержки (например, голосовая связь).
Применение
Протокол Пратта использовался в ранних версиях Ethernet (10BASE5 и 10BASE2), где общая среда передачи данных (коаксиальный кабель) соединяла все узлы сети. С появлением коммутируемых сетей (1990-е годы) и стандарта 10BASE-T (витая пара) протокол Пратта был заменён на более современные алгоритмы, такие как экспоненциальная задержка, реализованная в стандарте IEEE 802.3. Однако протокол остаётся важным для понимания истории развития сетевых технологий и используется в образовательных целях при изучении CSMA/CD.
Интересные факты
- Протокол Пратта был назван в честь Роберта Пратта, который работал в Xerox PARC и внёс значительный вклад в разработку алгоритмов разрешения коллизий. Позднее Пратт перешёл в компанию 3Com, где участвовал в создании первых коммерческих сетевых адаптеров Ethernet.
- В ранних версиях Ethernet протокол Пратта использовал фиксированный диапазон случайных чисел (от 0 до 7) для первых попыток, что делало его менее эффективным при высокой загрузке. Позднее этот диапазон был расширен до экспоненциального роста.
- Протокол Пратта иногда называют «двухфазным протоколом» из-за его разделения на фазу обнаружения и фазу разрешения коллизий.
Источники
- Robert M. Metcalfe, David R. Boggs. «Ethernet: Distributed Packet Switching for Local Computer Networks». Communications of the ACM, 1976.
- Charles E. Spurgeon. «Ethernet: The Definitive Guide». O'Reilly Media, 2000.
- IEEE 802.3-2018 — Standard for Ethernet.
- Andrew S. Tanenbaum. «Computer Networks». 5th Edition, Pearson, 2010.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →