问题标签 [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.
android-fragments - 为什么“netsh interface ip show subinterfaces”和“ping google.com -l 1472 -f”检查的MTU大小不同?
我正在检查 USB 网络共享连接的 MTU 大小,但我使用不同的命令得到了不同的结果......
通过使用“netsh interface ip show subinterfaces”,我得到以下结果(本地连接 8 是网络共享连接):
C:\Users\Chris>netsh interface ip show subinterfaces
MTU MediaSenseState 字节输入字节输出接口
4294967295 1 0 1350760 环回伪接口 1 1500 2 3756376356 10363121083 无线网络连接 1500 5 0 0 本地连接 1500 1 178477 238360 本地连接 8
但是通过使用“ping google.com -l 1472 -f”,我得到了以下结果:
C:\Users\Chris>ping google.com -l 1472 -f
使用 1472 字节数据 Ping google.com [216.58.220.142]:来自 192.168.42.129 的回复:需要对数据包进行分段,但设置了 DF。数据包需要分片,但要设置 DF。数据包需要分片,但要设置 DF。数据包需要分片,但要设置 DF。
当我检查时,网络共享连接是唯一有效的连接。如果 MTU 大小为 1500,则 ping 方法应该可以工作……我在这里有点困惑。谁能告诉我这两种方法有什么区别?
java - 在java中发送随机数据
我正在为大学做一个项目。我正在做的应用程序是 Java 中的 UDP 和 TCP 客户端/服务器,我们必须测量发送一些数据所需的时间。我的问题是以下问题:
为了使应用程序更快,我想知道是否有任何方法可以在缓冲区中发送随机数据,我的意思是,我不想在我的计算机中使用我的文件之一,我只想发送例如 500 字节数据,但我不介意什么。我知道您可以直接从 Linux 终端或使用 Iperf 执行此操作,但我不知道如何在我的 Java 应用程序中实现它。
php - 网站未在特定网络提供商上打开
我有一个 php 网站。这不仅对特定的服务提供商(BSNL India)开放。
这是一个 MTU 问题。如果我们将系统 MTU 从 1500 更改为 1458,则站点开始工作。
我真的很想知道
1) 为什么只有少数站点会发生这种情况,而其他站点使用 MTU 1500 可以正常工作。
2)我们可以从服务器端解决这个问题,而不是要求用户减少 MTU 大小。
python - 使用 Python 发送原始 IP 流量:检测 MTU
如何使用 Python 实现手动 MTU 发现?
来自:https ://networkengineering.stackexchange.com/a/28988/23983
向目标发送 ping,在我的示例中,我将使用 Google 的 DNS 服务器 (8.8.8.8)。将 ping 中的 DF 位设置为打开,以防止 ping 被碎片化。将数据包大小设置为某个较大的数字,或标准 MTU 1500。请注意,某些 ping 实现仅设置有效负载的大小,这意味着您必须考虑 8 字节 ICMP 标头和 20 字节 IP 标头。
linux - TCP_MAXSEG 不准确?(原为:Linux 路径 MTU 探测在 accept() 上不起作用:如果使用 setsockopt() 请求,则为 ed 套接字)
问题更新:除了下面的问题,似乎我们使用 Linux PLPMTUD 机制的客户端/服务器应用程序获得了太大的路径 MTU。有没有人看到这一点,即实际路径 MTU 为 1500,但getsockopt()
返回TCP_MAXSEG
端点的 MTU:s,在我们的例子中为 3000?我曾尝试使用 ethtool 切换 GRO、GSO 和 TSO,但错误仍然存在。正常 ping 只能设法通过 1472 字节或更小的数据包。另外值得一提的是 PLPMTUD 非常适合较小的 MTU:s。例如,w 个端点为 1500 MTU,中间路由器的一个接口设置为例如 1200 MTU,内核 TCP 探测并报告正确TCP_MAXSEG
(1200 - 标头)。
我在应用程序中使用符合 Linux RFC4821 的分组层路径 MTU 发现。基本上,客户端在 TCP 套接字上执行 setsockopt:
选项值设置为IP_PMTUDISC_PROBE
. setsockopt()
不返回错误。
客户端将大的 tcp 数据包发送到丢弃服务器,并且路径 MTU 由 Linux 内核校准 - tcpdump 显示正在发送设置了 DF 位的 tcp 数据包,数据包大小会变化,直到内核知道路径 MTU。但是,要让它在另一个方向上工作(监听服务器接受:来自客户端的连接,发送数据并在从服务器到客户端的方向校准 PMTU)我必须为 tcp 路径 mtu 发现设置全局选项,/proc/sys/net/ipv4/tcp_mtu_probing
. 如果我不这样做,服务器将愚蠢地继续发送太大的数据包,这些数据包会被中间路由器丢弃而没有返回 ICMP。两个端点都将 MTU 设置为 3000,而中间跃点的 MTU 设置为 1500。
我希望有人知道出了什么问题。如果需要更多信息,请告诉我,我会编辑问题。Linux 内核 4.2.0 和 3.19.0 都存在问题,它们都是库存的 Kubuntu LTS 内核。(x86/x86-64)
在反向发送数据之前,我确实在所有接受:ed 套接字上设置了相同的套接字选项服务器端。
email - 在不使用 ping 的情况下确定 MTU 大小
我正在使用本指南找出邮件服务器的正确 MTU(最大传输单元)大小。但是,服务器会阻止 ping。有没有其他方法可以在没有管理员访问邮件服务器的情况下确定 MTU 大小?
networking - MTU 1500:在 1472 字节后对数据包进行分段
我有几个在 Openstack 上运行的虚拟机。我将一个数据网络网关分配到 MTU=1500 的交换机中,VM 必须在其中运行。
同样在 Openstack 中,我设置了网络的默认 MTU=1500。
我正在尝试使用 1500 个数据包大小从 VM ping 到交换机的网关(或同一网络上的任何 ip),它正在对数据包进行碎片整理。
相反,如果我发送具有较小 mtu (1472) 的数据包,它可以工作,
我可以看到 28 个字节的差异,我不明白,这 28 个字节在哪里被使用?
android - 三星 android usb 设备不断断开重新连接 Windows 7
当我将 samsung tab s2 连接到 pc windows 7 时,最初 windows 无法识别 USB 设备,或者 MTU 驱动程序安装失败,很多错误。
我卸载了所有其他的USB驱动程序,仍然有问题。
三星安卓usb驱动,未知设备,usb设备不断断开
MTU USB 驱动程序,未正确安装。
不知道是什么原因。
==============================================
更新:
通过购买非三星、非 OEM 电缆解决了问题。
这太糟糕了,三星OEM电缆是所有麻烦的原因。
我最终花了 10 美元在亚马逊上购买任何品牌(三星除外)的电缆。
networking - UDP数据包可以分片成几个更小的数据包吗
如果超过 MTU,UDP 数据包可以分成几个更小的数据包吗?似乎 MTU 分段与 IP 层有关,所以我认为可以。
如果是这样,建议的最大值是多少。通过UDP发送的数据包大小以避免碎片,为什么?
networking - 在 UDP 的情况下 MTU 重传如何工作
众所周知,UDP 不支持重传以及其他一些事情。
我们也知道像 MTU 这样的东西,它基本上以以下方式工作——当源点和目标点之间路径上的一个网络设备不支持某种大小的数据包时,它就会丢弃它。
在 TCP 的情况下,这不是问题——它在握手后已经知道 MSS 总是小于 MTU(我对吗?),因此不可能发送大小大于 MTU 的数据包。
但是,我想知道在 UDP 的情况下它是如何工作的?正如我已经说过的,这个协议中没有重传,也没有像 MSS 这样的东西。那么当数据包由于超过 MTU 而被丢弃时会发生什么?
或者它只是因为 MTU 的性质而起作用(它实际上属于 IP 层,而不是像 UDP 或 TCP 这样的传输层协议)?那么IP层以更小的单位重建丢弃的数据包并再次发送它?