Tcp、Udp 校验和与ip校验和的概念
来源:互联网 发布:搭建apache服务器性能 编辑:程序博客网 时间:2024/05/21 07:09
1.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位的字,然后进行累加(如果总长度为奇数个字节,则在最后增添一个位都为0的字节 ),最后对累加的和进行按位取反即可。
Ip伪首部包括源ip地址(4字节)、目的ip地址(4字节)、协议号(两字节)、tcp包长(2字节) ,共14字节。
1.3 udp校验和的计算原理
Udp校验与tcp校验基本上是一致的。
udp校验需要将ip伪首部、udp报头、udp数据分为16位的字,然后进行累加(如果总长度为奇数个字节,则在最后增添一个位都为0的字节 ),最后对累加的和进行按位取反即可。
Ip伪首部包括源ip地址(4字节)、目的ip地址(4字节)、协议号(两字节)、tcp包长(2字节) ,共14字节。
以上就是ip、tcp、udp的校验和的计算原理,如果是我们自己写相应的校验和函数,问题也不是太大,只要根据其计算原理即可。
2.linux中相应的接口函数
而在linux中,关于ip、tcp、udp的校验,都有相应的接口函数。
Ip校验和的计算接口函数为:
__inline__ void ip_send_check(struct iphdr *iph)
我们只要传递一个ip头部指针,即可计算该ip头部的checksum,并进行设置checksum操作。
而对于tcp、udp的校验和计算,由于多了一个ip伪首部、协议号、tcp/udp长度的计算,因此需要两个接口函数:
__wsum csum_partial(const void *buff, int len, __wsum sum)
__sum16 csum_tcpudp_magic (__be32 saddr, __be32 daddr, unsigned short len,
unsigned short proto, __wsum sum)
其中csum_partial是计算udp/tcp数据的checksum(即整个tcp或者整个udp头部与数据部分的校验和)
而csum_tcpudp_magic则是将ip伪首部、协议号、tcp/udp长度、以及上述csum_partial计算的udp/tcp数据的checksum,计算udp/tcp最终的checksum。
本文主要是记录tcp、udp、ip校验的原理,以及相应的接口函数,本身没有给出其校验和实现。
- Tcp、Udp 校验和与ip校验和的概念
- IP/UDP/TCP/ICMP的校验和
- IP/TCP/UDP校验和的计算
- IP,TCP,UDP,ICMP校验和的区别和计算
- icmp,tcp,udp,ip校验和
- IP、ICMP、UDP、TCP 校验和算法
- IP、ICMP、UDP、TCP 校验和算法
- IP、ICMP、UDP、TCP 校验和算法
- IP、ICMP、UDP、TCP 校验和算法
- IP ICMP TCP UDP 校验和
- IP、ICMP、UDP、TCP 校验和算法
- IP、ICMP、UDP、TCP 校验和算法
- IP、ICMP、UDP、TCP 校验和算法
- IP、ICMP、UDP、TCP 校验和算法
- 关于校验和(UDP,TCP,IP)
- IP、ICMP、UDP、TCP校验和算法
- IP、ICMP、UDP、TCP 校验和算法
- IP ICMP TCP UDP 校验和
- 求逆序数
- 利用CSS3实现图片旋转放大特效
- unity学习之面向对象技术核心之继承
- 【操作系统】【信号量】理发师问题
- 无间隙循环滚动
- Tcp、Udp 校验和与ip校验和的概念
- fog openstack 401 验证失败
- 机器学习&数据挖掘笔记_16(常见面试之机器学习算法思想简单梳理)
- 第15周总结
- Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
- JSON for java入门总结
- 《Machine Learning(Tom M. Mitchell)》读书笔记——13、第十二章
- 学生信息链表实现
- Restore IP Addresses