実際、私には2つの関連する質問があります。pcap_sendpacketで1500バイトを超えるパケットを送るには?
私は、フィルタリングされたネットワークトラフィックをDebianのlibpcapで取得しています。次に、このトラフィックをWin2k3サーバーで再生する必要があります。時には、TCPとUDPの両方のパケットをキャプチャして、1500バイト(イーサネットのデフォルトのMTUサイズ)よりもはるかに大きいものもあります。たとえば、2000バイト以上。私はそのLinux上でMTUのサイズを特に変更しなかった。そこで質問#1:
これらのパケットがデフォルトのMTUよりもずっと大きい理由は何ですか?Jumbo frames?このWikipediaの記事では、「ジャンボフレームを使用できるネットワークインターフェイスカードはジャンボフレームを使用するために明示的な設定が必要です」と述べていますが、このような設定についてはわかりません。またifconfig
は私に "MTU:1500"を示しています。それは何らかの形で "割り込み結合"技術(またはthis articleのような "割り込み合体")と関係がありますか?私はそのようなパケットを抑えることができますか?
その後、質問#2:
私はWindows上でpcap_sendpacket
することにより、このようなパケットを送信することができますどのように? 1500バイトを超えるパケットの場合にのみエラーメッセージ "send error:PacketSendPacket failed"が表示されます。私はジャンボフレームを使うことができないようだ.PCIカードのような直接接続されたカスタム "ネットタップ"にデータを送信しているので、NICを設定できるかどうかわからないからだ。ほかに何か?これらのパケットをプロトコルルールに従って断片化する必要がありますか?
はEDIT:ガイ・ハリスとして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パケットを受信します。
お使いのネットワークアダプタは、おそらくそう、TCPセグメンテーション/ desegmentationオフロードとIPフラグメンテーション/再組み立てオフロードを行っている
pcapはおそらく、あなたのワイヤパケットから1つのチャンクに分割されたデータグラムをつなぎ合わせています。あなたがイーサネットフレームを与え、パケットを転送しないように頼むことができるかどうか確認してください。 –
@NikolaiNFetissov:私はイーサネットフレームを受信しています –