【问题标题】:Does UDP connection take care of checksum of the packet after being sent?UDP连接是否在发送后处理数据包的校验和?
【发布时间】:2017-03-25 12:28:38
【问题描述】:

我想将文件从客户端发送到服务器。我想通过将文件分解为每个 1000 字节的数据包大小并一一发送来发送它。现在,服务器收到数据包后,它可能会损坏。那么,我应该使用标头并将数据包的校验和与数据包一起发送,并在服务器接收到它后检查它们是否匹配?还是 UDP 具有自动检查校验和的默认功能?

【问题讨论】:

标签: python sockets networking


【解决方案1】:

是的,UDP 有一个自动检查数据包的校验和。您可以在 Wikipedia 上阅读有关该算法的信息。

许多操作系统都有一个选项来控制校验和计算是否完成,并且在 1990 年代之前,出于性能原因禁用此选项是很常见的。我认为现在大多数人都启用了它,而且很可能是由许多 NIC 自动完成的。

【讨论】:

    【解决方案2】:

    UDP 具有 16 位校验和,如果不匹配,您的操作系统可能会丢弃数据包。但是,您可以将此校验和设置为 0 以绕过检查,并实现您自己的。

    但是,如果您首先使用 UDP,您应该预计会丢失或丢失一些数据包。这在传输文件时效果不佳,因此我建议您使用 TCP。

    【讨论】:

    • 谢谢。我试图使用 UDP 并通过 ACK 手动建立类似 TCP 的连接。所以,如果操作系统丢弃了数据包,服务器应该再次发送它,对吧?假设我不想丢包。
    • 不,如果推送一个小尺寸的对象,从服务器客户端快速发送缺少的部分。用于加速和非阻塞通信(如流)的 UDP 选择,为什么不作为 static file(www_style) 推送? @Manohar
    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 2013-08-29
    • 1970-01-01
    • 2015-08-31
    • 2012-10-03
    • 2012-05-20
    • 2012-11-19
    • 1970-01-01
    相关资源
    最近更新 更多