udp首部校验和字段(udp校验和计算)

      最后更新:2023-10-08 00:49

      如何计算UDP/TCP检验和checksum

      如何计算UDP/TCP检验和checksum一、下面的图是一个UDP的检验和所需要用到的所有信息,包括三个部分: 1.UDP伪首部 2.UDP首部 3.UDP的数据部分(切记不要遗漏该部分,否则就~吐血了~)首先解释下伪首部的概念,伪首部包含IP首部一些字段。其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯为了做校验用的。 还有一个概念十分重要,那就是16位UDP总长度,请注意该长度不是报文的总长度,而只是UDP(包括UDP头和数据部分)的总长度(之前就是因为这个概念没弄清楚,走了不少弯路,吐血~~)。二、计算检验和(checksum)的过程很关键,主要分为以下几个步骤: 1.把伪首部添加到UDP上; 2.计算初始时是需要将检验和字段添零的; 3.把所有位划分为16位(2字节)的字4.把所有16位的字相加,如果遇到进位,则将高于16字节的进位部分的值加到最低位上,举例,0xBB5E+0xFCED=0x1 B84B,则将1放到最低位,得到结果是0xB84C 5.将所有字相加得到的结果应该为一个16位的数,将该数取反则可以得到检验和checksum。三、事实胜于雄辩,还是举个例子来分析一下吧,该例子计算的是一个TCP的检验和(和UDP的算法一致) TCP计算检验和的报文结构如下所示: 抓包工具抓了一个TCP 的syn报文做研究,呵呵,下面就是整个报文:1.首先将检验和部分添零; 2.然后将TCP伪首部部分,TCP首部部分,数据部分都划分成16位的一个个16进制数; 3.将这些数逐个相加,记得溢出的部分加到最低位上,这是循环加法:0xc0a8+ 0x0166+……+0x0402=0x9b49 4.最后将得到的结果取反,则可以得到检验和位0x64B6按照上述步骤进行计算就可以得到检验和为0x64B6,大家也可以试试看 IP数据报只检验IP数据报的首部,但UDP检验的是把首部和数据部分一起都检验。
      如何计算UDP/TCP检验和checksum

      UDP计算校验和为什么要用1的补码

      UDP的校验和包括UDP首部和数据,方法是计算16位的二进制和,首先将校验 和字段(16位)置0,将每个16位的反码相加,若是奇数字节即最后未到16字节,则以0补充,结果存在校验和字段中,因接收端包含了之前的校验和,若传输 中没有任何差错,则接收端计算的校验和该为全1,否则有错。
      UDP计算校验和为什么要用1的补码

      计算机网络,UDP数据报的校验和字段是通过什么来校验源和目的IP的呢??

      其实这是一种加密技术用于对文件内容进行审计的方法,使用 精通读文件把文件读到内存中,再对文件内容作一个 MD5 校验得到一串密码,就是校验和。 补充:1、IP首部校验和字段是根据IP首部计算的校验和码,它不对首部后面的数据进行计算。ICMP、IGMP、UDP和TCP在它们各自的首部中均含有同时覆盖首部和数据校验和码。2、IP首部校验和计算:为了计算一份数据报的IP检验和,首先把检验和字段置为0。然后,对首部中每个16bit进行二进制反码求和(整个首部看成是由一串16bit的字组成),结果存在检验和字段中。当收到一份IP数据报后,同样对首部中每个16bit进行二进制反码的求和。由于接收方在计算过程中包含了发送方存在首部中的检验和,因此,如果首部在传输过程中没有发生任何差错,那么接收方计算的结果应该为全1。如果结果不是全1(即检验和错误),那么IP就丢弃收到的数据报。但是不生成差错报文,由上层去发现丢失的数据报并进行重传。3、TCP和UDP校验和计算(两者相同)校验和还包含—个96位的伪首标,理论上它位于TCP首标的前面。这个伪首标包含了源地址、目的地址、协议和TCP长度等字段,这使得TCP能够防止出现路由选择错误的数据段。这些信息由网际协议(IP)承载,通过TCP/网络接口,在IP上运行的TCP调用参数或者结果中传递。伪首部并非UDP数据报中实际的有效成分。伪首部是一个虚拟的数据结构,其中的信息是从数据报所在IP分组头的分组头中提取的,既不向下传送也不向上递交,而仅仅是为计算校验和。 这样的校验和,既校验了UDP用户数据的源端口号和目的端口号以及UDP用户数据报的数据部分,又检验了IP数据报的源IP地址和目的地址。(伪报头保证UDP和TCP数据单元到达正确的目的地址。因此,伪报头中包含IP地址并且作为计算校验和需要考虑的一部分。最终目的端根据伪报头和数据单元计算校验和以验证通信数据在传输过程中没有改变而且到达了正确的目的地址。
      UDP报头由4个域组成,其中每个域各占用2个字节,目标端口号,数据报长度,校验值
      通过12位的伪首部,《计算机网络 第5版》谢希仁 的P186、187有说明的。
      计算机网络,UDP数据报的校验和字段是通过什么来校验源和目的IP的呢??

      UDP伪首部的作用和怎么计算UDP的检验和?这个检验和是否涵盖伪首部内容?还是只是UDP数据包的内容?

      首先,要时刻谨记一个“伪”字,既然是“伪”首部,也就是假的,不仅是“假”首部,而且“假”到连地址空间都没有。也就是说伪首部是不占地址空间的,在实际传输中不存在这样的字段。只是在使用的时候把它拿出来一下。 其次,设置了伪首部,为了计算检验和!书中原话“其目的是让UDP两次检查数据是否已经正确到达目的地”,具体是那两次呢?我们注意伪首部字段:32位源IP地址、32位目的IP地址、8位协议、16位UDP长度。由此可知,第一次,通过伪首部的IP地址检验,UDP可以确认该数据报是不是发送给本机IP地址的;第二,通过伪首部的协议字段检验,UDP可以确认IP有没有把不应该传给UDP而应该传给别的高层的数据报传给了UDP。从这一点上,伪首部的作用其实很大。
      UDP伪首部的作用和怎么计算UDP的检验和?这个检验和是否涵盖伪首部内容?还是只是UDP数据包的内容?

      为什么IP数据报、TCP/UDP段中只有首部校验和,而以太网帧中是校验和?

      因为IP数据报每经过一个路由器,路由器都要重新计算校验和(一些字段,比如生存时间、片偏移等可能发生变化);不校验数据部分,主要是为了减少软件计算量。为什么只能靠软件计算呢?因为路由拿到的IP报是包含了数据链路层封装的(比如以太),而且又不能直接将以太封装(如MAC地址)去掉——还需要用MAC地址来查找和维护地址表呢,假设要求IP报校验和,需要先“掐头去尾”,且要将“头”和“尾”保留,计算IP净荷的校验和,再将“头”和“尾”装回去,这么复杂的过程难以用硬件实现。至于由此带来的数据部分的可靠性问题,可以交由上层的传输层、和下层的数据链路层去校验。 以太帧会校验整个帧,帧的头尾没有其他需要保留的封装,所以其CRC校验可交给数据链路层的收发器硬件去实现,对软件的计算量影响不大。
      TCP/UDP段 的校验和 包括首部和数据的。
      为什么IP数据报、TCP/UDP段中只有首部校验和,而以太网帧中是校验和?

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类