Предоставляется ли контрольная сумма Ethernet через AF_PACKET?

Как следует из этот вопрос, кажется, что контрольная сумма вычисляется и проверяется оборудованием Ethernet, поэтому маловероятно, что она должна генерироваться программным обеспечением при отправке кадров с использованием сокета AF_PACKET, как кажется здесь и здесь. Кроме того, я не думаю, что его можно получить из сокета или каким-либо простым способом, поскольку даже Wireshark не отображает его.

Итак, может ли кто-нибудь это подтвердить? Мне действительно нужно самому отправлять контрольную сумму, как показано в последних двух ссылках? Будет ли контрольная сумма создаваться и проверяться автоматически адаптером Ethernet?


person lvella    schedule 27.03.2013    source источник


Ответы (2)


Нет, CRC указывать не нужно.

При использовании пакетного сокета в Linux с использованием socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL) ) при отправке необходимо указать заголовок уровня 2. Это определяется struct ether_header в netinet/if_ether.h и включает целевой хост, исходный хост и тип. Последовательность проверки кадра не включена, равно как и преамбула, разделитель начала кадра или завершение. Они добавляются оборудованием.

person Hugh White    schedule 28.05.2015

В Linux, если вы упоминаете сокет (AF_PACKET, SOCK_RAW, htobe16 (ETH_P_ALL)) в аналогичном случае, вам не нужно рассчитывать контрольную сумму Ethernet, оборудование / драйвер сетевого адаптера сделает это за вас. Это означает, что вам нужно предложить весь кадр уровня канала данных, кроме контрольной суммы, прежде чем отправлять его в необработанный сокет.

person Hardy Feng    schedule 13.11.2013