Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учеб.пос.СП.doc
Скачиваний:
28
Добавлен:
31.03.2015
Размер:
1.33 Mб
Скачать
    1. Домен адресов af_inet6

Если можно было использовать все 32 бита, то IPv4 мог бы адресовать 4,3 миллиарда сетевых узлов. На сегодняшний день этого количества пока достаточно. Однако из-за способа назначения адресов IPv4 это количество на самом деле много меньше. В результате была предпринята попытка разработать версию 6 протокола IP - IPv6, который наряду с другими улучшениями увеличил размер адреса с 4 до 16 байт, что позволяет адресовать до узлов сети. АдресаIPv6 записываются как 8 групп по 2 байта в каждой, например: FEDC:BA98:7654:3210:FEDC:BA98:7654:3210. При создании сокетов из домена адресов AF_INET6 нужно использовать структуру sockaddr_in6, которая включает немного больше полей, чем ее предшественница sockaddr_in:

struct sockaddr_in6 - структура адресов из домена AF_INET6

#include <netinet/in.h>

struct sockaddr_in6 {

sa_family_t sin6_family; /* AF_INET6 */

In_port_t sin6_port; /* номер порта (uint16_t) */

uint32_t sin6_flowinfo; /* класс трафика и информация о потоке */

struct in6_addr sin6_addr; /* адрес IPv4 */

uint32_t sin6_scope_id; /* набор интерфейсов в области видимости */

};

struct in6_addr {

uint8_t s6_addr[16]; /* адрес IPv6 */

};

В этой структуре два новых поля. Это поле sin6_flowinfo, которое предназначено для хранения метки потока и приоритета, а sin6_scope_id идентифицирует набор интерфейсов для использования с определенными адресами. Если нужно использовать эту структуру в своих приложениях, то инициализируйте поле sin6_scope_id значением 0.

    1. Доменная система именования

Очень редко приходится в адресной строке обозревателя Интернета набирать непосредственно IP – адрес. Практически всегда набирают имя сервера, например: www.nsuem.ru. Имена узлов сети транслируются в IP – адреса благодаря наличию всемирной распределенной базы данных имен, которая называется DNS. Для доступа к DNS из приложений в OC UNIX существует ряд специализированных функций. В обобщенном виде адрес записывается как: scheme://hostname/path, где scheme определяет способ доступа к ресурсу (например, HTTP), hostname - имя сетевого узла в том виде, в каком оно представлено в базе DNS, а path - путь в пределах файловой системы сетевого узла.

В примерах мы использовали сокеты для того, чтобы установить соединение с сетевым узлом, все дальнейшее взаимодействие осуществлялось в соответствии со схемой. Как передается часть адреса path, зависит от используемой схемы. Сами сокеты никак не беспокоятся ни по поводу пути к ресурсу, ни по поводу схемы.

    1. Параметры сокетов

Все параметры сокетов настраиваются в отдельном системном вызове:

setsockopt – устанавливает параметры сокета

#include <sys/socket.h>

int setsockopt (

int socket_fd, /* файловый дескриптор сокета */

int level, /* уровень протокола */

int option, /* устанавливаемый параметр */

const void *value, / * значение параметра */

socklen_t value_len /* длина значения */

);

/* Возвращает 0 в случае успеха или -1 в случае ошибки (код ошибки - в errno) */

Второй аргумент level, идентифицирует уровень протокола, которому предназначается указанный параметр. Для манипуляции параметрами на уровне сокета задается уровень SOL_SOCKET, и вы будете использовать этот уровень значительно чаще других. Определено еще 6 уровней протоколов: IPPROTO_IP (протокол IP); IPPROTO_IPV6 (протокол IP версии 6); IPPROTO_ICMP (протокол управляющих сообщений – ICMP); IPPROTO_RAW (низкоуровневый сетевой протокол); IPPROTO_TCP (протокол управления передачей – TCP); IPPROTO_UDP (протокол обмена дейтаграммами – UDP).