Provided by: manpages-ru_4.27.0-1_all bug

НАИМЕНОВАНИЕ

       ipv6  - реализация протокола IPv6 в Linux

ОБЗОР

       #include <sys/socket.h>
       #include <netinet/in.h>

       tcp6_socket = socket(AF_INET6, SOCK_STREAM, 0);
       raw6_socket = socket(AF_INET6, SOCK_RAW, protocol);
       udp6_socket = socket(AF_INET6, SOCK_DGRAM, protocol);

ОПИСАНИЕ

       В  Linux  2.2 реализован протокол Интернета версии 6. Эта справочная страница содержит описание основного
       программного интерфейса IPv6, который реализован в ядре  Linux  и  в  glibc  2.1.  Программный  интерфейс
       основан на интерфейсе сокетов BSD; смотрите socket(7).

       Программный  интерфейс  IPv6,  по  большей  части,  совместим  с IPv4 (смотрите ip(7)). В этой справочной
       странице описаны только различия между ними.

       Чтобы привязать сокет AF_INET6  к  любому  процессу  нужно  скопировать  локальный  адрес  из  переменной
       in6addr_any,  имеющей  тип  in6_addr.  При  статической инициализации также может быть использован макрос
       IN6ADDR_ANY_INIT, который раскрывается в константное выражение. В обоих  значениях  используется  сетевой
       порядок байт.

       Адрес  устройства  обратной  петли  IPv6  (::1)  доступен  в  глобальной переменной in6addr_loopback. Для
       инициализации нужно использовать IN6ADDR_LOOPBACK_INIT.

       Соединения  IPv4  могут  обрабатываться   программным   интерфейсом   v6   с   помощью   адресного   типа
       v4-преобразованный-в-v6;  то  есть  программе  необходимо  поддерживать  только  данный  тип программного
       интерфейса для работы  с  обоими  протоколами.  Прозрачная  работа  с  адресами  реализована  в  функциях
       библиотеки Си.

       IPv4  and  IPv6 share the local port space.  When you get an IPv4 connection or packet to an IPv6 socket,
       its source address will be mapped to v6.

   Формат адреса
           struct sockaddr_in6 {
               sa_family_t     sin6_family;   /* AF_INET6 */
               in_port_t       sin6_port;     /* port number */
               uint32_t        sin6_flowinfo; /* IPv6 flow information */
               struct in6_addr sin6_addr;     /* IPv6 address */
               uint32_t        sin6_scope_id; /* Scope ID (new in Linux 2.4) */
           };

           struct in6_addr {
               unsigned char   s6_addr[16];   /* IPv6 address */
           };

       Значение sin6_family всегда устанавливается в AF_INET6; в sin6_port указывается порт протокола  (смотрите
       sin_port  в  ip(7));  в  sin6_flowinfo  указывается  идентификатор  потока  IPv6; в sin6_addr указывается
       128-битный адрес IPv6. Значением sin6_scope_id является идентификатор, зависящий от области  адреса.  Это
       новое  поле,  появившееся  в  версии Linux 2.4. Linux поддерживает его только для адресов локальной связи
       (link local); в этом случае sin6_scope_id содержит индекс интерфейса (смотрите netdevice(7)).

       IPv6  поддерживает  несколько  типов  адресов:  однозначные  (unicast)  —  для  адресации  одного   узла,
       многоадресные  (multicast)  — для адресации группы узлов, anycast — для адресации ближайшего члена группы
       узлов  (не  реализовано  в  Linux),  IPv4-on-IPv6  —  для  адресации  узла  IPv4,  и   несколько   других
       зарезервированных типов адресов.

       The  address  notation  for IPv6 is a group of 8 4-digit hexadecimal numbers, separated with a ':'.  "::"
       stands for a string of 0 bits.  Special addresses are ::1 for  loopback  and  ::FFFF:<IPv4  address>  for
       IPv4-mapped-on-IPv6.

       В IPv6 используется единое с IPv4 пространство портов.

   Параметры сокета
       IPv6  поддерживает  некоторые параметры сокета, относящиеся к протоколу, которые могут быть установлены с
       помощью setsockopt(2) и прочитаны с помощью getsockopt(2). Значением уровня (level) параметров сокета для
       IPv6 является IPPROTO_IPV6. Логический флаг в виде целого числа со значением 0  означает  «ложь»,  другие
       значения — «истина».

       IPV6_ADDRFORM
              Преобразует  сокет  AF_INET6  в  сокет  другого семейства адресов. На данный момент поддерживается
              только AF_INET. Разрешено только для сокетов IPv6, которые  подсоединены  и  привязаны  к  адресам
              v4-преобразованные-в-v6. В аргументе задаётся указатель на целое со значением AF_INET. Это полезно
              для передачи v4-преобразованных сокетов в виде дескрипторов файлов программам, которые не понимают
              программного интерфейса IPv6.

       IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP
              Определяет  членство  в многоадресных (multicast) группах. Аргументом является указатель на struct
              ipv6_mreq.

       IPV6_MTU
              getsockopt(): Возвращает известное в данный момент значение MTU маршрута текущего  сокета.  Только
              для подключённых сокетов. Возвращается целое число.

              setsockopt():  Устанавливает  MTU,  который  должен  использоваться для сокета. MTU ограничивается
              значением MTU устройства или MTU пути, если включено определение  пути  MTU.  Аргументом  является
              указатель на целое.

       IPV6_MTU_DISCOVER
              Управляет определением пути MTU для сокета. Смотрите описание IP_MTU_DISCOVER в ip(7).

       IPV6_MULTICAST_HOPS
              Определяет  лимит многоадресных пересылок (hop) для сокета. Аргументом является указатель на целое
              число. Значение -1 означает использование маршрута  по  умолчанию,  в  противном  случае  значение
              должно быть в диапазоне от 0 до 255.

       IPV6_MULTICAST_IF
              Назначает  устройство  для  исходящих  многоадресных  пакетов для сокета. Это разрешено только для
              сокетов SOCK_DGRAM и SOCK_RAW.  Аргументом  является  указатель  на  индекс  интерфейса  (смотрите
              netdevice(7)) в виде целого числа.

       IPV6_MULTICAST_LOOP
              Определяет,  видит  ли  сокет  многоадресные  пакеты,  которые  сам и посылал. Аргументом является
              указатель на логическое значение.

       IPV6_RECVPKTINFO (начиная с Linux 2.6.14)
              Задаёт отправку управляющего сообщения IPV6_PKTINFO для  входящих  дейтаграмм.  Такие  управляющие
              сообщения  содержат  структуру  struct  in6_pktinfo,  описанную  в  RFC 3542. Разрешено только для
              сокетов SOCK_DGRAM или SOCK_RAW. Аргументом является  указатель  на  логическое  значение  в  виде
              целого числа.

       IPV6_RTHDR, IPV6_AUTHHDR, IPV6_DSTOPTS, IPV6_HOPOPTS, IPV6_FLOWINFO, IPV6_HOPLIMIT
              Задают  отправку  управляющих сообщений для входящих датаграмм, содержащих заголовки расширения из
              принятых пакетов. IPV6_RTHDR доставляет заголовок маршрутизации, IPV6_AUTHHDR доставляет заголовок
              аутентификации, IPV6_DSTOPTS доставляет параметры назначения,  IPV6_HOPOPTS  доставляет  параметры
              пересылок  (hop),  IPV6_FLOWINFO  доставляет целое, содержащее ID потока, IPV6_HOPLIMIT доставляет
              целое, содержащее счётчик пересылок  пакета.  Управляющие  сообщения  имеют  тот  же  тип,  что  и
              параметры  сокета.  Все  эти параметры заголовка могут также устанавливаться для исходящих пакетов
              посылкой определённого управляющего сообщения в управляющий буфер sendmsg(2). Разрешено только для
              сокетов SOCK_DGRAM или SOCK_RAW. Аргументом является указатель на логическое значение.

       IPV6_RECVERR
              Управляет  получением  асинхронных  параметров  ошибки.  Смотрите  описание  IP_RECVERR  в  ip(7).
              Аргументом является указатель на логическое значение.

       IPV6_ROUTER_ALERT
              Передаёт  все  пересланные пакеты, содержащие предупреждающий параметр hop-by-hop маршрутизатора в
              сокет.  Разрешено  только  для  сокетов  SOCK_RAW.  Выявленные  пакеты  не   пересылаются   ядром,
              пользователь  должен  отправить  заново  самостоятельно.  Аргументом  является указатель на целое.
              Положительное число означает перехват значения предупреждающего параметра маршрутизатора.  Пакеты,
              содержащие  предупреждающий  параметр  маршрутизатора  с  таким значением поля, будут доставлены в
              сокет.  Отрицательное  значение  отключает   доставку   пакетов   с   предупреждающим   параметром
              маршрутизатора в сокет.

       IPV6_UNICAST_HOPS
              Определяет  лимит  однозначных (unicast) пересылок (hop) для сокета. Аргументом является указатель
              на целое число. Значение -1 означает использование маршрута по умолчанию, в противном  случае  его
              значение должно быть в диапазоне от 0 до 255.

       IPV6_V6ONLY (начиная с Linux 2.4.21 и 2.6)
              Если этот флаг установлен (не равен 0), то сокет отправляет и принимает только пакеты IPv6. В этом
              случае приложение IPv4 и IPv6 может привязать один порт за раз.

              Если этот флаг сброшен (равен 0), то сокет можно использовать для отправки и приёма пакетов с и на
              адрес IPv6 или адрес IPv4-преобразованный-в-IPv6.

              Аргументом является указатель на логическое значение в виде целого числа.

              Значение этого флага по умолчанию определяется из содержимого файла /proc/sys/net/ipv6/bindv6only.
              По умолчанию значение в файле 0.

