• ベストアンサー

TCPヘッダのチェックサムについて

通信エラーが発生し、 エラーが発生した時のパケットのTCPヘッダの チェックサムが"FFFF"だったのですが チェックサムで"FFFF"はありえるのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • ninoue
  • ベストアンサー率52% (1288/2437)
回答No.1

通信関係の規格は次で調べる事が出来ます。 http://www.rfc-editor.org/ ==>Official Internet Protocol Standard RFCs http://www.rfc-editor.org/rfcxx00.html "TCP" search: RFC# 793 3.1. Header Format "ffff" もありえます。 計算値が規格通りか、通常の正しく通信できた場合とエラーの場合と各々求めて確認してください。

kapibaraPG
質問者

お礼

"ffff"もありえるんですね! ありがとうございます。

その他の回答 (1)

回答No.2

これは、大昔から存在する、TCPのチェックサムに関する有名な問題です。 まず、TCPの仕様(RFC973)では、1. の方がおっしゃるように 0xffff というチェックサムはあり得ます。しかし、そのパケットについて、RFC793に従いチェックサム計算すると、計算の仕方によって 0xffff になったり、0x0000 になったりします。これは1の補数表現で、値0に限り 0xffff と 0x0000 の 2 つが存在するためです。つまり TCP の受信側は、チェックサム 0x0000 と 0xffff は同一視する必要があります。 多くのTCP実装では、自分が送信するTCPセグメントのチェックサムでは常に 0x0000 を生成するので、上記の事実を知らないで 0xffff をエラーとするものがいくつか存在するようです[1][2]。 [1] Juniperのファイアーウォール装置が、0xffffのチェックサムを不正パケットとみなす問題。Juniperはバグとして扱っています。 http://www.juniper.net/techpubs/software/management/idp/idp31/IDP_3.1r3_RN.pdf [2] Solaris 10 の例。Solaris9までは チェックサム 0x0000 を生成していたが、Solaris 10 から 0xffff のチェックサムを生成するようになったため[1] のようなバグのある機器との通信で問題となるという指摘があり、従来通り0x0000 を生成するように修正した。 http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6533773

kapibaraPG
質問者

お礼

大変参考になりました ありがとうございます。