IP数据报只须要对数据头进行校验,步骤以下:git
上述第2步中也能够不用每次把进位加到低位,能够等全部数据计算结束再将高位16个字依次加到低位,直到最后结果是两个字节为止,例如全部数据相加后为0xb6e51c2a3,首先将其低位2个字节和剩余的高位字节相加0xB6E51+0xC2A3=0xC30F4,对获得的再次将低2个字节和剩余的高位相加:0x30F4+0XC=0X3100程序员
1、下面的图是一个UDP的检验和所须要用到的全部信息,包括三个部分:github
首先解释下伪首部的概念,伪首部的数据都是从IP数据报头获取的。其目的是让UDP两次检查数据是否已经正确到达目的地,只是单纯为了作校验用的。
还有一个概念十分重要,那就是16位UDP总长度,该长度是UDP头和数据的总长度。剩下的校验算法和IP数据报的校验方法一致了。 算法
举个例子来解释该校验方法: tcp
下面一段代码里的ChecksumTcpUdp()和ChecksumIp()能够用来检验以上步骤。各位程序员请自行用tcpdump截一段数据来检验一下。spa
https://github.com/CasperWu/Projects/tree/master/C%2B%2B/utility/srcblog