加入收藏 | 设为首页 | 会员中心 | 我要投稿 PHP编程网 - 黄冈站长网 (http://www.0713zz.com/)- 数据应用、建站、人体识别、智能机器人、语音技术!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux内核分析 - 网络[十三]:校验和

发布时间:2016-10-16 06:10:02 所属栏目: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++;     
}

(编辑:PHP编程网 - 黄冈站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读