WiresharkでMTU超えの大きすぎるパケットがキャプチャーされてる!

Linux(CentOS on Let's note)上でRawソケットでキャプチャーをしていたら,64,294バイト(約64KB)とかMTUを軽く超えるパケットが送信されているのを発見!
いやいや,そんなバカな,と思いつつ,Wiresharkでも確認してみたらやっぱりありました.MTUを超えた大きなパケットが.
MTUを超えるサイズのパケットはIP層でフラグメントされてMTUサイズ以下にされるはずなのにおかしい.
RawソケットもWiresharkもIP層の下でパケットをキャプチャしているはずだから,フラグメント後のパケットをキャプチャーできるはずなのに・・・.
原因について,いろいろ調べてみると,分かりました.
「GSO(Generic Segmentation Offload)」でした.
パケットのフラグメントという,わりと重い処理をハードウェアであるNICにオフロードすることでCPU負荷を減らすあれです.


GSOが有効になっているかどうかは,ethtoolコマンドで確認できるようです.

$ ethtool -k eth0
Features for eth0:
rx-checksumming: on
tx-checksumming: on
scatter-gather: on
tcp-segmentation-offload: off
udp-fragmentation-offload: off
generic-segmentation-offload: on
generic-receive-offload: off
large-receive-offload: off
rx-vlan-offload: on
tx-vlan-offload: on
ntuple-filters: off
receive-hashing: off


試しに,
ethtool -K eth0 gso off
で,GSOをオフってみると,WiresharkのキャプチャーでのMTU超えのパケットがすっかりなくなった!
やったー!
GSOって,普通のノートPCのNICにもちゃんと実装されているもんなんですね.


--- 参考サイト ---
Seeing 25,000 byte packets in Wireshark Super packets Unleash Networks Blog
http://www.unleashnetworks.com/blog/?p=307

LinuxNICのオフロード機能のON/OFF - id:rx7(@namikawa)の技術メモ - 技術日記
http://tech.g.hatena.ne.jp/rx7/20130425/p1

【レポート】FreeBSD 10ギガビットネットワーク高速通信の秘密 (3) ハードウェアオフロードによる処理の高速化 | 開発・SE | マイナビニュース
http://news.mynavi.jp/articles/2008/10/29/bsdcon5/002.html