diff --git a/PROBLEM-AND-SOLUTION.md b/PROBLEM-AND-SOLUTION.md index 254f5d3..231d89c 100644 --- a/PROBLEM-AND-SOLUTION.md +++ b/PROBLEM-AND-SOLUTION.md @@ -14,21 +14,20 @@ *Cilium — сетевая подсистема Kubernetes, отвечает за связь между подами на разных нодах. Geneve — протокол туннелирования, который Cilium использует чтобы «обернуть» обычный сетевой пакет для передачи через физическую сеть между серверами.* -```mermaid -flowchart LR - A["Под А
исходный пакет
1450 B"] --> G["Geneve-туннель
добавляет +50 B
итого 1500 B"] - G --> U["Underlay (канал)
реально 1450 B"] - U --> B["Под Б
пакет не доходит ✗"] - - style A fill:#e8f5e9 - style G fill:#fff3e0 - style U fill:#ffebee - style B fill:#ffebee +``` + Под А Geneve Канал +┌──────────┐ ┌─────────────────┐ ┌──────────┐ +│ │ │ │ │ │ +│ 1450 B │ ───► │ +50 B = 1500 B │ ───► │ 1450 B │ +│ │ │ │ │ │ +└──────────┘ └─────────────────┘ └────┬─────┘ + │ + ✗ НЕ ВЛАЗИТ ``` -> Ожидание Cilium: underlay = **1500** -> Реальность: underlay = **1450** ← провайдер дал меньше -> Geneve добавляет **50 байт** → **1500** не влазит в **1450** → TCP stall **51 секунда** +> Пакет вырос до **1500 B** — а дверь всего **1450 B**. +> ICMP «уменьши пакет» заблокирован — никто не предупредил. +> TCP ждёт ответа **51 секунду** и сдаётся. - Cilium соединяет ноды через **Geneve-туннель** - Geneve добавляет к каждому пакету **+50 байт** заголовков (Ethernet 14 + IP 20 + UDP 8 + Geneve 8)