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

Ответ

В 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).

Ответ 18+ 🔞

Э, слушай, тут про широковещательные адреса в сетях. Ну, классика, ёпта, как старый добрый 255.255.255.255. Это типа крикнуть на всю деревню: "Эй, все мужики, слушайте сюда!" Всё, что в одной локальной сети, этот пакет получит. Просто и понятно, как дверь в сарае.

В коде на плюсах это выглядит как INADDR_BROADCAST. Берёшь структуру sockaddr_in, настраиваешь, и главное — не забудь выставить опцию SO_BROADCAST на сокете! А то будет тебе хитрая жопа: отправляешь, а никто не слышит. Это как пытаться орать с завязанным ртом — доверия к такому коду ноль ебать.

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

Вот если эту строчку пропустишь — всё, накрылся медным тазом, широковещание не взлетит. Подозрение ебать чувствую, что многие об это спотыкаются.

А теперь самое интересное — IPv6. Там, бля, эти умники решили, что широковещание — это несовременно. Вместо него теперь многоадресная рассылка, или multicast. Это уже не "эй, все!", а "эй, все, кто в клубе любителей пива!". Более точечно, что ли.

Например, адрес ff02::1 — это как раз для "всех узлов" в пределах одной линка, то есть локальной сети. Типа тот же широковещательный крик, но уже по-новому, с приставкой "мульти". Концепция, конечно, мощная, но иногда так и тянет сказать: "Ну зачем всё усложнили, ёперный театр!". Но что поделать, прогресс не остановить. Главное — в коде не перепутать, а то будет тебе не хиросима, а настоящий нигерсраки с пакетами.