【问题标题】:Understanding the TCP packet size limit with UDP packet size limit & what it means at boost::asio level of programming了解 TCP 数据包大小限制和 UDP 数据包大小限制及其在 boost::asio 编程级别的含义
【发布时间】:2017-10-11 09:26:17
【问题描述】:

我在我的客户端应用程序和服务器应用程序中使用boost::asio 执行UDPTCP communication。我发现我只能使用 UDP 传输大小为 65535 bytes 的数据,因为它似乎是 UDP 中的最大数据包大小。

最大数据包大小限制也存在于TCP 中,即65535 bytes ?但是我可以在TCP 中使用boost::asio::write 发送大于最大数据包大小的块,并在客户端应用程序上正常阅读。我看到我不必担心 TCP 中的最大数据包大小,但在 UDP 中,我确保每个 socket.send_to 都使用小于 max packet size 的缓冲区完成

这是如何工作的?这是因为TCP 是基于流的,负责在较低层创建数据包? 有什么办法可以增加UDP 中的max packet size 吗?

当我在客户端读取时,我从服务器端发送的 UDP packet 的某些字节是否可能会丢失?如果是,那么有没有办法仅检测 UDP 客户端的丢失

【问题讨论】:

    标签: c++ sockets tcp udp boost-asio


    【解决方案1】:

    TCP 负责传输控制(这实际上是 TCP 中 T 和 C 的含义)。您通常不会担心发送到 TCP 套接字的数据量,因为它自己管理在每个数据包中发送多少数据。每个 TCP 数据包最多可以有 65536 字节的有效负载,但您通常不会考虑它,因为 TCP 相当复杂,可以做很多事情。

    然而,UDP 缺乏任何控制机制并尽可能保持简单,因此您需要决定每个数据包发送多少数据。最大大小再次为 65536 字节,因为您在 UDP 标头中只有两个字节来指定消息的长度。在决定 UDP 数据包大小时要考虑的另一件事是,较低级别的协议也有自己的限制(IP 为 65K,以太网约 1500 字节)。

    您无法增加 UDP 数据包的最大大小,而且您通常也不想这样做,因为大型 UDP 数据包可能会在没有任何通知的情况下被丢弃。 SO 上的其他答案建议对互联网上的数据报使用 512-8K 数据包。

    可能会收到带有损坏字节的 UDP 数据报(虽然不是“丢失”)。但是每个数据包都被checksum 覆盖,因此客户端会知道数据报是否在传输过程中被损坏。

    【讨论】:

    • 如何使用 boost::asio UDP 进行基于校验和的检查?如果可以,请建议
    • @AdaLovelace 你不需要做任何事情,校验和是 UDP 协议的一部分。你已经有这张支票了。
    • 请注意,校验和在 IPv4 中是可选的。但是,如果收到一个数据包,它也必须通过以太网校验和。
    【解决方案2】:

    问题与UDPTCP 的关系不大,而与IP 的关系很大。 UDPTCP 是传输协议,它们没有定义最大数据包(或段)大小。 IP 是一种网络协议。 IP 数据包最多可以包含 65536 (2^16) 个字节,因为有两个字节用于定义数据包大小。 大的IP 数据包被分成多个段。如果其中一个段丢失或损坏,则整个IP 数据包将丢失。段的大小取决于链路层协议,通常是以太网。对于以太网,通常的最大大小最多为 1500 字节,如果允许使用巨型帧,则更大。

    因此,如果您传输大于 1500 字节的 UDP 数据包,它可能会被分成几个段。如果网络上没有损失,这通常很好。但是,如果有损失,只有当有更多的依赖细分市场时,影响才会更大。例如,考虑一个损失为 1% 的网络,如果您传输一个 65536 字节的UDP 数据包,它很可能会被分成 44 个段。那么这个包被接收的概率是:(1-0.01)^44 = 64 %...

    这也是为什么许多 TCP 实现和基于 UDP 的应用程序最多使用 1500 字节数据包的原因。

    提取损坏的数据包是一项艰巨的任务,请查找 libpcap 之类的库。

    【讨论】:

      猜你喜欢
      • 2020-05-25
      • 1970-01-01
      • 2010-12-23
      • 1970-01-01
      • 1970-01-01
      • 2016-03-19
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      相关资源
      最近更新 更多