OSI L3: Мережевий рівень (Network Layer)¶
Що таке мережевий рівень?¶
Мережевий рівень відповідає за логічну адресацію (IP) та маршрутизацію — знаходження шляху від джерела до призначення через різні мережі.
┌─────────────────────────────────────────────────────────────────┐
│ L2 = Локальна доставка (один сегмент) │
│ L3 = Глобальна доставка (між мережами) │
│ │
│ PC1 ─────▶ Router A ─────▶ Router B ─────▶ Server │
│ 10.0.1.5 10.0.1.1 8.8.4.1 8.8.8.8 │
│ 192.0.2.1 192.0.2.2 │
│ │
│ Роутери знаходять шлях на основі IP-адрес │
└─────────────────────────────────────────────────────────────────┘
PDU на L3: Пакет (Packet)¶
┌─────────────────────────────────────────────────────────────────┐
│ IP Packet │
├──────────────────────────────────┬──────────────────────────────┤
│ IP Header │ Data │
│ 20-60 bytes │ (L4 segment) │
└──────────────────────────────────┴──────────────────────────────┘
IPv4 Header¶
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
┌───────────────┬───────────────┬───────────────────────────────┐
│Version│ IHL │ DSCP │ECN│ Total Length │
├───────────────┴───────────────┼─────┬─────────────────────────┤
│ Identification │Flags│ Fragment Offset │
├───────────────┬───────────────┼─────┴─────────────────────────┤
│ TTL │ Protocol │ Header Checksum │
├───────────────┴───────────────┴───────────────────────────────┤
│ Source Address │
├───────────────────────────────────────────────────────────────┤
│ Destination Address │
├───────────────────────────────────────────────────────────────┤
│ Options (якщо IHL > 5) │
└───────────────────────────────────────────────────────────────┘
Важливі поля¶
| Поле | Розмір | Опис |
|---|---|---|
| Version | 4 біти | 4 для IPv4, 6 для IPv6 |
| TTL | 8 біт | Time To Live — кількість хопів |
| Protocol | 8 біт | 1=ICMP, 6=TCP, 17=UDP |
| Source IP | 32 біти | Адреса відправника |
| Destination IP | 32 біти | Адреса отримувача |
TTL (Time To Live)¶
Пакет з TTL=3:
PC ──[TTL=3]──▶ R1 ──[TTL=2]──▶ R2 ──[TTL=1]──▶ R3 ──[TTL=0]──▶ DROP!
│ │ │
TTL - 1 TTL - 1 TTL - 1
│
ICMP "Time Exceeded"
надсилається назад
Типові значення TTL:
- Linux: 64
- Windows: 128
- Cisco: 255
IP-адресація¶
IPv4 структура¶
192 . 168 . 1 . 100
┌────────┐ ┌────────┐ ┌────────┐ ┌────────┐
│11000000│.│10101000│.│00000001│.│01100100│
└────────┘ └────────┘ └────────┘ └────────┘
8 біт 8 біт 8 біт 8 біт
= 32 біти
Класи адрес (історичний підхід)¶
┌────────┬─────────────────────────────┬────────────────┬──────────┐
│ Клас │ Перший октет │ Діапазон │ Маска за замовч│ Хостів │
├────────┼──────────────┼─────────────┼────────────────┼──────────┤
│ A │ 0xxxxxxx │ 1-126 │ /8 │ 16M │
│ B │ 10xxxxxx │ 128-191 │ /16 │ 65K │
│ C │ 110xxxxx │ 192-223 │ /24 │ 254 │
│ D │ 1110xxxx │ 224-239 │ Multicast │ — │
│ E │ 1111xxxx │ 240-255 │ Reserved │ — │
└────────┴──────────────┴─────────────┴────────────────┴──────────┘
Сьогодні: Використовується CIDR (безкласова адресація)
Приватні адреси (RFC 1918)¶
┌─────────────────────────────────────────────────────────────────┐
│ 10.0.0.0/8 │ 10.0.0.0 – 10.255.255.255 │ 16M адрес │
│ 172.16.0.0/12 │ 172.16.0.0 – 172.31.255.255 │ 1M адрес │
│ 192.168.0.0/16 │ 192.168.0.0 – 192.168.255.255│ 65K адрес │
└─────────────────────────────────────────────────────────────────┘
Спеціальні адреси¶
| Адреса | Призначення |
|---|---|
| 0.0.0.0/8 | "This network" |
| 127.0.0.0/8 | Loopback (localhost) |
| 169.254.0.0/16 | Link-local (APIPA) |
| 224.0.0.0/4 | Multicast |
| 255.255.255.255 | Broadcast |
Маршрутизація¶
Routing Table¶
Кожен роутер має таблицю маршрутів:
┌─────────────────────────────────────────────────────────────────┐
│ Routing Table │
├───────────────────┬───────────────┬───────────────┬─────────────┤
│ Destination │ Gateway │ Interface │ Metric │
├───────────────────┼───────────────┼───────────────┼─────────────┤
│ 192.168.1.0/24 │ 0.0.0.0 │ eth0 │ 0 │
│ 192.168.2.0/24 │ 192.168.1.2 │ eth0 │ 10 │
│ 10.0.0.0/8 │ 192.168.1.3 │ eth0 │ 20 │
│ 0.0.0.0/0 │ 192.168.1.1 │ eth0 │ 100 │
└───────────────────┴───────────────┴───────────────┴─────────────┘
│
└── Default Gateway (маршрут за замовчуванням)
Логіка вибору маршруту¶
1. Longest Prefix Match (найбільш специфічний маршрут)
Пакет до 192.168.1.50:
✓ 192.168.1.0/24 ← Вибрано (більш специфічний)
✗ 192.168.0.0/16
✗ 0.0.0.0/0
2. Якщо однакова специфічність → менший Metric
Статична vs Динамічна маршрутизація¶
┌─────────────────────────────────────────────────────────────────┐
│ СТАТИЧНА │ ДИНАМІЧНА │
├──────────────────────────────────┼─────────────────────────────┤
│ Ручне налаштування │ Автоматичне оновлення │
│ Не змінюється │ Адаптується до змін │
│ Підходить для малих мереж │ Для складних топологій │
│ Менше навантаження │ Використовує ресурси │
│ │ │
│ Приклад: │ Протоколи: │
│ ip route add 10.0.0.0/8 │ - RIP (застарілий) │
│ via 192.168.1.1 │ - OSPF (найпопулярніший) │
│ │ - BGP (між провайдерами) │
│ │ - EIGRP (Cisco) │
└──────────────────────────────────┴─────────────────────────────┘
Приклад маршрутизації пакета¶
Пакет: 192.168.1.100 → 8.8.8.8
┌─────────────────────────────────────────────────────────────────┐
│ Крок 1: PC перевіряє — чи 8.8.8.8 в локальній мережі? │
│ 192.168.1.100/24 — ні, 8.8.8.8 не в 192.168.1.0/24 │
│ → Відправляємо на Default Gateway (192.168.1.1) │
│ │
│ Крок 2: Router 1 дивиться routing table │
│ 8.8.8.8 → next-hop 203.0.113.1 │
│ │
│ Крок 3: Router 2... і так далі до 8.8.8.8 │
└─────────────────────────────────────────────────────────────────┘
ICMP (Internet Control Message Protocol)¶
ICMP використовується для діагностики та повідомлень про помилки.
Типи ICMP повідомлень¶
| Type | Code | Опис |
|---|---|---|
| 0 | 0 | Echo Reply (ping відповідь) |
| 3 | 0 | Destination Unreachable - Network |
| 3 | 1 | Destination Unreachable - Host |
| 3 | 3 | Destination Unreachable - Port |
| 8 | 0 | Echo Request (ping запит) |
| 11 | 0 | Time Exceeded (TTL = 0) |
Ping¶
$ ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=12.3 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=11.8 ms
│ │ │
│ │ └── RTT (Round Trip Time)
│ └── TTL що залишився
└── Розмір відповіді
Traceroute¶
Використовує TTL для виявлення шляху:
$ traceroute 8.8.8.8
1 192.168.1.1 1.234 ms # TTL=1, перший роутер
2 10.0.0.1 5.678 ms # TTL=2, другий роутер
3 203.0.113.1 10.123 ms # TTL=3, третій роутер
4 8.8.8.8 12.345 ms # Досягли мети
Як працює:
┌─────────────────────────────────────────────────────────────────┐
│ TTL=1: PC → R1 (TTL=0, ICMP Time Exceeded) │
│ TTL=2: PC → R1 → R2 (TTL=0, ICMP Time Exceeded) │
│ TTL=3: PC → R1 → R2 → R3 (TTL=0, ICMP Time Exceeded) │
│ TTL=4: PC → R1 → R2 → R3 → 8.8.8.8 (ICMP Echo Reply) │
└─────────────────────────────────────────────────────────────────┘
NAT (Network Address Translation)¶
Навіщо потрібен NAT?¶
Проблема: IPv4 адрес недостатньо (4.3 млрд)
Рішення: NAT дозволяє багатьом приватним IP
використовувати одну публічну адресу
┌─────────────────────────────────────────────────────────────────┐
│ Приватна мережа │ Інтернет │
│ 192.168.1.0/24 │ │
│ │ │
│ PC1: 192.168.1.10 ─────┐ │ │
│ PC2: 192.168.1.20 ─────┼─┤ Router ├───▶ 203.0.113.1 ──▶ WWW │
│ PC3: 192.168.1.30 ─────┘ │ (NAT) (Публічна IP) │
│ │ │
│ Всі виходять в інтернет │ │
│ через одну публічну IP │ │
└─────────────────────────────────────────────────────────────────┘
Типи NAT¶
SNAT (Source NAT) / Masquerade¶
Вихідний трафік:
Оригінальний пакет: Після NAT:
┌─────────────────────┐ ┌─────────────────────┐
│ Src: 192.168.1.10 │ →→→ │ Src: 203.0.113.1 │
│ Dst: 8.8.8.8 │ │ Dst: 8.8.8.8 │
│ SrcPort: 54321 │ │ SrcPort: 12345 │
└─────────────────────┘ └─────────────────────┘
NAT таблиця:
┌─────────────────────┬─────────────────────┐
│ Internal │ External │
│ 192.168.1.10:54321 │ 203.0.113.1:12345 │
└─────────────────────┴─────────────────────┘
DNAT (Destination NAT) / Port Forwarding¶
Вхідний трафік (Port Forwarding):
Зовнішній запит: Після DNAT:
┌─────────────────────┐ ┌─────────────────────┐
│ Src: 1.2.3.4 │ →→→ │ Src: 1.2.3.4 │
│ Dst: 203.0.113.1:80 │ │ Dst: 192.168.1.10:80│
└─────────────────────┘ └─────────────────────┘
Правило: Порт 80 на публічній → 192.168.1.10:80
NAT в Linux (iptables)¶
# SNAT / Masquerade
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# DNAT / Port Forward
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.10:80
# Увімкнути forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward
NAT в MikroTik¶
# Masquerade
/ip firewall nat
add chain=srcnat out-interface=ether1 action=masquerade
# Port Forward
/ip firewall nat
add chain=dstnat protocol=tcp dst-port=80 action=dst-nat to-addresses=192.168.1.10
Фрагментація¶
Навіщо потрібна?¶
Різні мережі мають різний MTU (Maximum Transmission Unit).
MTU = 1500 bytes (Ethernet) MTU = 1400 bytes (VPN)
Пакет 1500 bytes ──────▶ VPN tunnel ──────▶ ???
│
Занадто великий!
│
▼
Фрагментація або Drop
Процес фрагментації¶
Оригінальний пакет (3000 bytes):
┌──────────────────────────────────────────────────────────────────┐
│ IP Header │ Data (2980 bytes) │
└──────────────────────────────────────────────────────────────────┘
Після фрагментації (MTU=1500):
┌───────────────────────────────┐
│ IP Header │ Data (1480 bytes) │ Fragment 1 (offset=0, MF=1)
└───────────────────────────────┘
┌───────────────────────────────┐
│ IP Header │ Data (1480 bytes) │ Fragment 2 (offset=185, MF=1)
└───────────────────────────────┘
┌───────────────────────────────┐
│ IP Header │ Data (20 bytes) │ Fragment 3 (offset=370, MF=0)
└───────────────────────────────┘
MF = More Fragments flag
offset = position / 8
Path MTU Discovery¶
# Знайти MTU шляху
ping -M do -s 1472 8.8.8.8
# -M do = don't fragment
# -s 1472 = розмір даних (1472 + 28 IP+ICMP = 1500)
# Якщо "Frag needed" — зменшити розмір
Обладнання L3¶
Router (Маршрутизатор)¶
┌─────────────────────────────────────────────────────────────────┐
│ ROUTER │
│ │
│ ┌─────────┐ ┌─────────────────────────┐ ┌─────────┐ │
│ │ Port 1 │ │ Routing Engine │ │ Port 2 │ │
│ │10.0.1.1 │ │ ┌─────────────────┐ │ │10.0.2.1 │ │
│ └────┬────┘ │ │ Routing Table │ │ └────┬────┘ │
│ │ │ │ 10.0.1.0/24→P1 │ │ │ │
│ │ │ │ 10.0.2.0/24→P2 │ │ │ │
│ │ │ │ 0.0.0.0/0→P2 │ │ │ │
│ │ │ └─────────────────┘ │ │ │
│ │ └─────────────────────────┘ │ │
│ │ │ │ │
│ LAN 10.0.1.0/24 CPU WAN/ISP │
└───────┴───────────────────────────────────────────────┴─────────┘
L3 Switch¶
┌─────────────────────────────────────────────────────────────────┐
│ L3 Switch = Switch + Router │
│ │
│ • Switching між портами (L2) — hardware, wire-speed │
│ • Routing між VLAN (L3) — hardware, fast │
│ │
│ Ідеально для: │
│ • Inter-VLAN routing │
│ • Великих LAN │
│ • Data centers │
└─────────────────────────────────────────────────────────────────┘
Діагностика L3¶
Linux команди¶
# Переглянути IP адреси
ip addr show
# Routing table
ip route show
# Перевірити з'єднання
ping 8.8.8.8
ping -c 4 192.168.1.1
# Traceroute
traceroute 8.8.8.8
# або
mtr 8.8.8.8 # інтерактивний
# ARP таблиця (зв'язок L2-L3)
ip neighbor show
# NAT таблиця (якщо є)
conntrack -L
# Статистика IP
netstat -s | head -50
MikroTik команди¶
# IP адреси
/ip address print
# Routing table
/ip route print
# Ping
/ping 8.8.8.8
# Traceroute
/tool traceroute 8.8.8.8
# NAT таблиця
/ip firewall connection print
Wireshark фільтри¶
ip.addr == 192.168.1.1 # Трафік з/на IP
ip.src == 192.168.1.100 # Тільки джерело
ip.dst == 8.8.8.8 # Тільки призначення
icmp # ICMP пакети
ip.ttl < 10 # Малий TTL
Типові проблеми та рішення¶
| Проблема | Симптоми | Діагностика | Рішення |
|---|---|---|---|
| Немає шлюзу | Локально OK, інтернет не працює | ip route |
Додати default route |
| Неправильна маска | Частина хостів недоступна | ip addr |
Виправити маску |
| NAT не працює | Немає інтернету за NAT | iptables -t nat -L |
Перевірити правила |
| MTU проблема | Великі пакети не проходять | ping -M do -s 1472 |
Зменшити MTU |
| TTL expired | Пакети зникають | traceroute |
Перевірити маршрути (петля?) |
| ICMP blocked | Ping не працює | Перевірити firewall | Дозволити ICMP |
IPv6 коротко¶
IPv4: 192.168.1.1 (32 біти)
IPv6: 2001:0db8:85a3:0000:0000:8a2e:0370:7334 (128 біт)
Переваги:
• Більше адрес (3.4×10³⁸)
• Вбудована безпека (IPsec)
• Спрощений header
• Немає NAT (в теорії)
Детальніше: див. статтю про IPv6
Підсумок¶
Мережевий рівень відповідає за:
- IP-адресацію — логічна ідентифікація пристроїв
- Маршрутизацію — знаходження шляху через мережі
- ICMP — діагностика та повідомлення про помилки
- NAT — трансляція приватних адрес в публічні
- Фрагментацію — адаптація до різних MTU
Див. також¶
- Модель OSI — огляд всіх рівнів
- Канальний рівень — попередній рівень
- Транспортний рівень — наступний рівень
- IPv4 — детальніше про адресацію
- Маршрутизація — детальніше про routing
Шлях: networking/basics/osi-3-network.md