プロが教えるわが家の防犯対策術!

おせわになっています。
現在、秋月のH8ボート3069+RTL8019ボードを使用して、TCP/IPの通信プログラムを作成して
いたます。
ボードはホスト側に成っています。


H8OS等は使用していません。

パケットの送受信も有る程度問題なく出来ていて、クライアントからの通信確立も出来ています。
データの送受信を行っているときに、1バイトデータ 0x02を送信使用としたら、一番下のような
エラーが出てきました。

1バイトデータで0x00、0x01、0x03等は問題なく送れています。
Wiresharkで取り込んだデータの一部分を掲載します。

又、エラーとして[Expert Info (Error/Malformed): Malformed Packet (Exception occurred)]と
表示されていますが、実際何が原因でエラーに成っているのかが判りません。

有る程度強引に合わせこんでデータを作っている部分も有るのですが、0x02のデータだけが
送れないというのが判りません。
データを見て頂き、判る方がいましたら教えてください。



[Calculated window size: 64240]
[Window size scaling factor: -2 (no window scaling used)]
Checksum: 0xd1b9 [validation disabled]
[Good Checksum: False]
[Bad Checksum: False]
[SEQ/ACK analysis]
[Bytes in flight: 1]
Data (1 byte)
Data: 03
[Length: 1]
VSS-Monitoring ethernet trailer, Source Port: 0
Src Port: 0
0000 00 40 45 32 27 35 02 00 03 cb 36 06 08 00 45 00
0010 00 29 fc d7 40 00 80 06 3d ac ac 14 64 00 ac 14
0020 04 22 29 04 06 42 65 62 b7 da 9e 32 35 28 50 10
0030 fa f0 d1 b9 00 00 03 00 00 00 00 00 00
              --- このデータは送れている。



Window size value: 64240
[Calculated window size: 64240]
[Window size scaling factor: -2 (no window scaling used)]
Checksum: 0x8254 [validation disabled]
[Good Checksum: False]
[Bad Checksum: False]
[SEQ/ACK analysis]
[Bytes in flight: 1]
[Malformed Packet: FMTP]
[Expert Info (Error/Malformed): Malformed Packet (Exception occurred)]
[Message: Malformed Packet (Exception occurred)]
[Severity level: Error]
[Group: Malformed]
VSS-Monitoring ethernet trailer, Source Port: 0
Src Port: 0
0000 00 40 45 32 27 35 02 00 03 cb 36 06 08 00 45 00
0010 00 29 fc d7 40 00 80 06 3d ac ac 14 64 00 ac 14
0020 04 22 29 04 09 2f 65 62 b7 da d1 ae 4f 24 50 10
0030 fa f0 82 54 00 00 02 00 00 00 00 00 00
              --- このデータは送れていない。

宜しくお願いします。

A 回答 (1件)

>又、エラーとして[Expert Info (Error/Malformed): Malformed Packet (Exception occurred)]と


>表示されていますが、実際何が原因でエラーに成っているのかが判りません。

ざっと見た程度ですが……。

>0010 00 29 fc d7 40 00 80 06 3d ac ac 14 64 00 ac 14
>0010 00 29 fc d7 40 00 80 06 3d ac ac 14 64 00 ac 14

IPヘッダのIdentificationが同じ値(0xd7fc)のIPパケットで問題ないのですか?
手元のSSHサーバに接続したときのモノ(SSHサーバからのもののみ)では…
Identification: 0x0000 (0)
=>3WayハンドシェークのSYNパケットの返答
Identification: 0xdb28 (56104)
=>ハンドシェーク完了後、SSHサーバが送信してきたウェルカムメッセージ
Identification: 0xdb29 (56105)
=>クライアントからのパケットに対するACK応答パケット
Identification: 0xdb2a (56106)
=>SSHサーバからのオプションなどのクライアントへの通知
というように値が更新されていってますが。

パケットがMTUなどによって分割された場合にIdentificationが同じ値になることはあるようですが、その場合はFlagsとFlagment Offsetで制御されるハズです。
が…Flags(ダンプだと0x0014の場所の上位3ビット)のビット1が1となっていますので「分割を許可していない」状態ですし、Flagment Offsetは同値の0番となっています。
よって受信側では「不正なIPパケット」として破棄しますから、その次のTCP処理まで進まないかと思われますが…そこのところどうでしょうか?

参考URL:http://www.itbook.info/study/p89.html

この回答への補足

Wr5 様

ご丁寧な回答有難うございます。

Identificationに関しては、プログラムでデータを増えるようにしましたが、やはり0x02の1バイトだけが送れません。

おそらく、お知らせ頂いた部分に何らかの不具合が有るだろうとは思いますので、もうしばらくプログラムの見直し等して見ます。

又なにか判りましたらお知らせ頂けると大変有りがたいです。

以上宜しくお願いします。

補足日時:2013/02/03 16:22
    • good
    • 0
この回答へのお礼

Wr5 様

有難うございました。
自己解決しました。

サーバー側からの送信信号しか見ていませんでしたが、クライアント側(Windows)から接続を確立し、その後0x02を送信させると同じ現象が発生しました。

その後リトライで再度0x02を送信するのですが、そのときにクライアントがkeepalive状態に成っていて、同じデータを送信していました。
この時には0x02をデータとして表示しています。
この事から、単独で0x02の1バイトを送信出来ないと判断しました。
参考文献を読まないといけないと思いますが、Windowsパソコンから送信して同じ結果に成っているので
そういうものだと判断しておきます。

今回は有難うございました。

お礼日時:2013/02/04 21:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!