标准IP数据包是否保证数据部分的正确性?

[问】标准IP数据包是否保证数据部分的正确性?

【答】IPv4数据包本身包含有头部校验信息,但并不包含数据部分的校验;UDP数据包包含16比特的数据部分校验。

16比特的校验理论上可以发现1/65536~1/1024的错误,即仍存在1/65536~1/1024的错误不会背发现。

检验和计算可能由网络网络驱动,协议驱动,甚至是硬件完成。例如:以太网传输硬件计算以太网循环容易校验,接受硬件验证这个校验。如果接受验证发现错误,Wireshark抓包工具将不会接收到这个包,以太网硬件会直接丢弃这个包。

高层校验通常是由协议执行,并将完成后的包转交给硬件。比较新的网络硬件可以执行一些高级功能,如IP检验和计算,这被成为checksum offloading。网络驱动不会计算校验和,只是简单将校验和字段留空或填入无效信息,交给硬件计算。但是一般来说,校验部分在协议栈进行,通过Wireshark抓包经常可以看到校验失败的情况。

参考链接:

http://man.lupaworld.com/content/network/wireshark/c7.7.html 

http://blog.gesha.net/archives/366/ 


【数据包的校验算法】

IP、ICMP、UDP和TCP报文头部都有校验和字段,大小都是16bit,算法也基本一样:

在发送数据时按如下步骤:

(1)把校验和字段置为0;

(2)把需校验的数据看成以16位为单位的数字组成,依次进行二进制反码求和;

(3)把得到的结果存入校验和字段中。

在接收数据时按如下步骤:

(1)把首部看成以16位为单位的数字组成,依次进行二进制反码求和,包括校验和字段;

(2)检查计算出的校验和的结果是否为0;

(3)如果等于0,说明被整除,校验是和正确。否则,校验和就是错误的,协议栈要丢弃数据包。

 

虽然上面四种报文的校验和算法一样,但在作用范围存在不同:

  •  IP校验和只校验20字节的IP报头;
  •  而ICMP校验和覆盖整个报文(ICMP报头+ICMP数据);
  • UDP和TCP校验和不仅覆盖整个报文,而且还有12字节的IP伪首部,包括源IP地址(4字节)、目的IP地址(4字节)、协议(2字节,第一字节补0)和TCP/UDP包长(2字节)。另外UDP、TCP数据报的长度可以为奇数字节,所以在计算校验和时需要在最后增加填充字节0(注意,填充字节只是为了计算校验和,可以不被传送)。
  • UDP的校验和是可选的,当校验和字段为0时,表明该UDP报文未使用校验和,接收方就不需要校验和检查。

 

参考链接:

http://blog.csdn.net/li_xiang1102/article/details/6901660

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值