Системное программирование С++ / Rust
14.10
Путь входящего сетевого пакета: остановки в ядре Linux.
𝐑𝐗 𝐪𝐮𝐞𝐮𝐞. Первая остановка - очередь сетевой карты (см. ethtool -l eth0);
𝐐𝐃𝐢𝐬𝐜. Приоритизация, модификация и многое другое возможно с помощью дисциплины очередей. Calico, Cilium и подобные ребята перехватывает пакеты именно здесь; 𝐈𝐧𝐩𝐮𝐭 𝐏𝐚𝐜𝐤𝐞𝐭 𝐐𝐮𝐞𝐮𝐞. Очередь перед сетевым стеком TCP/IP Linux.
Если пакет инициирует новое соединение 𝐒𝐘𝐍 𝐪𝐮𝐞𝐮𝐞. Очередь, где SYN-пакеты ожидают финального ACK от клиента; 𝐀𝐜𝐜𝐞𝐩𝐭 𝐪𝐮𝐞𝐮𝐞. Приложение через 𝗮𝗰𝗰𝗲𝗽𝘁() подтверждает, что соединение установлено - зеленый свет для обмена данными.
Если пакет относится к существующему соединению 𝐎𝐮𝐭 𝐎𝐟 𝐎𝐫𝐝𝐞𝐫 𝐪𝐮𝐞𝐮𝐞. При нарушении очередности (sequence number больше ожидаемого), пакет помещается в нее, до восстановления правильного порядка; 𝐑𝐞𝐜𝐯 𝐪𝐮𝐞𝐮𝐞. TCP-буфер сокета, из него приложение читает данные системным вызовом 𝗿𝗲𝗮𝗱().
еще контент в этом сообществе
еще контент в этом соообществе
Системное программирование С++ / Rust
14.10
войдите, чтобы увидеть
и подписаться на интересных профи