Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Граница локальной сети офиса
Это вопрос о границе между локальной сетью (LAN) и глобальной сетью (WAN/Internet). Граница находится не в одном месте, а определяется несколькими точками и уровнями в сетевой инфраструктуре офиса.
Физическая граница
1. На уровне маршрутизатора (Router)
Маршрутизатор — самое важное устройство, определяющее границу:
┌─────────────────────────┬──────────────────────┐
│ ЛОКАЛЬНАЯ СЕТЬ (LAN) │ ИНТЕРНЕТ (WAN) │
│ (Private Network) │ (Public Network) │
├─────────────────────────┼──────────────────────┤
│ Компьютеры (192.168.*) │ ISP Router │
│ Принтеры │ Интернет-провайдер │
│ Камеры │ Мировая сеть │
│ Сервер офиса │ │
│ │ │ │
│ └─── Маршрутизатор (Border Device) ───┘
│ (192.168.1.1) │
│ │
└────────────────────────┴──────────────────────┘
Маршрутизатор выполняет ключевую роль:
- Разделяет локальную и глобальную сеть
- Преобразует приватные IP (192.168.x.x, 10.x.x.x) в публичные
- Фильтрует входящий трафик через NAT (Network Address Translation)
2. На уровне протокола
Локальная сеть использует протоколы:
- Ethernet (Layer 2)
- IP приватные адреса (192.168.0.0/16, 10.0.0.0/8, 172.16.0.0/12)
- ARP (Address Resolution Protocol)
- DHCP (Dynamic Host Configuration Protocol)
Глобальная сеть использует:
- Публичные IP адреса
- NAT (Network Address Translation)
- BGP (Border Gateway Protocol)
- VPN/IPSec для защиты
IP адресация
Приватные диапазоны (только в LAN)
10.0.0.0 — 10.255.255.255 (Class A)
172.16.0.0 — 172.31.255.255 (Class B)
192.168.0.0 — 192.168.255.255 (Class C)
Эти адреса не маршрутизируются в интернете. Любой офис может использовать одинаковые приватные IP.
// Проверка, приватный ли это IP адрес
bool isPrivateIP(const std::string& ip) {
uint32_t addr = inet_addr(ip.c_str());
// 10.0.0.0/8
if ((addr & 0xFF000000) == 0x0A000000) return true;
// 172.16.0.0/12
if ((addr & 0xFFF00000) == 0xAC100000) return true;
// 192.168.0.0/16
if ((addr & 0xFFFF0000) == 0xC0A80000) return true;
// 127.0.0.0/8 (Loopback)
if ((addr & 0xFF000000) == 0x7F000000) return true;
return false;
}
NAT (Network Address Translation)
NAT находится ровно на границе между LAN и WAN. Это механизм, преобразующий адреса:
Внутри офиса (LAN): Снаружи (Internet):
ПК: 192.168.1.100:5000 ──┐
│ Маршрутизатор
ПК: 192.168.1.101:5001 ──┤ с NAT
│ ┌──────────────────┐
Сервер: 192.168.1.50 ───┘ │ 203.0.113.1:5000
│ 203.0.113.1:5001
│ 203.0.113.1:80
└──────────────────┘
// Пример обработки NAT в коде
struct NATMapping {
uint32_t privateIP;
uint16_t privatePort;
uint32_t publicIP;
uint16_t publicPort;
time_t timeout;
};
class NATTranslator {
private:
std::map<std::pair<uint32_t, uint16_t>, NATMapping> mappings;
uint32_t publicIP;
uint16_t nextPort = 49152; // Dynamic port range
public:
NATMapping* translate(uint32_t privateIP, uint16_t privatePort) {
auto key = std::make_pair(privateIP, privatePort);
if (mappings.find(key) == mappings.end()) {
// Создаём новый маппинг
NATMapping mapping = {
.privateIP = privateIP,
.privatePort = privatePort,
.publicIP = publicIP,
.publicPort = nextPort++,
.timeout = time(nullptr) + 300 // 5 минут
};
mappings[key] = mapping;
}
return &mappings[key];
}
};
Firewall как граница
Firewall добавляет ещё один уровень границы:
┌──────────────────────────────────────┐
│ ЛОКАЛЬНАЯ СЕТЬ │
│ 192.168.1.0/24 │
│ ┌────────────────────────────────┐ │
│ │ Компьютеры, серверы, принтеры │ │
│ └────────────────────────────────┘ │
│ │ │
│ ┌─────▼─────┐ │
│ │ FIREWALL │←── Правила │
│ │ Filter │ фильтрации │
│ └─────┬─────┘ │
│ │ │
│ ┌─────▼──────┐ │
│ │ Router │ │
│ │ NAT │ │
│ └─────┬──────┘ │
│ │ │
└──────────────┼────────────────────────┘
│
ИНТЕРНЕТ (WAN)
Доступ к сетевым ресурсам
Из локальной сети
// Доступ к ресурсам по приватному IP
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server;
server.sin_family = AF_INET;
server.sin_port = htons(80);
inet_pton(AF_INET, "192.168.1.50", &server.sin_addr);
connect(socket_fd, (sockaddr*)&server, sizeof(server));
// Работает!
Из интернета
// Нельзя напрямую подключиться к 192.168.1.50 из интернета
inet_pton(AF_INET, "192.168.1.50", &server.sin_addr);
connect(socket_fd, (sockaddr*)&server, sizeof(server));
// Timeout — адрес недостижим из интернета
// Нужно использовать публичный IP и Port Forwarding
// 203.0.113.1:8080 → 192.168.1.50:80
inet_pton(AF_INET, "203.0.113.1", &server.sin_addr);
server.sin_port = htons(8080);
connect(socket_fd, (sockaddr*)&server, sizeof(server));
// Маршрутизатор переадресует на внутренний сервер
Практический пример сетевой архитектуры офиса
┌─ ОФИСНАЯ СЕТЬ ────────────────────┬─ ИНТЕРНЕТ ──────┐
│ │ │
│ ┌──────────────┐ │ ┌────────────┐ │
│ │ Компьютеры │ │ │ ISP Router │ │
│ │ 192.168.1.10 │ │ │ 203.0.113.1│ │
│ │ -100 │ │ └────────────┘ │
│ └──────┬───────┘ │ ▲ │
│ │ │ │ │
│ ┌──────▼──────┐ ┌─────────────┐ │ │ │
│ │ WiFi Point │ │ Сервер БД │ │ │ │
│ │ 192.168.1.5 │ │192.168.1.50 │ │ │ │
│ └──────┬──────┘ └────────┬────┘ │ │ │
│ │ │ │ │ │
│ ┌──────▼──────────────────▼────┐ │ │ │
│ │ КОММУТАТОР (Switch) │ │ │ │
│ │ Соединяет всё в сети │ │ │ │
│ └──────────┬───────────────────┘ │ │ │
│ │ │ │ │
│ ┌─────▼─────┐ │ │ │
│ │ Firewall │────────────────┼────────┼────────│
│ │ & NAT │ │ │ │
│ └─────┬─────┘ │ │ │
│ │ГРАНИЦА ЛАН/WAN │ │ │
├─────────────┼────────────────────────┼────────┼────────┤
│ │ │ │ │
│ ┌─────▼─────┐ │ │ │
│ │ Router │─────────────────┼────────┘ │
│ │WAN IP: │ │ │
│ │203.0.113.1│ │ │
│ └───────────┘ │ │
│ │ │
└────────────────────────────────────┴─────────────────┘
Как определить границу программно
#include <ifaddrs.h>
#include <arpa/inet.h>
#include <iostream>
void listNetworkInterfaces() {
struct ifaddrs *ifaddr, *ifa;
if (getifaddrs(&ifaddr) == -1) {
perror("getifaddrs");
return;
}
for (ifa = ifaddr; ifa != NULL; ifa = ifa->ifa_next) {
if (ifa->ifa_addr == NULL) continue;
if (ifa->ifa_addr->sa_family == AF_INET) {
struct sockaddr_in *sin = (sockaddr_in*)ifa->ifa_addr;
char ip[INET_ADDRSTRLEN];
inet_ntop(AF_INET, &sin->sin_addr, ip, INET_ADDRSTRLEN);
std::cout << "Interface: " << ifa->ifa_name << std::endl;
std::cout << "IP: " << ip << std::endl;
// Проверяем, приватный ли это IP
if (isPrivateIP(ip)) {
std::cout << " -> Локальная сеть (LAN)" << std::endl;
} else {
std::cout << " -> Интернет (WAN)" << std::endl;
}
}
}
freeifaddrs(ifaddr);
}
Резюме
Граница локальной сети офиса находится:
- На маршрутизаторе — физическое устройство, разделяющее LAN и WAN
- На уровне NAT — преобразование приватных IP в публичные
- На уровне Firewall — фильтрация трафика
- На уровне IP адресации — приватные адреса (192.168.x.x) vs публичные
- На протокольном уровне — локальные протоколы (ARP, DHCP) vs глобальные (BGP, DNS)
Практически: граница — это маршрутизатор с NAT и firewall, через которые проходит весь трафик между офисом и интернетом.