Какой адрес используется для широковещательной передачи запросов в IPv4?

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

Ответ

В IPv4 для широковещательной передачи (broadcast) в пределах локальной сети используется специальный адрес 255.255.255.255. Этот адрес направляет пакет всем узлам в текущем сегменте сети.

В C++ при работе с сокетами для этого используется константа INADDR_BROADCAST:

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

// Создание адреса для широковещательной отправки
struct sockaddr_in broadcastAddr;
memset(&broadcastAddr, 0, sizeof(broadcastAddr));
broadcastAddr.sin_family = AF_INET;
broadcastAddr.sin_port = htons(12345); // пример порта
broadcastAddr.sin_addr.s_addr = INADDR_BROADCAST; // 255.255.255.255

Важно: Перед использованием широковещания на сокете необходимо установить соответствующую опцию:

int broadcastEnable = 1;
int result = setsockopt(socketFd, SOL_SOCKET, SO_BROADCAST, &broadcastEnable, sizeof(broadcastEnable));
if (result < 0) {
    // Обработка ошибки
}

В IPv6 концепция широковещания заменена на многоадресную рассылку (multicast). Например, адрес ff02::1 предназначен для всех узлов в локальной сети (link-local scope).