• ベストアンサー

TCPヘッダのチェックサム算出方法

TCPヘッダのチェックサム算出方法について 1.算出方法はIPヘッダと一緒か? 2.一緒なら unsigned short CalcCheckSum(unsigned short* lpData, /* (in)チェックサム算出文字列の先頭アドレス */ int iDataLen) /* (in)チェックサム算出文字列長 */ { unsigned long lCheckSum = 0; while(iDataLen > 1) { lCheckSum += *lpData++; iDataLen -= 2; } if(iDataLen) { lCheckSum += *(unsigned char *)lpData; } lCheckSum = (lCheckSum & 0xFFFF) + (lCheckSum >> 16); lCheckSum = (lCheckSum & 0xFFFF) + (lCheckSum >> 16); return ((unsigned short)~lCheckSum); } でまちがいないか? 3.オプションが追加されるときはそこも算出対象になるのか?教えていただけないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • jun2004
  • ベストアンサー率42% (24/57)
回答No.3

これ参考になりませんか。

参考URL:
http://www.f4.dion.ne.jp/~adem/rfc/rfc793.euc.txt
sakaige32
質問者

お礼

参考になりました! 無事、プロトコルアナライザと同一のチェックサムを算出するプログラムを作ることができました。ありがとうございました。

その他の回答 (2)

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.2

チェックサムの計算はRFCで決められています。 以下をキーワードに検索するといいと思います。 RFC1071:Computing the Internet Checksum RFC1141:Incremental Updating of the Internet Checksum RFC1624:Computation of the Internet Checksum via Incremental Update

sakaige32
質問者

お礼

回答ありがとうございます。教えていただいた部分をさがしてみます。

  • jun2004
  • ベストアンサー率42% (24/57)
回答No.1

実際に作った事は無いのですが、手元の本を要約すると、TCPヘッダのチェックサムは、TCPヘッダの前に付く96ビットの擬似ヘッダ(始点、終点アドレス、プロトコル識別子、TCPのセグメント長)とTCPヘッダおよびデータを計算対象に含むとあります。 チェックサムの計算方法は、「1の補数の和」の「1の補数」とあるのでIPと同じみたいです。

sakaige32
質問者

お礼

回答ありがとうございます。 擬似ヘッダ(始点、終点アドレス、プロトコル識別子)は検討がつくのですが、TCPのセグメント長ってIPヘッダの中にあるのでしょうか?

関連するQ&A

専門家に質問してみよう