Сподіваюсь ви в безпеці, а кава вже вариться, бо без неї TCP точно не зрозуміти)
Ну що??
Протоколи для QA - TCP
Якщо WebSocket - це вже “живий” канал, то TCP це, грубо кажучи, те шосе, по якому він взагалі їздить.
TCP - це базовий транспортний протокол, який забезпечує
надійну доставку даних між двома точками.
Коли вам кажуть “REST працює поверх HTTP, а HTTP поверх TCP” - це саме про нього.
Що я маю вам сказать!
Багато ваших "дивних" багів, типу
«час від часу падає запит», «перші пакети не доходять», «раптовий time-out»
- це не про бекенд.
Це про TCP-механіку.
Як взагалі той TCP працює, якщо коротко)
Handshake - і 3 кроки для встановлення з'єднання
SYN → SYN-ACK → ACK
Якщо десь тут все зависає - клієнт навіть не почав говорити з сервером.
Далі Segmentation & Reassembly
Дані ріжуться на сегменти й збираються на другому боці.
Якщо є втрати - буде повторна передача (retransmission) і це він гарантує
Потім Flow control
Сервер каже “повільніше, я не встигаю”.
Клієнт регулює швидкість.
ну і як же без Congestion control
У мережі тісно - TCP автоматично зменшує швидкість.
Саме через це іноді падає перший запит після простою.
ну і я вже расказував више вам про Keep-alive
Якщо довго нема даних - TCP може тримати з’єднання “напівживим”.
Не плутати з WebSocket ping/pong - це рівнем нижче.
Найчастіше проблеми це, Запити “висять” → це може бути проблема з handshake
- Часткові респонси або розрив з’єднання → drop сегментів
- Перший запит після idle - завжди довший → congestion window
- ну і Рандомні timeouts → firewall блочить SYN-ACK або фінальні ACK
- і Непослідовність подій у real-time сервісах → затримки в сегментах
тестувати TCP принцепі просто?
В ЮА ви цього не побачите, може побачити але складно(
Але КУА повинен вміти перевірити трафік:
1) Чи порт взагалі слухає:
nc -vz host 8080
2) Подивитись, чи SYN/ACK доходить:
tcpdump -i eth0 port 8080 -w trace.pcap
3) Аналіз у Wireshark:
чи є повторні передачі (Retransmissions)
чи SYN не завис
чи RTT не надто великий
4) Перевірити маршрут:
traceroute host
Що я хочу донести до вас)
TCP - це фундамент.
Без розуміння його роботи дуже легко переплутати: де проблема у бекенді, де проблема у фронті, а де це просто мережа сказала:
“сьогодні я працюю так, як хочу”
І так, WebSocket, REST, gRPC - всі вони живуть поверх TCP.
І часто найглибші баги сидять саме тут.
Вроді все розповів :)
Наступним розберемо UDP - от там буде “без підтверджень, без гарантій, але дуже швидко”.
Всім гарного вечора і настрою.
Обняв! 🤗🤗🤗
