校验和函数

static int icmp_cksum(unsigned char *data, int len)

{
int nleft = len;
uint16_t *data_tmp = (uint16_t *)data;
int sum = 0;
uint16_t tmp = 0;

while(nleft > 1)
{
sum += *data_tmp++;
nleft -= 2;
}

if(nleft == 1)
{
*(uint8_t *)(&tmp) = *(uint8_t *)data_tmp;
sum += tmp;
}

sum = (sum >> 16) + (sum &0xffff);
sum += (sum >> 16);

tmp = ~sum;

return tmp;
}

时间: 2024-08-07 04:08:54

校验和函数的相关文章

校验和函数小析

今天在写TCP&UDP校验和的函数时,由于误解了TCP&UDP校验和的原理,所以一直计算不正确. 这篇文章可以说讲的非常清晰易懂了. 但是我看到博主最后抓包的情况,我也进行了抓包,我抓的包并没有TCP&UDP伪头部. 然后我以为TCP&UDP伪头部是IP选项而已,有的包有,有的包没有. 我就这样写了算法,然后不正确, 然后我直接抓了一个小包,进行手工的计算.还是不正确. 然后我才在百度上搜索伪首部的知识,得到如下结果: 伪首部(pseudo header),通常有TCP伪首

ip数据报首部校验和的计算

ip数据报首部校验和的计算 网络层间的数据传送特点是: 不可靠:    分组可能丢失,乱序等,不做确认: 无连接:    每个分组都独立对待: 尽力投递: 不随意放弃分组: 点到点. 因为在传输过程中会受到很多的干扰,ip数据包会发生改变,这时接受着收到这个ip数据包毫无意义.在这种情况下应把这样的数据包丢掉.那么怎样确定数据包发生了变化,这就用到了首部校验和.就是发送者把Ip首部的校验和外的数据全部相加再取反再放到校验和位置(如果高位有溢出的就把溢出数据加到低位).接收者只要把整个ip数据报首

使用Python计算IP、TCP、UDP校验和

1.1 ip校验和的计算 Ip校验是针对ip头部的,即仅校验ip头部,而对于ip数据部分的校验,则交由相应的四次协议来保证, ip 头部中校验和字段为16bit. 计算原理如下: 1.把校验和字段设置为0 2.计算ip头部中所有16bit的字之和 3.将2中得到的和按位取反,得到校验和. 1.2 tcp校验和的计算原理 对于ip层协议来说,其校验和只要计算ip头即可,那相对的,对于四层协议来说,其校验和则需要计算四层头部与四层数据. tcp校验需要将ip伪首部.tcp报头.tcp数据分为16位的

TCP及socket通信原理

一.网络互联模型 因特网在刚面世时,只有同一制造商生产的计算机才能彼此通信,制定网络互联模型的目的就是为异种的计算机互连提供一个共同的基础和标准框架,并为保持相关标准的一致性和兼容性提供共同的参考. 互联参考模型: OSI七层模型(Open System Interconnect):应用层.表示层.会话层.传输层.网络层.数据链路层.物理层 DoD四层模型:是OSI七层模型的浓缩版,包括 进程/应用层.主机到主机层.因特网层.网络接入层 以上两种模型是层次型的,分层模型的优点主要在于: ①将网络

6.22心得

http协议超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法.1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基.Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工

传输控制协议TCP

1.TCP简介 TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的.可靠的.基于字节流的传输层通信协议. TCP是运输层的重要协议,运输层是位于IP层之上,应用层之下的中间层.应用层向运输层发送用于网间传输的.用8位字节表示的数据流,然后运输层把数据流分区成适当长度的报文段.之后运输层把结果包传给IP层,由它来通过网络将包传送给接收端实体的运输层.为了保证不发生丢包,给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收.然后接收端实体对

Linux网络基础番外篇(IP、MAC、TCP)

linux网络管理 计算机网络 MACMAC(Media Access Control或者Medium Access Control)地址,意译为媒体访问控制.介质访问控制,或称为物理地址.硬件地址,用来定义网络设备的位置.在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC地址.因此一个主机会有一个MAC地址,而每个网络位置会有一个专属于它的IP地址.MAC地址(MAC Address)MAC(Medium/Media Access Control)地址,用来表示互联网上每一

TCP/IP基础知识

最近工作中需要自己在板卡植入TCP/IP协议栈,因为毕竟单片机性能有限,完整的TCP/IP协议栈很庞大,所以只能移植经过简化的,本来已成功将LWIP协议栈移植到项目板卡中,但老大说这个协议栈写得过于繁琐,特别是在内存管理这块,不容易理解,而且我们板卡对数据的准确性要求没那么高,重点要保证能通就行,偶尔丢失一两个包都没关系,所以按此需求自写协议栈,实现UDP以及Telnet通信,目前UDP已经实现,其余功能还在慢慢增加中,通过这段时间的研究发现实现UDP并不难,最主要是要把网络通信的一些基本概念知

linux网络管理初探

linux网络管理初探 既然说到linux的网络管理,先来简单了解一下OSI开放系统模型以及TCP/IP模型. OSI(Open System Interconnect),即开放式系统互联. 一般都叫OSI参考模型,是ISO(国际标准化组织)组  织在1985年研究的网络互联模型.该体系结构标准定义了网络互连的七层框架(物理层.数据链路层.网络层  传输层.会话层.表示层和应用层),即ISO开放系统互连参考模型.在这一框架下进一步详细规定了每一层的  功能,以实现开放系统环境中的互连性.互操作性