linux 分段模式下的校验和计算

最近笔记做到作业部落了,这个东西就留在 CSDN 了

linux 分段模式下的校验和计算

__u16 computeTCPChecksum(__u32 saddr, __u32 daddr, __u32 len , __u8 protocol){
    __u16 uNum1 = *((__u16*)&saddr);
    __u16 uNum2 = *((__u16*)&saddr + 1);

    __u16 uNum3 = *((__u16*)&daddr);
    __u16 uNum4 = *((__u16*)&daddr + 1);

    // 交换高低位
    uNum1 = htons(uNum1);
    uNum2 = htons(uNum2);
    uNum3 = htons(uNum3);
    uNum4 = htons(uNum4);
    __u32 sum = uNum1 + uNum2 + uNum3 + uNum4 + len + protocol;
    // 超过 0xFFFF 的 右移 16位 加上不超过 0xFFFF 的部分
    while(sum >> 16)
    {
        sum = (sum & 0xffff) + (sum >> 16);
    }
    // 累加和转换字节序并保留低位
    return (__u16) (htons(sum) & 0xFFFF);
}
if(!(skb_shinfo(skb)->nr_frags &&\
 (computeTCPChecksum(iph->saddr, iph->daddr, tot_len - iph_len, iph->protocol)\
  == tcph->check))) {

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值