Какие границы у локальной сети (LAN)?

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

Ответ

Границы локальной сети (LAN) определяются на нескольких уровнях:

1. Логические границы (IP-адресация):

  • Используются частные IP-диапазоны, не маршрутизируемые в глобальном интернете:
    • 10.0.0.0/8 (от 10.0.0.0 до 10.255.255.255)
    • 172.16.0.0/12 (от 172.16.0.0 до 172.31.255.255)
    • 192.168.0.0/16 (от 192.168.0.0 до 192.168.255.255)
  • Конкретная подсеть задаётся маской (например, 255.255.255.0 или /24).

2. Физические/топологические границы:

  • Ограничены зоной действия активного сетевого оборудования (коммутаторов, точек доступа).
  • Маршрутизатор (шлюз) обычно является границей между LAN и другими сетями (WAN, интернет).

3. Административные границы:

  • Определяются политиками сетевого администратора через правила брандмауэров, списки контроля доступа (ACL) и настройки маршрутизации.
  • VLAN (виртуальные LAN) позволяют создавать логические границы внутри одной физической сети.

Проверка в C++ (сырые сокеты / POSIX):

#include <arpa/inet.h>
#include <iostream>

bool is_in_subnet(const char* ip_str, const char* network_str, const char* netmask_str) {
    in_addr_t ip = inet_addr(ip_str);
    in_addr_t network = inet_addr(network_str);
    in_addr_t mask = inet_addr(netmask_str);

    return (ip & mask) == (network & mask);
}

int main() {
    // Проверяем, входит ли IP 192.168.1.5 в подсеть 192.168.1.0/24
    if (is_in_subnet("192.168.1.5", "192.168.1.0", "255.255.255.0")) {
        std::cout << "IP принадлежит локальной подсети.n";
    }
    return 0;
}