Я сомневаюсь, как необработанные сокеты внутренне управляются внутри ядра Linux.
Ссылаясь на эту статью Фреда Чоу, можно увидеть, что после определенногоПакет передается ядру, он обрабатывается несколькими блоками, реализующими сетевые протоколы, в зависимости от типа сокета, который был задан программистом.
Например, если было указано SOCK_DGRAM
, еслиЯ не ошибаюсь, что блоки протоколов UDP и IPv4 должны заботиться об управлении каждым пакетом.
Я сомневаюсь: что произойдет, когда программист использует сырые сокеты, особенно ETH_P_ALL
?
Полностью ли пропущены сетевые протоколы, и пакет напрямую передан с уровня сокетов на net_dev
?Или сетевой протокол все еще существует на пути, пройденном пакетом (связан с управлением Ethernet)?
Подключен к этому, где вычисляется контрольная сумма Ethernet, всегда принимая в качестве эталона схему Фреда Чоу?Я спрашиваю, потому что я заметил, что он не включен в такие структуры, как struct ether_header
, который используется в ETH_P_ALL
сокетах.
Заранее большое спасибо.