Лекции по курсу "Системное программирование для UNIX". Литвинов Д.Г. - 45 стр.

UptoLike

Составители: 

45
Исторически адреса IPv4 разделены на две частиномер сети и локальный
адрес в сети. Все адреса стандарта IPv4 разделены на 3 класса: A, B и C. В них
соответственно 1, 2 и 3 байта представляют собой адрес сети, остальная часть адреса
локальный адрес в сети. Адреса IPv4 могут быть и бесклассовыми. В этом случае адрес
хоста задается в виде пары 32-битный адрес плюс 32-битная маска подсети. Маска
подсети имеет вид, например 255.0.0.0. В этом случае биты, установленные в 1
указывают часть адреса, определяющую адрес сети, биты установленные в 0 –
локальный адрес в сети. Бесклассовые адреса могут быть записаны и следующим
образом: 10.0.0.0/8. Это означает, что на адрес сети отводится 8 бит, остальная часть
адресалокальный адрес.
Адреса IPv6 всегда являются бесклассовыми.
Адреса IPv4 программно представляются в некоторых случаях как
целочисленное значение (тип данных uint32_t), в других случаях это значение
упаковывается в структуру struct in_addr. Адреса IPv6 упаковываются в структуру struct
in6_addr.
Для задания интернет-адресов в заголовочном файле определены следующие
типы данных и константы:
struct in_addr
Этот тип данных используется в некоторых случаях для задания адресов
стандарта IPv4. Структура имеет единственное поле s_addr типа uint32_t, определяющее
адрес хоста.
uint32_t INADDR_LOOPBACK
Эта макроподстановка может использоваться для работы с локальной машиной
вместо попыток определить действительный адрес. Это адрес IPv4 127.0.0.0, который
также называется localhost. В случае обращения к адресу INADDR_LOOPBACK взамен
действительного адреса машины при передаче отсутствует сетевой трафик.
uint32_t INADDR_ANY
Константа, представляющаялюбой входящий адрес”.
uint32_t INADDR_BROADCAST
Константа, представляющая широковещательный адрес.
uint32_t INADDR_NONE
Эта константа возвращается некоторыми функциями для указания ошибки.
struct in6_addr
Эта структура используется для хранения адреса IPv6. Она хранит 128-битные
данные, доступ к которому можно получить используя несколько способов.
struct in6_addr in6addr_loopback
Эта константа содержит так называемый кольцевой адрес стандарта IPv6.
struct in6_addr in6addr_any
Эта константа представляет собой неспецифированный (пустой) адрес.
Функции для манипуляции адресом хоста
int inet_aton (const char *NAME, struct in_addr *ADDR)
Эта функция конвертирует адрес стандарта IPv4 NAME из стандартного
представления, состоящего из чисел и точек, в двоичное представление и сохраняет его
в структуру ADDR. Функция возвращает ненулевое значение в случае успешного
выполнения и 0 в случае ошибки.
uint32_t inet_addr (const char *NAME)
Функция конвертирует адрес стандарта IPv4 из стандартного представления,
состоящего из чисел, разделенных точками, в двоичное представление и возвращает
полученное значение. Если задан неправильный адрес, функция возвращает значение
INADDR_NONE. Функция является устаревшей, так как адрес INADDR_NONE
является допустимым. Рекомендуется использовать inet_addr.
        Исторически адреса IPv4 разделены на две части – номер сети и локальный
адрес в сети. Все адреса стандарта IPv4 разделены на 3 класса: A, B и C. В них
соответственно 1, 2 и 3 байта представляют собой адрес сети, остальная часть адреса –
локальный адрес в сети. Адреса IPv4 могут быть и бесклассовыми. В этом случае адрес
хоста задается в виде пары 32-битный адрес плюс 32-битная маска подсети. Маска
подсети имеет вид, например 255.0.0.0. В этом случае биты, установленные в 1
указывают часть адреса, определяющую адрес сети, биты установленные в 0 –
локальный адрес в сети. Бесклассовые адреса могут быть записаны и следующим
образом: 10.0.0.0/8. Это означает, что на адрес сети отводится 8 бит, остальная часть
адреса – локальный адрес.
        Адреса IPv6 всегда являются бесклассовыми.
        Адреса IPv4 программно представляются в некоторых случаях как
целочисленное значение (тип данных uint32_t), в других случаях это значение
упаковывается в структуру struct in_addr. Адреса IPv6 упаковываются в структуру struct
in6_addr.
        Для задания интернет-адресов в заголовочном файле определены следующие
типы данных и константы:
        struct in_addr
        Этот тип данных используется в некоторых случаях для задания адресов
стандарта IPv4. Структура имеет единственное поле s_addr типа uint32_t, определяющее
адрес хоста.
        uint32_t INADDR_LOOPBACK
        Эта макроподстановка может использоваться для работы с локальной машиной
вместо попыток определить действительный адрес. Это адрес IPv4 127.0.0.0, который
также называется localhost. В случае обращения к адресу INADDR_LOOPBACK взамен
действительного адреса машины при передаче отсутствует сетевой трафик.
        uint32_t INADDR_ANY
        Константа, представляющая “любой входящий адрес”.
        uint32_t INADDR_BROADCAST
        Константа, представляющая широковещательный адрес.
        uint32_t INADDR_NONE
        Эта константа возвращается некоторыми функциями для указания ошибки.
        struct in6_addr
        Эта структура используется для хранения адреса IPv6. Она хранит 128-битные
данные, доступ к которому можно получить используя несколько способов.
        struct in6_addr in6addr_loopback
        Эта константа содержит так называемый кольцевой адрес стандарта IPv6.
        struct in6_addr in6addr_any
        Эта константа представляет собой неспецифированный (пустой) адрес.

        Функции для манипуляции адресом хоста
        int inet_aton (const char *NAME, struct in_addr *ADDR)
       Эта функция конвертирует адрес стандарта IPv4 NAME из стандартного
представления, состоящего из чисел и точек, в двоичное представление и сохраняет его
в структуру ADDR. Функция возвращает ненулевое значение в случае успешного
выполнения и 0 в случае ошибки.
        uint32_t inet_addr (const char *NAME)
        Функция конвертирует адрес стандарта IPv4 из стандартного представления,
состоящего из чисел, разделенных точками, в двоичное представление и возвращает
полученное значение. Если задан неправильный адрес, функция возвращает значение
INADDR_NONE. Функция является устаревшей, так как адрес INADDR_NONE
является допустимым. Рекомендуется использовать inet_addr.


                                                                                   45