Какие L3-протоколы реализованы в Linux поверх IPv6?

Вопрос или проблема

Ubuntu 22.04

Я экспериментирую с протокольным стеком IPv6 в Linux и пытаюсь выяснить, какие протоколы поддерживаются в качестве протоколов уровня L3 поверх IPv6. Согласно IANA, я запустил следующий простой код для проверки отклика каждого определенного номера протокола:

for i in range(1, 148):
    send(IPv6(src="::1", dst="::1", nh = i))
    sleep(1) 

В sudo tcpdump ip6 -n -vvv -i lo я вижу, что большинство протоколов не поддерживаются, например:

00:31:12.081361 IP6 (hlim 64, next-header unknown (37) payload length: 0)
   ::1 > ::1:  ip-proto-37 0
00:31:12.081371 IP6 (flowlabel 0x11111, hlim 64, next-header ICMPv6 (58) payload length: 48)
   ::1 > ::1: [icmp6 sum ok] ICMP6, parameter problem, next header - octet 6

Это означает, что реализация протокольного стека IPv6 в Linux не понимает номер протокола (в данном случае это был 37).

Единственные поддерживаемые номера помимо номеров заголовков расширений были:

TCP,     next header = 6
UDP,     next header = 17
ICMPv6,  next header = 58
PIM,     next header = 103
UDPLite, next header = 136

Обратите внимание, что даже IPv6, next header = 41 не был распознан. Означает ли это, что реализация IPv6 в Linux не соответствует RFC 8200?

Ответ или решение

На Ubuntu 22.04 вы экспериментируете с протоколом IPv6 и анализируете его совместимость с различными L3-протоколами. Проведённое вами тестирование показывает, что в стеке IPv6 Linux поддерживаются несколько ключевых протоколов, в то время как многие из них, вероятно, игнорируются или не распознаются.

Поддерживаемые L3-протоколы в Linux поверх IPv6:

  1. TCP (Transmission Control Protocol) — Используется для установления надёжных соединений и передачи данных с управлением потоком. Идентификатор протокола: 6.

  2. UDP (User Datagram Protocol) — Протокол для передачи данных без установления соединений, который используется там, где важна скорость передачи, но не её надёжность. Идентификатор протокола: 17.

  3. ICMPv6 (Internet Control Message Protocol for IPv6) — Необходим для диагностики и управления сетями IPv6. Он используется, например, для передачи сообщений об ошибках. Идентификатор протокола: 58.

  4. PIM (Protocol Independent Multicast) — Протокол, используемый для маршрутизации мультикаст-трафика независимо от используемых протоколов маршрутизации. Идентификатор протокола: 103.

  5. UDPLite — Вариант протокола UDP с улучшенной проверкой целостности данных. Идентификатор протокола: 136.

Ваш эксперимент показал, что большинство других протоколов не поддерживаются или не распознаются, как указано в примере с протоколом под номером 37. Даже протокол IPv6 (идентификатор 41), который теоретически поддерживает инкапсуляцию IPv6 в IPv6, не распознаётся.

Соответствие стандартам RFC 8200

Согласно RFC 8200, реализация IPv6 должна поддерживать как минимум базовый набор протоколов, таких как ICMPv6, TCP и UDP. Отсутсвие поддержки протокола с идентификатором 41 в вашем эксперименте не указывает на нарушение RFC 8200, поскольку не все протоколы обязаны быть реализованы в рамках одного стека, особенно если они не используются в широком применении.

Заключение

Ваше исследование продемонстрировало, что ядро Linux поддерживает основные L3-протоколы поверх IPv6, необходимые для функционирования типичного сетевого стека. Однако реализация всех возможных (и менее используемых) протоколов на практике не является обязательной. Это позволяет системе оставаться более безопасной и эффективной, избегая избыточности в реализации редко используемых протоколов.

Оцените материал
Добавить комментарий

Капча загружается...