ОШИБКИ

       ENODEV Пользователь  пытался  выполнить  bind(2)  на  адрес  локальной  связи  IPv6,  но  sin6_scope_id в
              переданной структуре sockaddr_in6 содержит некорректный индекс интерфейса.

ВЕРСИИ

       В Linux 2.4 сломана двоичная совместимость sockaddr_in6 у 64-битных узлов  из-за  изменения  выравнивания
       in6_addr  и  добавления  дополнительного  поля  sin6_scope_id.  Интерфейс  ядра  остался  совместимым, но
       программа, включающая sockaddr_in6 или in6_addr в другие структуры, уже может не быть совместимой. Это не
       является проблемой для 32-битных узлов, например с архитектурой i386.

       Поле sin6_flowinfo является нововведением в Linux 2.4. Оно прозрачно передаётся/считывается ядром в длине
       переданного адреса. Некоторые программы, которые передают более длинный буфер адреса  и  затем  проверяют
       длину исходящего адреса, могут перестать работать.

ПРИМЕЧАНИЯ

       Структура  sockaddr_in6  по  размеру  больше, чем обычная sockaddr. Программы, которые допускают, что все
       типы адреса могут без проблем сохраняться в struct sockaddr, нужно изменить использовав вместо неё struct
       sockaddr_storage.

       SOL_IP, SOL_IPV6, SOL_ICMPV6, and other SOL_* socket options are nonportable variants of IPPROTO_*.   See
       also ip(7).

