反码算术运算求和(计算机网络的一个习题求解,解答看不懂,题目和解答如下!关于首部检验和的计算)

本文目录
- 计算机网络的一个习题求解,解答看不懂,题目和解答如下!关于首部检验和的计算
- 二进制反码求和的计算方法
- 反码算术运算求和
- udp计算校验和的方法按二进制反码求和怎么算
- 二进反码求和,说,最高位若产生进位则结果要加1,想请问,若最高位产生的进位是2,结果还是末尾加1吗
- 二进制反码求和是怎样求的
计算机网络的一个习题求解,解答看不懂,题目和解答如下!关于首部检验和的计算
首部检验的方法是,吧首部分成一些16字的序列,将首部检验置0,然后对这些序列进行反码算数运算。求出来的这个和的反码放入首部检验位(16位)。收到数据报时进行检验:就是把首部再反码求和一遍,然后再取反码,这时应该得到0。
所以说前五行就是首部的前五行。
然后接下来的五行就是,换算成2进制的序列。
将这些序列16位的取反码合(包括和检验字段)得出来首部检验和发送前的值。
0111010001001110
然后再取反码放入首部检验位
1000101110110001
没有算,不过算出来应该就是这样。
反码求和时最高位相加产生进位的话结果要+1.
二进制反码求和的计算方法
IP/ICMP/IGMP/TCP/UDP等协议的校验和算法都是相同的,算法如下:
在发送数据时,为了计算IP数据包的校验和。应该按如下步骤:
(1)把IP数据包的校验和字段置为0;
(2)把首部看成以16位为单位的数字组成,依次进行二进制反码求和;
(3)把得到的结果存入校验和字段中。
在接收数据时,计算数据包的校验和相对简单,按如下步骤:
(1)把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段;
(2)检查计算出的校验和的结果是否等于零(反码应为16个0);
(3)如果等于零,说明被整除,校验和正确。否则,校验和就是错误的,协议栈要抛弃这个数据包。
所谓的二进制反码求和,即为先进行二进制数取反,然后求和,如果最高位进一,则保存到最低位即可。
计算对IP首部检验和的算法如下:
(1)把IP数据包的校验和字段置为0;
(2)把首部看成以16位为单位的数字组成,依次进行二进制求和(注意:求和时应将最高位的进位保存,所以加法应采用32位加法);
(3)将上述加法过程中产生的进位(最高位的进位)加到低16位(采用32位加法时,即为将高16位与低16位相加,之后还要把该次加法最高位产生的进位加到低16位)
(4)将上述的和取反,即得到校验和。
反码算术运算求和
不是,是把里面的数据按照16位依次取出,然后按照反码算数运算求和,也就跟正常加法一样,只不过如果最高位有进位则最终结果要加一,然后再求其反码即可
udp计算校验和的方法按二进制反码求和怎么算
把二进制的反码先写出来,就是每一位取反,之后逐位相与,只有两个1结果才为1,算出来以后要是0就是错的,1就是对的
二进反码求和,说,最高位若产生进位则结果要加1,想请问,若最高位产生的进位是2,结果还是末尾加1吗
二进制求和进位不可能是2!设正在运算的是第i位,要产生进位有二种情况,第一种情况是次低位i-1位产生进位,分两类:1 + 1(低位的进位1) = 1(带进位1); 1 + 0 (低位的进位1)= 0 (带进位1); 1 与 0 对调一样。第二种情况是次低位没有进位,只能是1 + 1 = 0(带进位1)
二进制反码求和是怎样求的
算法实现:
unsigned short ip_fast_csum(unsigned char * iph,
unsigned int ihl)
{
unsigned int sum;
__asm__ __volatile__(
"movl (%1), %0 ;\n"
"subl , %2 ;\n"
"jbe 2f ;\n"
"addl 4(%1), %0 ;\n"
"adcl 8(%1), %0 ;\n"
"adcl 12(%1), %0 ;\n"
"1: adcl 16(%1), %0 ;\n"
"lea 4(%1), %1 ;\n"
"decl %2 ;\n"
"jne 1b ;\n"
"adcl , %0 ;\n"
"movl %0, %2 ;\n"
"shrl , %0 ;\n"
"addw %w2, %w0 ;\n"
"adcl , %0 ;\n"
"notl %0 ;\n"
"2: ;\n"
: "=r" (sum), "=r" (iph), "=r" (ihl)
: "1" (iph), "2" (ihl)
: "memory");
return(sum);
}
扩展资料
二进制反码求和工作原理 :
0和0相加是0,但要产生一个进位1,0和1相加是1,1和1相加是0.若最高位相加后产生进位,则最后得到的结果要加1。
(0)反 + (0)反 = 1 + 1 = 10
(1)反 +(0)反=0+ 1 =1
(1)反 + (1)反 = 0 + 0 = 0

更多文章:
teammate(teammate,company,partner)
2026年10月11日 06:10
javascript arraybuffer(javascript可以把base64编码转换成二进制代码吗求示例代码!)
2026年10月11日 04:00
text函数公式(excel中round和text函数的区别是什么)
2026年10月11日 03:50
google chrome打不开(chrome浏览器打不开怎么回事 浏览器打不开的处理方法)
2026年10月11日 02:00
websocket整合springboot(Springboot整合Websocket遇到的坑)
2026年10月11日 01:40
drawerlayout(android 怎样让drawerlayout设置的侧滑菜单的内容充满屏幕)
2026年10月10日 19:20
xor四位数怎么运算(单片机怎样用C语言实现4个数字间的异或)
2026年10月10日 17:50
perl数组中最多的元素(用perl实现,得到一个数组中重复次数最多的元素)
2026年10月10日 17:00


