UDP检验和的回卷是什么意思?
发布网友
发布时间:2022-04-30 07:33
我来回答
共5个回答
热心网友
时间:2022-06-19 03:21
UDP的校验和需要计算UDP首部加数据荷载部分,但也需要加上UDP伪首部。
这个伪首部指,源地址、目的地址、UDP数据长度、协议类型(0x11),协议类型就一个字节,但需要补一个字节的0x0,构成12个字节。
伪首部+UDP首部+数据 一起计算校验和。
在抓包实验中,也发现过在Linux系统下UDP检验和仅计算在UDP首部的情况,没具体分析是否包含了伪首部,但是肯定没计算数据。在windows系统的接收端上用wireshark抓包,发现校验和是对的。
UDP检验和的计算方法是:
1.按每16位求和得出一个32位的数;
2.如果这个32位的数,高16位不为0,则高16位加低16位再得到一个32位的数;
3.重复第2步直到高16位为0,将低16位取反,得到校验和。
较难和的计算,帖个代码。自己组了个码流,同时也从抓包中把UDP的码流和伪首部直接写到数组里了,两个相互比较,只是为了做个验证。代码也就没有写得那么通用。
当然,要注意的是,算出来的这个校验和是主机序的,如果要跟抓包中的校验和相比较,转成网络序再对比。
热心网友
时间:2022-06-19 03:22
就是把溢出的最高位1和低16位做加法运算。例如:原本是(1)0100101011000001,回卷就是0100101011000001+1=0100101011000010
热心网友
时间:2022-06-19 03:22
把前面多出去的1加到最后
热心网友
时间:2022-06-19 03:23
将溢出的位(最高位)截掉变成16位,再将这个溢出位加上,即本来
10111 01110 110101
+
10001 11100 001100
=
101001 01011 000001
回卷后为
01001 01011 000001
+
1
=
01001 01011 000010
热心网友
时间:2022-06-19 03:23
个人感觉是不是把最高位的1加到最低位(刚开始学,不过按照这个逻辑答案算出来是对的,大家有看法可以提~~)