Проверка контрольной суммы в UDP с использованием сокета UDP

Может ли сокет UDP (SOCK_DGRAM) получить доступ к полю контрольной суммы из входящего пакета UDP и проверить наличие ошибок? Я знаю, что мы можем сделать это с помощью сырых сокетов (SOCK_RAW), но я хочу знать, можем ли мы сделать это с помощью сокетов дейтаграмм. Если да, то как это сделать на C?

2 ответа

Если вы создаете обычный сокет UDP, у вас нет доступа к заголовку UDP и, следовательно, к контрольной сумме. Но ядро ​​уже отбрасывает пакеты с неправильной контрольной суммой, поэтому вы все равно не увидите эти пакеты.

Вы не можете сделать это с помощью сокетов датаграмм (SOCK_DGRAM), потому что стек TCP/IP удаляет эти байты заголовка UDP из полученного буфера перед передачей их API более высокого уровня. Вам нужно использовать необработанные сокеты (SOCK_RAW), чтобы эти байты сохранялись.

Другие вопросы по тегам