Главная » 2017 » Ноябрь » 17 » man 7 ipv6
00:09
man 7 ipv6

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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 и IPv6 совместно используют локальное портовое пространство. При установлении
соединения IPv4 или приёма пакета на сокете IPv6, адрес его источника отобразится
в v6, и в дальнейшем он будет отображаться как v6.

Формат адреса
struct sockaddr_in6 {
sa_family_t sin6_family; /* AF_INET6 */
in_port_t sin6_port; /* номер порта */
uint32_t sin6_flowinfo; /* информация о потоке IPv6 */
struct in6_addr sin6_addr; /* адрес IPv6 */
uint32_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 является идентификатор, зависящий от области адреса. Это
новое поле, появившееся в версии Linux 2.4. Linux поддерживает его только для
адресов локальной связи (link local); в этом случае sin6_scope_id содержит индекс
интерфейса (смотрите netdevice(7)).
IPv4-преобразованного-в-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. Аргументом является указатель на логическое значение в виде
целого числа.

посылкой определённого управляющего сообщения в управляющий буфер
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. Программы, которые
приёма, макросы для генерации параметров IPv6 в glibc 2.1 отсутствуют.

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

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

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



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


cmsg(3), ip(7)

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



Категория: (7) Различные описания, соглашения и прочее | Просмотров: 472 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar