IGMP

Материал из Википедии — свободной энциклопедии
Перейти к навигацииПерейти к поиску
IGMP
НазваниеInternet Group Management Protocol
Уровень (помодели OSI)Сетевой
СемействоTCP/IP
Назначение протоколаУправление групповой маршрутизацией
СпецификацияRFC 3376

IGMP (англ. Internet Group Management Protocol — протокол управления группами Интернета) —протокол управлениягрупповой (multicast) передачей данных в сетях, основанных напротоколе IP. IGMP используетсямаршрутизаторами иIP-узлами для организации сетевых устройств в группы.

Этот протокол является частью спецификациигрупповой передачи пакетов вIP-сетях. IGMP расположен насетевом уровне[1]. Он во многом аналогиченICMP дляодноадресной передачи. IGMP может использоваться для поддержкипотокового видео ионлайн-игр, для этих типов приложений он позволяет использовать сетевые ресурсы более эффективно. IGMP уязвим для некоторых атак[2][3][4][5], и брандмауэры обычно позволяют пользователю отключить этот протокол, если в нем нет необходимости.

IGMP используется только в сетяхIPv4, так как вIPv6 групповая передача пакетов реализована через протоколMulticast Listener Discovery.

Содержание

Архитектура

[править |править код]

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

IGMP architecture example

IGMP используется клиентским компьютером и соседнимикоммутаторами для соединения клиента и локального маршрутизатора, осуществляющего групповую передачу. Далее между локальным и удаленным маршрутизаторами используется протоколProtocol Independent Multicast (PIM), с его помощью групповой трафик направляется от видеосервера к многочисленным клиентам групповой передачи.

Стандарты

[править |править код]

СогласноRequest for Comments (RFC), документу сообществаInternet Engineering Task Force (IETF), существует три версии IGMP. IGMPv1 определен вRFC 1112, IGMPv2 — вRFC 2236 и IGMPv3 — вRFC 3376.

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

Реализация

[править |править код]

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

Операционные системы семействBSD,Linux иWindows поддерживают клиентскую часть протокола. В системе Linux IGMPv3 был добавлен в версии ядра 2.5. Для FreeBSD IGMPv3 был добавлен в версии 8.0.

Для реализации серверной части IGMP в Linux используютсядемоны, например,mrouted может действовать как IGMP маршрутизатор. Существуют также целые программные комплексы (такие, какXORP), позволяющие превратить обычный компьютер в полнофункциональный маршрутизатор групповой передачи.

ВOpenBSD поддержка IGMP в ядре изначально включает в себя базовую поддержку маршрутизации, а имеющиеся в составе ОС демоныmrouted иdvmrpd позволяют решать более сложные задачи (например, туннелирование multicast-трафика).

Структура пакетов IGMPv3

[править |править код]

Определена стандартомRFC 3376.

Запрос принадлежности (Membership Query Message)

[править |править код]

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

  • Общие запросы (General Queries) — позволяют получить полную информацию для каждого из узлов. Маршрутизатор периодически рассылает эти запросы всем системам, подключенным к его сети.
  • Запросы с указанием группы (Group-Specific Queries) — используются для определения состояния подписки для заданной группы узлов. Такие запросы рассылаются по соответствующему групповому адресу.
  • Запросы с указанием группы и источника (Group-and-Source-Specific Queries) — позволяет для каждого узла заданной группы определить, какие сообщения из всех, посылаемых заданными источниками, этот узел хочет получать.
Октет012345678910111213141516171819202122232425262728293031
0—3Type = 0x11Max Resp CodeChecksum
4—7Group Address
8—11ResvSQRVQQICNumber of Sources (N)
12—15Source Address [1]
 Source Address [N]
  • Код макс. ответа (Max Resp Code) — максимальное время (в 1/10 секунды) ожидания ответа, соответствующего данному запросу. Если значением является число, меньшее 128, оно используется напрямую. Если же значение больше или равно 128, оно интерпретируется как экспонента с мантиссой.
  • Контрольная сумма (Checksum) — 16-битная контрольная сумма для всего IGMP-сообщения.
  • Групповой адрес (Group Address) — групповой адрес, используемый в запросах с указанием группы. При общем запросе это поле устанавливается равным нулю.
  • Resv — поле зарезервировано, его следует обнулять при посылке и игнорировать при получении.
  • Флаг S (Прекратить серверную обработку, Suppress Router-side Processing) — установка этого флага указывает всем маршрутизаторам, получившим данное сообщение, прекратить обновления по таймеру.
  • QRV (Переменная надежности запрашивающего, Querier’s Robustness Variable) — содержит переменную надежности (Robustness Variable), значение которой используется посылающим устройством. Маршрутизаторы должны обновлять их переменные надежности в соответствии с последним полученным запросом, пока это поле ненулевое.
  • QQIC (Код интервала запроса, Querier’s Query Interval Code) — значение поля указывает интервал между запросами (Query Interval), используемый запрашивающим. Если значением является число, меньшее 128, оно используется напрямую. Если же значение больше или равно 128, оно интерпретируется как экспонента с мантиссой.
  • Количество источников (Number of Sources, N) — определяет число адресов источников, присутствующих в этом запросе. Для общих запросов и запросов с указанием группы это значение равно нулю. Для запросов с указанием группы и источника это поле ненулевое, оно ограничено значениемMTU сети.
  • Адрес источника [i] (Source Address) — массив индивидуальных (не групповых) IP-адресов источников данных.

Отчёт о принадлежности (Membership Report Message)

[править |править код]
Октет012345678910111213141516171819202122232425262728293031
0—3Type = 0x22ReservedChecksum
4—7ReservedNumber of Group Record (M)
8—11Group Record [1]
 Group Record [M]
  • Reserved — должно устанавливаться в ноль при передаче и игнорироваться при приёме;
  • Number of Group Record — количество полей Group Record в сообщении;
  • Group Record — блок полей, содержащий информацию о членстве отправителя в группе:
012345678910111213141516171819202122232425262728293031
Record TypeAux Data LenNumber of Sources (N)
Multicast Address
Source Address [1]
Source Address [N]
Auxilary Data
  • Record Type — тип записи:
    • Текущее состояние — посылается в ответ на запрос, сообщает о текущем режиме фильтрации, относительно указанного группового адреса, принимает значения MODE_IS_INCLUDE и MODE_IS_EXCLUDE;
    • Изменение режима — посылается при изменении режима фильтрации, принимает значения CHANGE_TO_INCLUDE_MODE и CHANGE_TO_EXCLUDE_MODE;
    • Изменение списка источников — посылается при изменении списка источников без изменения режима фильтрации:
      • ALLOW_NEW_SOURCES — в режиме INCLUDE адреса добавляются к списку, в режиме EXCLUDE — удаляются из списка;
      • BLOCK_OLD_ SOURCES — в режиме EXCLUDE адреса добавляются к списку, в режиме INCLUDE — удаляются из списка.
  • Aux Data Len — длина дополнительных данных в 32-битных словах.
  • Number of Sources — количество адресов источников данных;
  • Multicast Address — групповой адрес, к которому относится информация в записи;
  • Source Address — массив индивидуальных IP-адресов источников данных;
  • Auxilary Data — дополнительная информация, не должна использоваться в текущей версии протокола.

Другие типы пакетов

[править |править код]
ТипНаименованиеОписание
0x12Version 1 Membership reportДолжны поддерживаться для совместимости с предыдущими версиями
0x16Version 2 Membership report
0x17Version 2 Leave Group
0x13Distance Vector Multicast Routing ProtocolЭкспериментальный протокол

См. также

[править |править код]

Примечания

[править |править код]
  1. Network Sorcery — IGMP  (неопр.). Дата обращения: 21 декабря 2009. Архивировано 27 апреля 2006 года.
  2. SpoofedIGMP report denial of serviceАрхивная копия от 10 июня 2011 наWayback Machine vulnerability.
  3. Fragmented IGMP packetАрхивная копия от 13 февраля 2005 наWayback Machine may promote «Denial of Service» attack.
  4. IGMP Security Problem Statement and RequirementsАрхивировано 13 октября 2006 года..
  5. Microsoft Security Bulletin MS06-007:Vulnerability in TCP/IP Could Allow Denial of Service (913446)Архивная копия от 31 марта 2007 наWayback Machine.

Ссылки

[править |править код]
Перейти к шаблону «IPstack»
ОсновныепротоколыTCP/IP по уровняммодели OSI
Физический
Канальный
Сетевой
Транспортный
Сеансовый
Представления
Прикладной
Другие прикладные
Источник —https://ru.wikipedia.org/w/index.php?title=IGMP&oldid=134318187
Категории:
Скрытые категории: