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