【问题标题】:Determine if UDP Checksum is Computed using Boost.Asio确定是否使用 Boost.Asio 计算 UDP 校验和
【发布时间】:2015-05-08 06:44:19
【问题描述】:

我确实发现了一些其他相关的问题,但没有任何东西能真正给出我正在寻找的答案。

我正在使用 Boost.Asio 和 ip::udp::socket (http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference.html)

从此页面:http://en.wikipedia.org/wiki/User_Datagram_Protocol#IPv4_Pseudo_Header : 它声明 UDP 校验和对于 IPv4 是可选的。

查看https://www.rfc-editor.org/rfc/rfc768 似乎通常只有启用调试时才会出现这种情况?

另见:http://www.boost.org/doc/libs/1_57_0/doc/html/boost_asio/reference/basic_datagram_socket/debug.html

将调试设置为 false 是否足以确保计算 UDP 校验和,或者如何确保 100% 确保计算 UDP 校验和,以便在使用 UDP/IPv4 时可以安全地忽略底层数据包协议中的校验和计算?

我知道 UDP/IPv6 保证校验和计算,但我不能将我的系统限制为仅使用 IPv6。

【问题讨论】:

    标签: c++ boost udp boost-asio checksum


    【解决方案1】:

    使用 tcpdump/wireshark/ethereal/等工具。转储实际流量。

    在我看来,校验和实际上可能是在驱动程序级别处理的。你可以使用例如ethertool 启用它们 (?http://www.linuxquestions.org/questions/linux-networking-3/help-needed-disabling-tcp-udp-checksum-offloading-in-debian-880233/)

    确实Wireshark FAQ 有一个关于此的条目:

    由于称为 TCP 校验和卸载的功能,您会看到“不正确”的校验和。传出 TCP 数据包的校验和字段不是由操作系统预先计算的,而是设置为 0 并留给 NIC 处理器计算。 ¹

    ¹来源:https://serverfault.com/a/288493

    【讨论】:

      猜你喜欢
      • 2010-12-01
      • 2014-08-16
      • 2010-12-18
      • 1970-01-01
      • 2015-08-31
      • 1970-01-01
      • 1970-01-01
      • 2012-09-03
      • 1970-01-01
      相关资源
      最近更新 更多