Tcp、Udp 校验和与ip校验和的概念


1.iptcpudp的校验和计算原理

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字节。

 

以上就是iptcpudp的校验和的计算原理,如果是我们自己写相应的校验和函数,问题也不是太大,只要根据其计算原理即可。 

 

2.linux中相应的接口函数

  而在linux中,关于iptcpudp的校验,都有相应的接口函数。

 

Ip校验和的计算接口函数为:

__inline__ void ip_send_check(struct iphdr *iph)

我们只要传递一个ip头部指针,即可计算该ip头部的checksum,并进行设置checksum操作。

 

而对于tcpudp的校验和计算,由于多了一个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

 

本文主要是记录tcpudpip校验的原理,以及相应的接口函数,本身没有给出其校验和实现。

 

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
IPTCPUDP校验和计算工具是计算机网络中用于检测数据传输错误的工具。 IP校验和是在IP协议中使用的一种检验机制,用于检测IP数据报在传输过程中是否发生错误。计算IP校验和的方法是将IP数据报中的每个16位字(包括头部和数据部分)相加,然后将结果取反。接收端在接收到IP数据报后也会计算校验和,若计算结果不一致,则说明数据传输中发生了错误。 TCP校验和是在TCP协议中使用的一种检验机制,用于检测TCP报文在传输过程中是否发生错误。计算TCP校验和的方法是将TCP报文中的每个16位字(包括头部和数据部分)相加,然后将结果取反。接收端在接收到TCP报文后也会计算校验和,若计算结果不一致,则说明数据传输中发生了错误。 UDP校验和是在UDP协议中使用的一种检验机制,用于检测UDP数据包在传输过程中是否发生错误。计算UDP校验和的方法是将UDP数据包中的每个16位字(包括头部和数据部分)相加,然后将结果取反。接收端在接收到UDP数据包后也会计算校验和,若计算结果不一致,则说明数据传输中发生了错误。 这些校验和计算工具的作用是保障数据在传输过程中的完整性,一旦检测到错误,就可以及时发现并进行错误处理,提高数据传输的可靠性和正确性。这在计算机网络中非常重要,尤其在数据的传输过程中经常存在着可能导致数据错误的噪声和干扰。通过使用IPTCPUDP校验和计算工具,可以有效降低数据传输错误带来的影响,保障数据的安全和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值