标签: mtu

如何找到我可以发送的最大UDP数据包而不会分段?

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

该大小通常称为MTU(最大传输单元).据推测,在两台计算机之间,将有许多可能具有不同MTU的路由器和调制解调器.

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

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

networking udp tcp mtu

54
推荐指数
2
解决办法
7万
查看次数

MTU修改会影响两个方向吗?

ifconfig 1.2.3.4 mtu 1492

这会将传入,传出数据包或两者的MTU设置为1492?我认为这只是为了传入

linux networking mtu ifconfig

12
推荐指数
2
解决办法
1万
查看次数

Docker 动态更改 mtu?

我有 9 个堆栈的生产 docker swarm,其中大多数都有卷。目前docker正在单节点运行。

我必须添加第二个节点,这是问题开始的地方。尤其是 portainer 的问题是——它变得非常滞后,几乎无法使用。此外,当我将一些容器移动到新节点时,我的项目似乎完全陷入困境 - 问题在于不同节点上的容器之间的通信。有些请求是可以的,但大多数请求似乎都被破坏了。

经过一番研究,我发现问题似乎出在 MTU 上。eth1的MTU是1450,docker默认是1500。

问题是,是否可以即时将 docker 的 MTU 更改为 1450?

我试过:

  1. 将密钥添加到 dockerd --mtu=1450 - docker 服务根本没有启动
  2. 在 docker-compose 中更改主网络的 mtu - 似乎它没有更新,我认为应该重新创建网络
  3. 将 mtu 选项添加到 /etc/docker/daemon.json 似乎也没有效果

如何更改工作生产服务器上的 mtu?可能的停机时间为 10-15 分钟是可以的,但我不想删除所有堆栈并重新创建它们。

如果配置

mtu ifconfig docker docker-swarm

8
推荐指数
1
解决办法
1万
查看次数

用于PCAP实时捕获的最佳SNAPLEN

pcap_open_live用于从界面嗅探时,我已经看到很多使用各种数字作为SNAPLEN值的例子,范围从BUFSIZ(<stdio.h>)到"魔术数字".

将SNAPLEN设置为我们捕获的接口的MTU是不是更有意义?通过这种方式,我们可以在PCAP缓冲区中同时容纳更多数据包.假设MRU等于MTU是否安全?

否则,是否有一种非常规的方式来设置SNAPLEN值?

谢谢

c snapshot live mtu pcap

7
推荐指数
1
解决办法
5718
查看次数

7
推荐指数
4
解决办法
3万
查看次数

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

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

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

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

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

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

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

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

c# tcp packets mtu

6
推荐指数
2
解决办法
6074
查看次数

以 C 语言编程设置 MTU

客户端请求 MTU 限制为 1492。

有没有办法在源代码(C 程序)中做到这一点?

一般情况下还有其他方法吗?(如果配置?)

为什么有人需要将 MTU 修改到一定的限制?有什么好处?最重要的是:更改 MTU 是否存在破解代码的风险?

c sockets network-programming mtu

6
推荐指数
2
解决办法
1万
查看次数

使用 Python 发送原始 IP 流量:检测 MTU

如何使用 Python 实现手动 MTU 发现?

来自:https : //networkengineering.stackexchange.com/a/28988/23983

向目标发送 ping,在我的示例中,我将使用 Google 的 DNS 服务器 (8.8.8.8)。将 ping 中的 DF 位设置为 on,以防止 ping 被碎片化。将您的数据包大小设置为某个较大的数字,或 1500 的标准 MTU。请注意,某些 ping 实现仅设置有效负载的大小,这意味着您必须考虑 8 字​​节 ICMP 标头和 20 字节 IP 标头。

python ip mtu

6
推荐指数
1
解决办法
2502
查看次数

发送 UDP 数据包时忽略 Linux 上的路径 MTU

我正在实现DPLPMTUDerrno = EMSGSIZE ,当我发送的 UDP 数据包长于本地接口的 MTU 时,我想阻止 Linux 内核返回 -1 。我想避免在发送多个数据报时(特别是使用sendmmsg(2))时处理错误处理的痛苦,每个数据报可能属于不同的连接。我宁愿让内核丢弃数据包并让应用程序 DPLPMTUD 逻辑计算出 MTU。

\n

ip(7)有这样说:

\n
              It is possible to implement RFC 4821 MTU probing with SOCK_DGRAM\n              or SOCK_RAW sockets by  setting  a  value  of  IP_PMTUDISC_PROBE\n              (available  since Linux 2.6.22).  This is also particularly use\xe2\x80\x90\n              ful for diagnostic tools such as tracepath(8) that wish  to  de\xe2\x80\x90\n              liberately send probe packets larger than the observed Path MTU.\n
Run Code Online (Sandbox Code Playgroud)\n

然而设置此选项并不会产生预期的效果。下面是说明问题的代码:

\n
              It is possible to …
Run Code Online (Sandbox Code Playgroud)

c linux mtu probe quic

6
推荐指数
0
解决办法
1103
查看次数

Android Ble MTU 大小

BluetoothGatt.requestMtu(512)我在我的 Android 应用程序中使用。第一次运行良好,但在 Mtu 自动更改为 23(默认)之后

我不知道是什么问题......

这是一个日志

`D/BluetoothGatt: setCharacteristicNotification() - uuid: 0000fff1-0000-1000-8000-00805f9b34fb enable: true
D/BluetoothGatt: configureMTU() - device: 74:F0:7D:C0:CB:68 mtu: 512
D/BluetoothGatt: onConfigureMTU() - Device=74:F0:7D:C0:CB:68 mtu=23 status=0
D/BluetoothGatt: discoverServices() - device: 74:F0:7D:C0:CB:68
D/BluetoothGatt: onSearchComplete() = Device=74:F0:7D:C0:CB:68 Status=0
I/gattSuccess: gattSuccess`
Run Code Online (Sandbox Code Playgroud)

这是在 onMtuChanged() 中,所以它可以无限循环

android mtu bluetooth-lowenergy

6
推荐指数
1
解决办法
1万
查看次数