ОШИБКИ

       Расширенный  программный  интерфейс IPv6, описанный в RFC 2292, к настоящему времени реализован частично;
       хотя ядро версии 2.2 имеет почти полную поддержку параметров приёма,  макросы  для  генерации  параметров
       IPv6 в glibc 2.1 отсутствуют.

       Поддержка IPSec для заголовков EH и АХ отсутствует.

       Описание управления потоком на основе меток (label) не завершено и здесь не описано.

       Эта справочная страница не полна.

СМОТРИТЕ ТАКЖЕ

       cmsg(3), ip(7)

       RFC 2553: IPv6 BASIC API; Linux пытается быть совместимым с этим стандартом. RFC 2460: спецификация IPv6.

ПЕРЕВОД

       Русский  перевод  этой  страницы  руководства  разработал(и) Azamat Hackimov <azamat.hackimov@gmail.com>,
       Dmitriy S. Seregin <dseregin@59.ru>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com>  и
       Kirill Rekhov <krekhov.dev@gmail.com>

       Этот  перевод является свободной программной документацией; он распространяется на условиях общедоступной
       лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html  версии  3  или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

       Если  вы  обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом
       разработчику(ам)  по  его(их)  адресу(ам)  электронной  почты  или  по   адресу   списка рассылки русских
       переводчиков.

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                          ipv6(7)