[ トップページ ]
DIY (日曜大工) とものづくり・実験:PC & ネットワーク の自作と実験, Web とインターネット:プロトコルとネットワーク

Realtek のインタフェースで間欠的に promiscuous mode による Ethernet 通信がとまるトラブル…

Linux の promiscuos mode でパケットをつくって通信をこころみると,いろいろ予期しないトラブルがおこる. きょう経験したのは,ずっと一様にパケットを送信し,通過させているにもかかわらず,間欠的にパケットがとおらなくなるという問題だ.

3 台のマシンを用意してから実験にとりかかれば,あるいは問題はおこらなかったのかもしれない. しかし,とりあえず最初は 1 台,つぎに 2 台のマシンでやろうとしたのが,そもそものまちがあなのかもしれない. 1 台のマシンに 4 個のネットワーク・インタフェースをとりつける. 全部 PCI にするとたりないので,一部は USB-Ether インタフェースにする. そのマシンから promiscuous mode のひとつのプログラムで送出した Ethernet パケットを,LAN ケーブルをループさせてそのマシンの第 2 のインタフェースにもどす. (勝手につくったへんなプロトコルではなくて,Wireshark がちゃんと認識できる Ethernet のパケットなのだ.) IP だとこんなことをすると通信できないが,non IP ならこれで (LAN カードのドライバなどがちゃんとできていれば) 通信できる.

もどってきたパケットをべつの promiscuous mode のプログラムで第 3 のインタフェースにそのまま転送する. それをふたたびループさせて第 4 のインタフェースにもどす. これで,第 1 と第 4 のインタフェース間でちゃんと通信できるかどうかをみる (各プログラムをテストする). これがうまくいかない.

しかたがないから第 4 のインタフェースにもどすかわりに他のマシンをつないでみる. しかし,それでもうまくいかない. なにがおこったかというと,一方向はちゃんとパケットがながれるのだが,反対方向はときどき数 10 秒間くらい通信がとまる. しばらくすると通信は再開する. そのとき,どこかにたまっていたパケットが最初は 10 個くらいつづけざまにながれる. そのあとしばらくはもっともらしく通信して,またとまる. これをずっとくりかえすのだ. よくみるとパケットのペイロードの内容もかわっている. もしかすると Ethernet フレームに指定した type 0x88b5 がいけないのかもしれない. そうでなければペイロードがかきかえられるなんてかんがえられない.

いろいろしらべてみると,Realtek の RTL8169 という石をのせたギガビット・イーサのカードがわるいらしい. ほかのインタフェースはちゃんとパケットをとおしてくれる. 0x88b5 というタイプは IEEE 802.1 Local Experimentl Ethertype 1 ということになっているので,つかってもよさそうなのだが,すくなくともこのカードではつかえないらしい. それが真の原因かどうかはまたいろいろしらべまわらなければならないので,とりあえずこのカードが原因だとわかったところで調査をとめた. とりあえず,ほかのカードをつかうことにする. ギガビットである必要はないのだ.

関連項目 (2012-9-22 追記):

キーワード:

トラックバック

このエントリーのトラックバックURL:
https://www.kanadas.com/mt/mt-tb.cgi/5629

コメントを投稿

Google でブログを検索:

メインページアーカイブページも見てください.
Creative Commons License
このブログはつぎのライセンスで保護されています. クリエイティブ・コモンズ・ライセンス.
Powered by Movable Type