【问题标题】:Send packets larger than 64K in TCP在 TCP 中发送大于 64K 的数据包
【发布时间】:2014-12-24 23:31:58
【问题描述】:

据我们所知,TCP 数据包大小的绝对限制是 64K(65535 字节),实际上这远远大于您将看到的任何数据包的大小,因为较低层(例如以太网)具有较低的数据包尺寸。例如,以太网的 MTU(最大传输单元)为 1500 字节。

我想知道,有什么方法或工具可以发送大于 64k 的数据包吗?

我想测试一个设备面对大于 64k 的数据包!我的意思是我想看看,如果我发送一个大于 64K 的数据包,它的表现如何?它会掉一部分吗?或者是其他东西。

所以:

1- 如何发送这么大的数据包?什么是合适的层?

2- 接收者通常如何表现?

【问题讨论】:

  • 测试SO_SNDBUF套接字选项。

标签: networking tcp packet tcp-ip


【解决方案1】:

IP 数据包格式的数据包大小只有 16 位,因此您将无法创建大小超过 64k 的数据包。见http://en.wikipedia.org/wiki/IPv4#Total_Length。由于 TCP 使用 IP 作为较低层,因此此限制也适用于此。

【讨论】:

  • 没有任何方法或设备可以发送比这更大的数据包吗?我的意思是有没有办法通过将一些字节连接在一起来创建一个数据包并制作一个例如65K的数据包并连续发送它?网卡 (NIC) 是否将数据拆分为数据包或发送数据包的应用程序?
  • “物理”网络数据包比“逻辑”IP 数据包还要小,请参阅en.wikipedia.org/wiki/Ethernet_frameen.wikipedia.org/wiki/Jumbo_frame,因此您对数据包格式固有的多个级别有限制,不仅仅是软件强制限制。
【解决方案2】:

没有像 TCP 数据包这样的东西。 TCP 数据在段中发送和接收, 段可以根据您所使用的 API 的限制任意大,因为它们可以由多个 IP 数据包组成。在接收端,TCP 与字节流无法区分。

NB 与此或其他任何事情无关。

【讨论】:

    【解决方案3】:

    TCP 段没有大小限制。施加限制的事情是 IPv4 和 IPv6 数据包具有 16 位长度字段,因此无法表示大于此限制的大小。

    但是,RFC 2675 是 IPv6 的提议标准,它将长度字段扩展到 32 位,从而允许更大的 TCP 段。

    请参阅here 了解为什么此更改有助于提高性能,请参阅here 了解 Linux 的一组(实验性)补丁以启用此 RFC。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-04-10
      • 1970-01-01
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多