The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

ipv6 (7)
  • >> ipv6 (7) ( Русские man: Макропакеты и соглашения )
  • ipv6 (7) ( Linux man: Макропакеты и соглашения )
  • Ключ ipv6 обнаружен в базе ключевых слов.
  •  

    НАЗВАНИЕ

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

    СИНТАКСИС

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

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

    ОПИСАНИЕ

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

    API для IPv6 предназначен быть в основном совместимым с ip(7) v4 API. На этой странице руководства описаны только различия между ними.

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

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

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

    IPv4 и IPv6 разделяют локальное пространство порта. Когда Вы примете соединение IPv4 или пакеты на сокетах IPv6, то его источник отобразится в v6, и в дальнейшем он будет отображаться как v6.  

    ФОРМАТЫ АДРЕСОВ

    
    struct sockaddr_in6 {
        u_int16_t       sin6_family;/* AF_INET6 */
        u_int16_t       sin6_port;/* номер порта */
        u_int32_t       sin6_flowinfo;/* поток информации IPv6 */
        struct in6_addr sin6_addr;/* адрес IPv6 */
        u_int32_t   sin6_scope_id;  /* Область id (новое с версии 2.4) */
    };
    
    struct in6_addr {
        unsigned char   s6_addr[16];/* адрес IPv6 */
    };
    
    

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

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

    Нотацией адреса для IPv6 будет группа из шестнадцати 2-разрядных шестнадцатеричных чисел, разделенных двоеточием ':'. Два двоеточия '::' зарезервированы для обозначения строки из 0 бит. Специальные адреса - ::1 для устройства обратной петли и FFFF::<адрес IPv4> для IPv4-преобразованного-в-IPv6.

    Место в порту IPv6 разделяется с IPv4.  

    ОПЦИИ СОКЕТОВ

    IPv6 поддерживает некоторые протоколы с особыми параметрами сокетов, которые могут устанавливаться setsockopt(2) и считываться с помощью getsockopt(2). Уровни параметра сокетов IPv6 определяются IPPROTO_IPV6. Логический целочисленный флаг равен нулю, когда IPPROTO_IPV6 - ложь, в противном случае - истина.
    IPV6_UNICAST_HOPS
    Определяет лимит хопов (hop) в unicast для сокетов. Аргумент является указателем на целое число. Значение -1 означает использование маршрута по умолчанию, в противном случае его значение будет в диапазоне от 0 до 255.
    IPV6_MULTICAST_HOPS
    Определяет лимит хопов в multicast для сокетов. Аргумент является указателем на целое число. Значение -1 означает использование маршрута по умолчанию, в противном случае его значение будет в диапазоне от 0 до 255.
    IPV6_MULTICAST_IF
    Определяет устройство для исходящих пакетов multicast для сокета. Это разрешено только для сокетов SOCK_DGRAM и SOCK_RAW. Аргумент является указателем на индекс интрефейса (см. netdevice(7)) среди целых чисел.
    IPV6_ADDRFORM
    Преобразует сокет AF_INET6 в сокет другого семейства адресов. В этих ситуациях на данный момент поддерживаются только AF_INET. Оно разрешено только для сокетов IPv6, которые соединены и привязаны с адресами v4-преобразованные-в-v6. Аргумент является указателем на целое, содержащее AF_INET. Полезно передавать v4-преобразованные сокеты как описатели файлов программам, которые не понимают IPv6 API.
    IPV6_PKTINFO
    Установите отправку управляющего сообщения IPV6_PKTINFO для входящих датаграмм. Разрешено только для сокетов SOCK_DGRAM или SOCK_RAW. Аргументом является указатель на логическое значение среди целых чисел.
    IPV6_RTHDR, IPV6_AUTHHDR, IPV6_DSTOPS, IPV6_HOPOPTS, IPV6_FLOWINFO, IPV6_HOPLIMIT Устанавливают отправку управляющих сообщений для входящих датаграмм, содержащих заголовки расширения из принятых пакетов. IPV6_RTHDR доставляет заголовок маршрутизации, IPV6_AUTHHDR доставляет заголовок аутентификации, IPV6_DSTOPTS доставляет параметры назначения, IPV6_HOPOPTS доставляет параметры хопов, IPV6_FLOWINFO доставляет целое, содержащее поток id, IPV6_HOPLIMIT доставляет целое, содержащее счетчик хопов пакета. Управляющие сообщения имеют тот же тип, что и параметры сокета. Все эти параметры заголовка могут также устанавливаться для исходящих пакетов посылкой определенного управляющего сообщения в управляющий буфер sendmsg(2). Разрешено только для сокетов SOCK_DGRAM или SOCK_RAW. Аргумент является указателем на логическое значение.
    IPV6_MULTICAST_LOOP
    Определяет, видит ли сокет пакеты multicast, которые сам и посылал. Аргумент является указателем на логическое число.
    IPV6_ADD_MEMBERSHIP, IPV6_DROP_MEMBERSHIP
    Определяет членством в группах multicast. Аргумент является указателем на структуру structipv6_mreq.
    IPV6_MTU
    Устанавливает MTU, который должен использоваться для сокета. MTU ограничивается устройством MTU или маршрутом MTU, если включено определение пути MTU. Аргумент является указателем на целое.
    IPV6_MTU_DISCOVER
    Управляет определением пути MTU для сокета. См. IP_MTU_DISCOVER в ip(7) для более детальной информации.
    IPV6_RECVERR
    Управляет получением асинхронных параметров ошибки. См. IP_RECVERR в ip(7) для более детальной информации. Аргумент является указателем на логическое число.
    IPV6_ROUTER_ALERT
    Передает все пересланные пакеты, содержащие предупреждение параметра маршрутизатора для сокета. Разрешено только для датаграмм сокетов и для root. Аргумент является указателем на логическое число.
     

    ВЕРСИИ

    Старые libinet6 в libc5, основанные на реализации API IPv6 для Linux, не описаны здесь и могут изменяться в конкретных деталах.

    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.  

    НАЙДЕННЫЕ ОШИБКИ

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

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

    Руководство по управлению потоком не завершено и тут незадокументировано.

    Эта страница руководста не совсем полна.  

    СМ. ТАКЖЕ

    ip(7), cmsg(3)

    RFC2553: IPv6 BASIC API. Linux пытается быть совместимым с этим стандартом.

    RFC2460: спецификация IPv6.


     

    Index

    НАЗВАНИЕ
    СИНТАКСИС
    ОПИСАНИЕ
    ФОРМАТЫ АДРЕСОВ
    ОПЦИИ СОКЕТОВ
    ВЕРСИИ
    ЗАМЕЧАНИЯ ПО ПОРТИРОВАНИЮ
    НАЙДЕННЫЕ ОШИБКИ
    СМ. ТАКЖЕ


    Поиск по тексту MAN-ов: 




    Спонсоры:
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру