之前和室友去食堂的过程中,室友突然说起来udp的checksum计算问题。众所周知,udp需要加伪ip报头做校验和的计算,但是我们现在来关心一个小机制,这个机制使得校验和的计算能够适应大小端。
网络中的数据是按照大端模式,如果操作系统是小端模式怎么办?是不是应该取出数据之后先做字节反转,加完后再做字节反转换回来呢?事实上,在校验和设计的过程之中,其步骤就已经考虑到了这一点。
考虑两个数(高字节低字节由竖线分离开来)
x 1 , x 2 x_1,x_2 x1,x2
x 1 = α 1 ∣ β 1 x_1 = \alpha_1 | \beta_1 x1=α1∣β1
x 2 = α 2 ∣ β 2 x_2 = \alpha_2 | \beta_2 x2=α2∣β2
正常的加法如下
x 1 + x 2 = ( α 1 + α 2 ) ∣ ( β 1 + β 2 ) ( 1 ) x_1+x_2=(\alpha_1+\alpha_2)|(\beta_1+\beta_2)\quad (1) x1+x2=(α1+α2)∣(β1+β2