【问题标题】:Best way to calculate UDP datagram checksum?计算UDP数据报校验和的最佳方法?
【发布时间】:2017-03-14 04:23:29
【问题描述】:

计算 UDP 数据报校验和的最佳方法是什么?在Python 的 MD5、SHA256 或任何其他方法中,哪种方法肯定可以帮助识别损坏的数据包?另外,我的数据报格式为:

packet = struct.pack('HH', seq_num, checksum) + payload

,其中payload 是我发送给接收者的消息。那么,在这种情况下,我应该为数据包计算校验和吗?

【问题讨论】:

  • UDP 用于高速和非阻塞通信,消息校验和和数据包校验有很大不同点。我的意见:禁用数据包校验和并为附加校验和信息数据添加子标头。也许我错了,但我认为“UDP 通信不需要校验和(在数据包头上)”因为你在计算每个 UDP 头校验和上浪费了很多时间。

标签: python udp md5 checksum sha256


【解决方案1】:

没有。校验和只是字节的简单数学 sum,而不是 散列

阅读wikipedia's page for UDP:

校验和是来自 IP 报头、UDP 报头和数据的伪报头信息的补码和的 16 位补码,最后用零八位字节填充(如有必要)做两个八位位组的倍数。

提示参考that answer for an implementation

【讨论】:

  • 我猜你在谈论两个不同的事情。 OP 想要实现自己的应用层校验和,而您正在谈论 UDP 校验和。
  • 我不清楚情况是否如此。他问“哪种方法肯定有助于识别损坏的数据包?”这正是 UDP 标头的作用。他谈到了数据报,它是用于数据包的 UDP……
  • 我猜他不知道那个 UDP 功能。这可以解释他为什么问。
  • 我能知道你说的是哪个 UDP 功能吗? @克劳斯D。如您所见,我正在设计自己的 UDP 数据报。
  • @Jarvis 好的,所以要明确一点:md5、sha 和所有散列操作都是相对复杂、缓慢且昂贵的操作,适用于计算机之间发送的 每个 数据报是不切实际的。校验和的目的是检测损坏,所有字节的总和方法是一种非常简单的方法。
猜你喜欢
  • 2010-12-01
  • 2015-08-31
  • 2014-08-16
  • 2010-12-18
  • 1970-01-01
  • 2012-07-11
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
相关资源
最近更新 更多