gpt4 book ai didi

Mixter 的 IP Checksum 功能的代码说明(C 和 Linux)

转载 作者:行者123 更新时间:2023-11-30 17:45:51 25 4
gpt4 key购买 nike

我正在阅读 Mixter 著名的有关原始 UDP 套接字的网络教程,在阅读源代码时,我对这个函数感到困惑:

     unsigned short     /* this function generates header checksums */
csum (unsigned short *buf, int nwords)
{
unsigned long sum;
for (sum = 0; nwords > 0; nwords--)
sum += *buf++;
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
return ~sum;
}

该函数传递了一个空字符数组:

    char datagram[4096];

其中应该“包含 ip header 、tcp header 和负载”。它还传递了一个整数“nwords”。该函数的调用方式如下:

    iph->ip_sum = csum ((unsigned short *) datagram, iph->ip_len >> 1);

其中“iph->ip_len”是 ip header 的总长度。我感到困惑的是数据报被转换为“(无符号短*)”的原因以及这会对字符数组产生什么影响。另外,我知道校验和算法是如何工作的,但我对实际代码以及为什么要完成每个步骤感到困惑。有人可以解释一下转换以及函数中每一行的作用吗?

这是教程:http://www.cs.binghamton.edu/~steflik/cs455/rawip.txt

最佳答案

What I am confused about is the reason why datagram is casted to (unsigned short *)

它被转换为 unsigned Short * 因为这是 csum() 所期望的类型。

and what effect this would have on a character array

它将被视为无符号短整型数组(指向第一个元素的指针),而不是 char 数组,这使得代码调用未定义的行为,因为它现在通过不兼容的指针类型访问对象,违反了严格的别名规则。

除此之外,当这个 csum() 函数 works 看起来正在工作时,它很可能读取 unsigned Short,由原始 char 数组的两个元素。

关于Mixter 的 IP Checksum 功能的代码说明(C 和 Linux),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19546138/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com