是否可以控制 tcp 帧内的数据长度?

网络工程 tcp linux
2022-02-25 01:10:11

我有两个不同的 CUPS 安装。一个是 2.2.0 在 macOS (10.12.2) 上运行另一个是 1.6.3 在 Linux minibian 4.1.7-v7+ ( Raspberry ) 上运行

有通过网络连接的热敏打印机,cups 向打印机发送 RAW ESC/P 命令。(它不对它做任何处理)

问题是当打印来自 Linux minibian 时,打印机在某些时候停止响应 ACK,而来自 macOS 它运行良好(到目前为止)

我从 macOS 连接进行转储以打印和从 Linux

似乎 macOS 发送的 TCP 帧数量更少,将更多数据推入每帧(512 字节),而 linux 每帧仅推送 128 字节,并且在某些时候它等待 ACK 的时间过长,并重新发送数据包几次。

打印机窗口大小为 1K

我想知道有没有办法调整应该将多少字节推入单个 TCP 帧?

这是来自 macOS 的转储

https://www.cloudshark.org/captures/6c6ca839721a

这是来自 Linux 的转储

https://www.cloudshark.org/captures/065ac8cfb15e

谢谢。

添加

我用另一台打印机检查了 linux,它工作正常 cloudshark.org/captures/a700f0d7a143

我看了一下,发现现在所有的帧都是 512bytes。所以我检查了第一帧,发现另一台打印机在第一帧返回窗口大小 1024,而旧打印机在第一帧返回 128。

看起来 linux 驱动程序不尊重下一次调用的窗口大小(就像在第 5 帧服务器之后仍然按 128 字节推送数据,而调用 5 说窗口现在是 1024)

是驱动的问题吗?macOS 处理得当

1个回答

当然,您可以影响设备中的 MSS(最大段大小)。

在 Linux 中,它可以通过 sysctl https://itsthe.network/post/TCP%20MSS%20Linux%20Kernel%20Setting/全局完成)

或根据规则(例如使用 iptables),详细信息:

https://www.frozentux.net/iptables-tutorial/chunkyhtml/x4721.html