Русская Википедия:OLSR
OLSR (Шаблон:Lang-en) — протокол маршрутизации для MANET, который также может использоваться в других беспроводных сетях. OLSR — проактивный протокол маршрутизации, использующий обмен сообщениями приветствия (hello) и контроля (topology control) для получения информации о топологии сети. Узлы используют эту информацию для определения следующего прыжка в пути маршрутизируемого пакета. Является одним из наиболее популярных протоколов, которые используются для маршрутизации в беспроводных сетях MANET[1].
Принцип работы
OLSR основан на механизме широковещательной рассылки для обновления информации о топологии сети. Особенностью протокола является то, что эта информация известна каждому узлу сети. В OLSR узел сети отправляет так называемое HELLO-сообщение. Изменение в топологии сети узлы обнаруживают с помощью принятых HELLO-сообщений от соседей. В этих сообщениях содержится собственный адрес узла, отправившего данное оповещение, а также перечень всех его доступных соседей, их адреса с указанием типа соединения (симметричное или асимметричное). Таким образом узел сообщает своим соседям о доступных ему связях. Каждый абонент сохраняет у себя информацию о своих одно- (neighbors)[2] и двухшаговых соседях (two-hop neighbors)[3]. Отправка HELLO-сообщений производится с заданным интервалом. В случае, если в течение определенного времени узел не принимает HELLO-сообщение от соседа, то связь с ним считается разорванной. Соответствующее изменение вносится в таблицу топологии сети абонента.
Помимо всего в сети узлы периодически передают широковещательное TC-сообщение (topology control). В этом сообщении содержится информация о соединении абонента с одношаговыми соседями. По полученной информации из ТС- и HELLO-сообщений, узел строит граф, который описывает представление о построении сети для данного узла. С помощью этого графа строится таблица кратчайших путей передачи информации до каждого узла.
Очевидно, что в таком способе организации связи между узлами есть существенный недостаток. Естественна ситуация, когда двухшаговый сосед может являться одношаговым для двух и более одношаговых соседей передающего узла. Тогда создастся ситуация, в которой двухшаговый сосед будет получать одно и то же HELLO-сообщение несколько раз. Для решения таких ситуаций в OLSR предусмотрен метод оптимизации рассылки сетевой информации о состояниях Multipoint Relay (MPR). По таблице топологии сети узел выбирает таких одношаговых соседей с симметричной связью, которые являются одношаговыми соседями хотя бы одному двушаговому соседу данного узла. Этот метод позволяет уменьшить трафик широковещательной рассылки[4].
Формат пакетов
Заголовок пакета
В схеме заголовки IP и UDP были пропущены.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Packet length | Packet sequence number | ||||||||||||||||||||||||||||||
Заголовок сообщения | |||||||||||||||||||||||||||||||
Сообщение | |||||||||||||||||||||||||||||||
… | |||||||||||||||||||||||||||||||
Заголовок сообщения | |||||||||||||||||||||||||||||||
Сообщение |
- Packet Length
- Размер пакета в байтах.
- Packet Sequence Number
- Порядковый номер пакета. Должен увеличиваться на единицу каждый раз, когда отправляется новый.
Сообщения
Заголовок сообщения
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Message Type | Vtime | Message Size | |||||||||||||||||||||||||||||
Originator Address | |||||||||||||||||||||||||||||||
Time To Live | Hop Count | Message Sequence Number | |||||||||||||||||||||||||||||
Сообщение |
- Message Type
- Тип пересылаемого сообщения. Значения от 0 до 127 зарезервированы.
-
- 1 — HELLO_MESSAGE
- 2 — TC_MESSAGE
- 3 — MID_MESSAGE
- 4 — HNA_MESSAGE
- Vtime (validity time)
- Срок, на который сообщение считается актуальным, пока не будет получено новое сообщение.
- Message Size
- Размер сообщения.
- Originator Address
- Адрес создателя сообщения.
- Time To Live
- Максимальное количество «прыжков» (Шаблон:Lang-en), которое должно совершить сообщение. Если оно равно 0 или 1, то сообщение не должно передаваться дальше. При каждом прыжке должно уменьшаться на единицу.
- Hop Count
- Количество «прыжков», которое сообщение совершило. Должно увеличиваться на 1 при каждом «прыжке».
- Message Sequence Number
- Порядковый номер сообщения. Должен увеличиваться на единицу каждый раз, когда составляется новое сообщение. Используются для того, чтобы предотвратить повторную пересылку одного и того же сообщения.
HELLO_MESSAGE
Сообщения HELLO используются для уточнения текущей конфигурации сети. Отправляются периодически.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Зарезервировано | Htime | Willingness | |||||||||||||||||||||||||||||
Link Code | Зарезервировано | Link Message Size | |||||||||||||||||||||||||||||
Адрес соседа | |||||||||||||||||||||||||||||||
… | |||||||||||||||||||||||||||||||
Зарезервировано | Htime | Willingness | |||||||||||||||||||||||||||||
Link Code | Зарезервировано | Link Message Size | |||||||||||||||||||||||||||||
Адрес соседа | |||||||||||||||||||||||||||||||
… | |||||||||||||||||||||||||||||||
Адрес соседа |
Для соблюдения спецификации зарезервированные биты должны быть равны 0.
- Htime (Hello emission interval)
- Периодичность отправки сообщений HELLO.
- Willingness
- Готовность узла передавать полученные сообщения дальше. Может принимать значение от 0 (WILL_NEVER, не будет передавать) до 7 (WILL_ALWAYS, будет передавать всегда) включительно. Значение может меняться в зависимости от состояния узла, то есть, если устройство работает от батареи, то оно может понижать уровень готовности по мере снижения заряда.
- Link Code
- Характеризует последующий список соседей этого узла. По спецификации должно быть меньше 16 и должно содержать в себе два поля по два бита каждое
7 6 5 4 3 2 1 0 0 0 0 0 Neighbor Type Link Type - Neighbor Types — тип соседа:
- SYM_NEIGH — имеет хотя бы одно симметричное соединение с узлом.
- MPR_NEIGH — имеет хотя бы одно симметричное соединение с узлом и был выбран как MPR.
- NOT_NEIGH — сообщает о том, что симметричное соединение было разорвано или ещё не установлено.
- Link Types — тип соединения:
- UNSPEC_LINK — нет никакой информации о типе соединения.
- ASYM_LINK — соединение асимметрично.
- SYM_LINK — соединение симметрично.
- LOST_LINK — соединение потеряно.
- Neighbor Types — тип соседа:
- Link Message Size
- Размер сообщения в байтах начиная с поля Link Code до следующего поля Link Code или до конца сообщения.
TC_MESSAGE
Используется для передачи информации о MPR соседях узла.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
ANSN | Зарезервировано | ||||||||||||||||||||||||||||||
Адрес соседа | |||||||||||||||||||||||||||||||
… | |||||||||||||||||||||||||||||||
Адрес соседа |
- ANSN (Advertised Neighbor Sequence Number)
- Порядковый номер сообщения. Должен увеличиваться на единицу каждый раз, когда составляется новое сообщение. Характеризует свежесть информации в сообщении.
Примечания
Ссылки
- RFC 3626