> ПОСТЫ_ПО_#OSI

OSI модель — что разработчику реально нужно знать

УРОК #1: OSI модель — что разработчику реально нужно знатьНачинаем серию "Умнее собаки". Сегодня разберем OSI модель с точки зрения разработчика, а не сетевика. Без воды, только то, что пригодится в продакшене.⚠️ SPOILER: Вам нужно понимать только L3, L4 и L7. Остальное — проблемы DevOps.🔧 ЧТО РЕАЛЬНО ВАЖНО ДЛЯ РАЗРАБОТЧИКА:Layer 7: Application — ваш код живет здесь• HTTP/HTTPS, WebSocket, gRPC• REST API, GraphQL • Здесь ваши ошибки 400, 404, 500• Здесь же CORS, cookies, JWT токеныТипичные проблемы:- "405 Method Not Allowed" — забыли разрешить POST- "431 Request Header Too Large" — напихали в cookies мегабайт- "504 Gateway Timeout" — ваш endpoint тормозитLayer 4: Transport — TCP vs UDPTCP: socket.socket(AF_INET, SOCK_STREAM) — гарантированная доставкаUDP: socket.socket(AF_INET, SOCK_DGRAM) — скорость важнее надежностиКогда какой:- REST API, базы данных → TCP- Метрики, логи, DNS, игры → UDP- Video streaming → UDP (или QUIC)Layer 3: Network — IP адресация и роутингping api.service.com # ICMP, проверка L3telnet api.service.com 443 # проверка L3+L4curl -I https://api.service.com # проверка L3+L4+L7💀 РЕАЛЬНЫЕ КЕЙСЫ ИЗ ПРОДАКШЕНА:Case 1: "Почему тормозит API?"❌ for (let i = 0; i < 1000; i++) { await fetch('https://api.example.com/data') // новое TCP соединение}✅ const agent = new https.Agent({ keepAlive: true, maxSockets: 50 })Проблема: TCP handshake (L4) + TLS handshake = +100-200ms латенси на каждый запросCase 2: "Too many connections"❌ conn = psycopg2.connect(...) # не закрыли соединение✅ with psycopg2.connect(...) as conn: # автоматическое закрытиеПроблема на L4: исчерпание портов (max ~64K) и файловых дескрипторовCase 3: "CORS не работает"❌ Access-Control-Allow-Origin: localhost:3000✅ Access-Control-Allow-Origin: http://localhost:3000Проблема на L7: браузер блокирует из-за неправильных заголовков🔍 ОТЛАДКА ПО СЛОЯМ (снизу вверх):L3: ping 8.8.8.8 # есть сеть вообще?L4: nc -zv google.com 443 # порт открыт?L7: curl -v https://api.example.com # что отвечает сервер?Если ping работает, но curl не работает → проблема на L4-L7Если ping не работает → проблема на L1-L3 (зовите DevOps)📊 СТАТИСТИКА ПРОБЛЕМ В ПРОДЕ:• 40% — неправильные HTTP заголовки/методы (L7)• 30% — connection pool / таймауты (L4)• 20% — файрволы / security groups (L3-L4)• 10% — реальные сетевые проблемы (L1-L3)🐕 ПОДХОД СОБАКИ VS РАЗРАБОТЧИКА:Собака: Нюхает порт 443 → Работает/Не работает → Идет спатьРазработчик: Tcpdump → Wireshark → 3 часа анализа → "Забыл добавить localhost в CORS"🎯 ГЛАВНОЕ ЗА СЕГОДНЯ:1. OSI — 7 слоев, но вам нужны только 3: Network (L3), Transport (L4), Application (L7)2. Большинство проблем на L7 (ваш код) или L4 (соединения)3. Connection pooling решает 50% проблем производительности4. Если ping работает, но приложение нет — проблема в вашем коде5. Собака debuggit быстрее, потому что не усложняет📝 ДОМАШНЕЕ ЗАДАНИЕ:Запустите tcpdump -i any port 443 и откройте любой HTTPS сайт. Попробуйте найти:- TCP 3-way handshake (SYN, SYN-ACK, ACK)- TLS ClientHello- HTTP запрос (если повезет)Завтра: TCP vs UDP — почему ваш REST API использует протокол 1981 года с гарантиями доставки для запросов, которые вы все равно ретраите.#УмнееСобаки #OSI #NetworkingForDevs #L7Problems