ゲストのOSは、Windows XP Professional SP3を使用し、ホストのOSは、Debian Linux Lennyを使用した。
VirtualBoxのバージョンは2.1.4で、ゲスト側ではGuest Additionsを実行している。
また、Wiresharkはゲスト側、ホスト側の両方で実行し、ログを取得している。
再現の手順は以下のとおりである。
1,BからAへメッセージを送信する。このときは特に問題が起きない。
2,すぐに、AからBへ返事を返す。このときも問題はない。
3,5分位待つ。
4,再び、AからBへ返事を返す。しかし、メッセージは送られない。
このとき、Wiresharkで様子を観察すると以下のようになる。
・ゲスト側
メッセージは正常に送信されていることになっていて、ACKが返ってきている。
No Time SrcAddr DstAddr Protocol Info
1397 652.706620 10.0.2.15 207.46.26.43 MSNMS MSG 134 U 99
1398 652.708407 207.46.26.43 10.0.2.15 TCP msnp > ansoft-lm-2 [ACK] Seq=436 Ack=725 Win=8760 Len=0
1399 653.574110 10.0.2.15 207.46.26.43 MSNMS MSG 135 N 127
1400 653.575529 207.46.26.43 10.0.2.15 TCP msnp > ansoft-lm-2 [ACK] Seq=436 Ack=867 Win=8760 Len=0
・ホスト側
メッセージは正常に送信されておらず、TCPによって再送信されている。
No Time SrcAddr DstAddr Protocol Info
5996 656.703663 192.168.0.5 207.46.26.43 MSNMS MSG 134 U 99
5997 657.452573 192.168.0.5 207.46.26.43 MSNMS [TCP Retransmission] MSG 134 U 99
5998 658.956576 192.168.0.5 207.46.26.43 MSNMS [TCP Retransmission] MSG 134 U 99
(注意:フレーム番号と時間がずれているが、ゲストとホストで実行しているタイミングが異なるため)
想定している挙動としては、ゲスト側でACKが返ってきているのであれば、ホスト側でもACKが返ってきているはずである。
しかし、実際にはホスト側でACKが表れることはなく、ゲスト側では送信されているはずの「MSNMS MSG 135 N 127」がホスト側で送信されていない。
よって、ゲストからホストの間のネットワーク通信の間で問題が起きていることが考えられる。
問題はというと、マイコン(SH/Tiny、SH7125)用のプログラムをHEWから新規に作成して、
SCI(Serial Communication Interface)とCMT(Compare Match Timer)を
同時に使用するとどっちかがおかしくなるというもの。
おそらく、SCIの方は問題はなくて、CMTの方が何かしらの問題を起こしていると思う。