В основе GIF-анимация, иллюстрирующая путь и остановки входящего сетевого пакета в ядре Linux.
Очереди в ядре Linux
* RX queue. Первая остановка: очередь сетевой карты (см.
ethtool -l eth0)* QDisc. Приоритизация, модификация и многое другое возможны с помощью дисциплины очередей. Calico, Cilium и подобные ребята перехватывает пакеты именно здесь (eBPF)
* Input Packet Queue. Очередь перед стеком протоколов.
📍Для новых соединений
* SYN queue. Очередь, где SYN-сегменты дожидаются ACK;
* Accept queue. Приложение через
accept()подтверждает, что соединение установлено - зеленый свет для обмена данными.📍Для уже установленных соединений
* Out Of Order queue. При нарушении очередности (sequence number больше ожидаемого), пакет помещается в нее, до восстановления правильного порядка;
* Recv queue. TCP-буфер сокета, из него приложение читает данные системным вызовом
read().———
Подробнее я описывал весь процесс в двух частях: один, два.
P.S. Кстати, поддержать канал теперь можно на Бусти или просто донатом!
#network #tcp #kernel
