ページ

2010年5月15日土曜日

UbuntuOnVMWareとXPでのTCP接続障害

0 件のコメント:
忘れないうちにメモを。

UbuntuOnVMWare+Apache2を構築して、Ubuntu側からlocalhostアクセスしたら普通に見れる。
けど、ホストOSであるWinXP側から見ようと思っても見れなかった。

VMWareからインターネットのアクセスは出来る。
XPのインターネットアクセスももちろん出来る。
このことから、ホストOS・ゲストOS共に外部へのTCP接続は出来ているということ。ブリッジできている。
一応ネットワークアダプタのフィルタリングも確認したけど、特にフィルタで引っかかってるとかいうワケではなさそうだった。

また、
VMWare⇔XPの間でのPingは相互で通る。仮想OSとの間でネットワークが不通になっているとかいうわけではなさそう。

この辺で、パケットキャプチャをして分析するしかなさそうだったので、しぶしぶWireSharkをインストール。
VMWareとXPの間でのパケット通信だけをキャプチャする。

すると、どうも一番最初の3WAYハンドシェイクはうまく通っているものの、その次のTCPのレベルでのハンドシェイクで失敗し、ReTransmissionが多発していた模様。パケットの方向はXP→VMWare。
VM側でのTCP接続が禁止されているわけではなさそうなので、VM側のフィルタリングを調べても意味がなさそうだ。
正直お手上げ気味だったので、片っ端から思いつく単語でグーグル先生に聞いて回ったところ、

VMwareでbridge時のみHostとGuest間が通信NG

という記事を発見。僕と全く同じ現象になってる!
なになに…ネットワークドライバの設定を弄ると直りました…と。ふむ。
使ってるNICの種類が違うようだが、まあ真似してみるかということで、僕もCheckSumOffloadをDisabledにして再起動してみた。
普通に繋がるようになった。

無事に解決したはいいが、どうにも原因がはっきりしないことには気持ちが悪い。チェックサムオフロードってなんだよ?
調べたところ、どうもTCP/IPプロトコルにおけるチェック機能を、NICでやっちまおうってな機能らしい。ネットワーク通信でのオーバーヘッドをNICで担当。
描画レンダリング処理をGPUだけじゃなくCPUでもやってあげようってなノリかな。
とにかくそれが働いていたおかげで、ネットワーク処理におけるCPUの負荷は軽減されていたけど、仮想OSとの通信に障害が出ていたというわけらしい。どういう障害が出ていたのか…までは流石にわからない。