Для чего нужен IP-адрес в компьютерных сетях?

«Для чего нужен IP-адрес в компьютерных сетях?» — вопрос из категории Сети, который задают на 25% собеседований C/C++ Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

IP-адрес (Internet Protocol address) — это уникальный числовой идентификатор, назначаемый каждому устройству в сети. Он работает на сетевом уровне (L3) и служит для логической адресации и маршрутизации пакетов данных через сложные сети, включая интернет. В отличие от MAC-адреса, который работает только в пределах локального сегмента сети, IP-адрес позволяет находить устройства глобально.

Основные типы и использование в C++:

  • IPv4: 32-битный адрес (например, 192.168.1.10). Широко распространен.
  • IPv6: 128-битный адрес (например, 2001:db8::1). Решает проблему нехватки IPv4-адресов.

При программировании сетевых приложений на C++ (с использованием сокетов Berkeley или библиотек вроде Boost.Asio) мы постоянно работаем с IP-адресами для привязки сокетов и установки соединений.

// Пример: создание TCP-сокета и привязка к конкретному IP-адресу (упрощённо, на основе POSIX-сокетов)
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <cstring>

int create_server_socket(const char* ip_address, uint16_t port) {
    int server_fd = socket(AF_INET, SOCK_STREAM, 0);
    struct sockaddr_in address;
    address.sin_family = AF_INET;
    address.sin_port = htons(port);
    // Преобразование строки с IP в бинарный формат
    inet_pton(AF_INET, ip_address, &address.sin_addr);

    // Привязка сокета к IP и порту
    bind(server_fd, (struct sockaddr*)&address, sizeof(address));
    listen(server_fd, 5);
    return server_fd;
}
// Использование: create_server_socket("192.168.1.100", 8080);

Таким образом, IP-адрес — это фундаментальный элемент, позволяющий любому сетевому коду на C++ взаимодействовать с другими устройствами в мире.