アプリ版:「スタンプのみでお礼する」機能のリリースについて

TCPヘッダのチェックサム算出方法について
1.算出方法はIPヘッダと一緒か?

2.一緒なら
unsigned short CalcCheckSum(unsigned short*lpData,/* (in)チェックサム算出文字列の先頭アドレス */
intiDataLen)/* (in)チェックサム算出文字列長 */
{
unsigned longlCheckSum = 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.オプションが追加されるときはそこも算出対象になるのか?教えていただけないでしょうか?
よろしくお願いします。

A 回答 (3件)

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



参考URL:http://www.f4.dion.ne.jp/~adem/rfc/rfc793.euc.txt
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/10/19 10:55

チェックサムの計算はRFCで決められています。


以下をキーワードに検索するといいと思います。

RFC1071:Computing the Internet Checksum
RFC1141:Incremental Updating of the Internet Checksum
RFC1624:Computation of the Internet Checksum via Incremental Update
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/10/18 21:28

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



チェックサムの計算方法は、「1の補数の和」の「1の補数」とあるのでIPと同じみたいです。
    • good
    • 1
この回答へのお礼

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

お礼日時:2004/10/18 21:26

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