亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 7561 | 回復(fù): 8
打印 上一主題 下一主題

[C] tcp/ip首部校驗(yàn)和的算法 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2009-09-03 21:17 |只看該作者 |倒序?yàn)g覽
看了一個(gè)源代碼,里面有個(gè)關(guān)于tcp/ip首部校驗(yàn)和的算法,不太明白啊,望大家解釋下原理

tcp->check=check_sum((unsigned short *)tcp,sizeof(struct tcphdr));

unsigned short check_sum(unsigned short * addr, int len)
{
  register int nleft=len;
  register int sum=0;
  register short *w=addr;

  short answer=0;


  while(nleft>1)
          {
          sum=sum+*w++;
                  nleft=nleft-2;
  }
  if(nleft==1)
          {
             *(unsigned char *)(&answer)=*(unsigned char *)w;
                         sum=sum+answer;
  }

  sum=(sum>>16)+(sum&0xffff);//這里和以下幾行啥意思呢?
  sum=sum+(sum>>16);
  answer=~sum;
  return (answer);
}

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2009-09-03 21:53 |只看該作者
實(shí)際上求的是各個(gè)16位的反碼之和,采用的是反碼加法,即把所有16位數(shù)累加求和再取反

sum=(sum>>16)+(sum&0xffff); //高16位加上低16位

sum=sum+(sum>>16);  //執(zhí)行以上加法后,sum有可能在17位上有進(jìn)位,再把其加上

answer=~sum;  //對其取反,由于answer是16位數(shù),所以只取了sum取反的低16位

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2009-09-04 00:40 |只看該作者
原帖由 rollin7 于 2009-9-3 21:53 發(fā)表
實(shí)際上求的是各個(gè)16位的反碼之和,采用的是反碼加法,即把所有16位數(shù)累加求和再取反

sum=(sum>>16)+(sum&0xffff); //高16位加上低16位

sum=sum+(sum>>16);  //執(zhí)行以上加法后,sum有可能在17位上有進(jìn)位,再 ...


明白一些了,但為什么要把所有16位數(shù)累加求和再取反呢?

論壇徽章:
0
4 [報(bào)告]
發(fā)表于 2009-09-04 09:24 |只看該作者
溫馨提示:

TCP接受端進(jìn)行校驗(yàn)方法如下:把各個(gè)字節(jié)相加,結(jié)果會等于多少呢?

論壇徽章:
2
青銅圣斗士
日期:2015-11-26 06:15:59數(shù)據(jù)庫技術(shù)版塊每日發(fā)帖之星
日期:2016-07-24 06:20:00
5 [報(bào)告]
發(fā)表于 2009-09-04 10:41 |只看該作者
http://en.wikipedia.org/wiki/Checksum
Modular sum
A variant of the previous algorithm is to add all the "words" as unsigned binary numbers, discarding any overflow bits, and append the two's complement of the total as the checksum. To validate a message, the receiver adds all the words in the same manner, including the checksum; if the result is not a word full of zeros, an error must have occurred. This variant too detects any single-bit error, but the probability that a two-bit error will go undetected is a little less than 1/n.

論壇徽章:
0
6 [報(bào)告]
發(fā)表于 2009-09-04 12:32 |只看該作者
原帖由 OwnWaterloo 于 2009-9-4 10:41 發(fā)表
http://en.wikipedia.org/wiki/Checksum

如果字的所有位不是全部為零,則發(fā)生生錯(cuò)誤?是這樣理解?

論壇徽章:
1
2017金雞報(bào)曉
日期:2017-01-10 15:19:56
7 [報(bào)告]
發(fā)表于 2009-09-04 16:33 |只看該作者
學(xué)習(xí)下

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2009-09-04 23:26 |只看該作者
原帖由 culuckyabcd 于 2009-9-4 12:32 發(fā)表

如果字的所有位不是全部為零,則發(fā)生生錯(cuò)誤?是這樣理解?

同問

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2009-09-04 23:27 |只看該作者
原帖由 jxfengzi 于 2009-9-4 09:24 發(fā)表
溫馨提示:

TCP接受端進(jìn)行校驗(yàn)方法如下:把各個(gè)字節(jié)相加,結(jié)果會等于多少呢?


把各個(gè)字節(jié)相加?你啥意思呢,兄弟
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP