Как отправлять пакеты размером более 1500 байт с помощью pcap_sendpacket?

На самом деле, у меня есть два связанных вопроса.

Я собираю отфильтрованный сетевой трафик с помощью libpcap в Debian. Затем мне нужно воспроизвести этот трафик на сервере Win2k3. Иногда я захватываю пакеты TCP и UDP, размер которых намного превышает 1500 байт (размер MTU по умолчанию для Ethernet). Например, 2000+ байт. Я не делал особых изменений размера MTU в этом Linux.Итак, вопрос №1:

В чем причина того, что эти пакеты намного превышают MTU по умолчанию? Jumbo-кадры ? В этой статье в Википедии говорится, что «сетевые интерфейсные карты, поддерживающие jumbo-кадры, требуют явной конфигурации для использования jumbo-кадров», но мне ничего не известно о такой конфигурации. Также ifconfig показывает мне «MTU: 1500». Может ли это быть как-то связано с техникой «объединения прерываний» (или «объединением прерываний», как в этой статье )? Могу ли я подавить такие пакеты?

Затем вопрос № 2:

Как я могу отправить такие пакеты с помощью pcap_sendpacket в Windows? Я получаю сообщение об ошибке «Ошибка отправки: Ошибка отправки пакета». для пакетов размером более 1500 байт. Кажется, я не могу использовать jumbo-кадры, потому что я отправляю данные непосредственно подключенному пользовательскому «сетевому крану», например, карте pci, и я не уверен, что смогу настроить его NIC. Что еще? Следует ли фрагментировать эти пакеты в соответствии с правилами протокола?

РЕДАКТИРОВАТЬ:

Проверена фрагментация NIC, как предложил Гай Харрис:

~# ethtool -k eth0
Offload parameters for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: off
udp-fragmentation-offload: off
generic-segmentation-offload: off
generic-receive-offload: off
large-receive-offload: off
ntuple-filters: off
receive-hashing: off

То же самое для eth1 и br0 - сетевой мост между eth0 и eth1 , который я нюхаю.

И я все еще получаю большие пакеты UDP.

9
задан Andriy Tylychko 16 February 2012 в 12:03
поделиться