Linux内核分析 - 网络[十三]:校验和
发布时间:2016-10-08 04:34:16 所属栏目:Linux 来源:站长网
导读:副标题#e# 内核版本:2.6.34 报文的IP校验和、ICMP校验和、TCP/UDP校验和使用相同的算法,在RFC1071中定义,网上这方面的 资料和例子很多,就不解释算法流程了,而是侧重于在实现的变化和技巧。 The checksum algorithm is simply to add up all the 16-bit
保证计算的起始地址 是字节对齐 这里的对齐有16bit对齐和32bit对齐。起始地址是对齐是为了效率,比如起始地址是 奇数,那么累加时用16bit或32bit就很可能跨越一个int范围,即读一个数要两次内存操作;对齐后读一个数都只用一次内存操 作。 如果不是偶数字节,则odd=1,处理掉第一个字节,使超地址变成偶数。 odd = 1 & (unsigned long) buff; if (odd) { #ifdef __LITTLE_ENDIAN result += (*buff << 8); #else result = *buff; #endif len--; buff++; } (编辑:淮北站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |