问题标签 [mtu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
330 浏览

.net - Web 服务的 MTU

我们有一个 ERP 应用程序,它让所有客户端都使用 WebService 进行连接。我的网络工程师告诉我 web 服务的 MTU 太小,我们想增加它以提高性能。据我所知,没有用于 dotnet Web 服务的 MTU 配置部分。关于我们可以在哪里配置的任何想法?

0 投票
3 回答
7809 浏览

c# - 当我通过 tcp 发送一个数据包时,它被分成两个数据包

我正在使用服务器-客户端模型在 C# 中开发一个应用程序,其中服务器向客户端发送一个带有位图的字节数组,客户端将其加载到屏幕中,向服务器发送“OK”,然后服务器发送另一个图像,依此类推。

图像缓冲区的长度取决于,通常在 60kb 和 90kb 之间,但我已经看到这并不重要。如果我将客户端和服务器放在同一台计算机上,使用 localhost,一切正常。服务器执行 beginSend,客户端执行 endReceive 并传输整个缓冲区。

但是,我现在正在无线网络中对此进行测试,结果是:

  • 服务器发送图像。
  • 调用客户端上的回调函数 data_received,但只有 1460 个字节要读取(MTU - 为什么?不应该只在 UDP 中?)
  • 再次调用客户端上的回调函数 data_received,现在使用缓冲区的其余部分(它是 1000 字节或 100 KB)...

总是这样,收到第一个 1460 字节的数据包,然后第二个数据包包含其余部分。

我可以通过加入接收到的两个字节数组来解决这个问题,但这似乎不对。我什至不确定为什么会这样。是不是对网络有一些限制?那么为什么 C# 不等待整个数据被传输呢?我的意思是,它是 TCP,我不应该担心它,对吧?

无论如何,任何帮助都会很棒!
干杯

0 投票
6 回答
80120 浏览

networking - 如何找到我可以在不分段的情况下发送的最大 UDP 数据包?

我需要知道我可以发送到另一台计算机的最大 UDP 数据包是没有碎片的。

这个大小通常被称为 MTU(最大传输单元)。假设在两台计算机之间,会有许多路由器和调制解调器,它们可能具有不同的 MTU。

我读到 Windows 中的 TCP 实现会自动找到路径中的最大 MTU。

我也在试验,我发现从我的计算机到服务器的最大 MTU 是 57712 字节+header。上面的任何东西都被丢弃了。我的电脑在局域网上,MTU 不是应该在 1500 字节左右吗?

0 投票
2 回答
3122 浏览

c - TCP/UDP 和以太网 MTU 分片

我已经在线阅读了各种网站和教程,但我仍然感到困惑。如果消息大于 IP MTU,则send()返回发送的字节。消息的其余部分会发生什么?我是否要send()再次打电话并尝试发送剩余的信息?还是 IP 层应该自动处理这些事情?

0 投票
1 回答
813 浏览

mtu - 如何在 POSIX 中获取 MTU

获取 MTU 大小值的 POSIX 函数是什么?谢谢。

0 投票
2 回答
713 浏览

windows - 发现最大数据包大小

我正在从事与网络相关的项目,并且正在使用 DTLS (TLS/UDP) 来保护通信。

阅读 DTLS 的规范,我注意到 DTLS 需要设置DF标志(不要分段)。

在我的本地网络上,如果我尝试发送大于 1500 字节的消息,则不会发送任何内容。这很有意义。在 Windows 上, sendto() 报告成功,但没有发送任何内容。

我显然不能手动取消设置DF标志,因为它对于 DTLS 是强制性的,而且我不确定 1500 字节限制(MTU?)在某些情况下是否会改变。我想它可以。

所以,我的问题是:“有没有办法发现这个限制?” 使用 API 吗?

如果不是,那么可能的最低值是多少?

我的软件在 UNIX(Linux/MAC OSX)和 Windows 操作系统下运行,因此欢迎为每个操作系统提供不同的解决方案;)

非常感谢。

0 投票
1 回答
1811 浏览

windows-vista - GetIfEntry 和 netsh 之间的 MTU 不匹配

我正在开发通过 UDP 运行的伪传输层软件,提供可靠的面向连接的传输,作为 TCP 的替代方案。为了最大化网络效率,我们在初始化时查询“最佳”网络适配器的 MTU。

在线搜索我发现您可以使用以下 netsh 命令从命令提示符(不是 C++ API)查询相同的值

令人不安的问题是,虽然 row.dwMtu 可能设置为 1500,但在发送笔记本电脑上窥探网络流量表明我们的数据包被分割成 1300 字节的数据包。netsh 还报告 MTU 为 1300。

显然 netsh 命令报告的值是实际使用的值。任何人都知道我可以调用什么 API 来获得与 netsh 相同的值?

0 投票
3 回答
1892 浏览

c# - C# 中的路径 MTU 发现

如何找到连接之间的路径 MTU?我需要这个来定义我的 UDP 连接的数据包大小。.Net 中是否有类似 Path MTU Discovery 的东西?

0 投票
2 回答
4633 浏览

linux - 在每个插槽的基础上调整 MTU?

我想知道是否有任何方法可以调整(在 linux 系统上)给定套接字的 MTU。(使 IP 层分成比实际设备 MTU 更小的块)。

当我说给定套接字时,我并不是指以编程方式在拥有该套接字的应用程序的代码中,而是在外部,例如通过 sysfs 条目。

如果目前没有办法做到这一点,您对在 linux 内核中的何处挂钩/修补以实现这种可能性有任何想法吗?

谢谢。

编辑:我到底为什么要这样做?

我正在做一些Layer3-in-Layer4(例如:通过TCP隧道隧道IP及以上)隧道。与类似 VPN 的解决方案不同,我没有使用虚拟接口来实现这一点。我正在使用 iptables 捕获数据包,以正常方式丢弃它们并将它们写入隧道套接字。

考虑一个大文件传输的情况,所有数据包都被填充到 MTU 大小。当我隧道它们时,我增加了一些开销,导致每个原始数据包产生两个隧道数据包,它不是最佳的。

0 投票
3 回答
655 浏览

c - C - 仅在 MTU 已满时才发送 TCP 数据包

是否有任何内置功能(标志、参数等)仅在其 MTU(几乎)已满时才发送 TCP 数据包?

我希望我的假设是正确的,即始终发送数据并且它包含多少有效负载并不重要(试图通过wireshark找到它)。

最好的祝福