На самом деле, у меня есть два связанных вопроса.
Я собираю отфильтрованный сетевой трафик с помощью 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.