问题标签 [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 投票
4 回答
9191 浏览

c - 以编程方式在 C 中设置 MTU

客户端请求 MTU 限制应为 1492。

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

一般来说,有没有其他方法可以做到这一点?(如果配置?)

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

0 投票
4 回答
2791 浏览

c - 发送固定长度的 TCP 帧

我需要使用 TCP 通过具有固定非标准 MTU(例如 1560)的子网发送一些数据。如果帧的长度小于 MTU,则通过该子网传输的所有以太网帧都应手动填充 0。

因此,数据大小应为 (1560 - sizeof( IP header ) - sizeof( TCP header ) )。

这就是我要做的方式:

  1. 我设置了 TCP_CORK 选项来减少数据碎片。它不可靠,因为有 200 毫秒的上限,但它有效。

  2. 我知道IP头的大小(20字节),所以数据长度应该等于(1540-sizeof(TCP头))。

  3. 那就是问题所在。我不知道 TCP 标头的大小。它的“选项”字段的大小是浮动的。

那么,问题来了:如何获取 TCP 标头的大小?或者也许有一些方法可以发送带有固定长度标头的 TCP 帧?

0 投票
2 回答
4418 浏览

c - 为具有多个接口的设备设置 MTU

我在用

ioctl(s, SIOCSIFMTU, (caddr_t)&ifr)

更改接口的 MTU。

代码与此类似

我的问题是设备有多个接口,并且所有这些的 MTU 都设置为 1492。我只想专门为一个接口做这件事,而其他所有接口都不受影响。我该怎么做?

bond1:43 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.59 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1

bond1:48 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.60 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1

bond1:49 Link encap:Ethernet HWaddr 00:0E:0C:E4:C5:45
inet addr:10.7.181.61 Bcast:10.7.181.255 Mask:255.255.255.0 UP BROADCAST RUNNING MASTER MULTICAST MTU: 1492 Metric:1

0 投票
5 回答
17759 浏览

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

ifconfig 1.2.3.4 mtu 1492

这会将传入、传出数据包或两者的 MTU 设置为 1492?我认为它仅用于传入

0 投票
1 回答
3064 浏览

networking - 奇怪的 IPERF 观察:MSS 大小比指定的减小

我正在使用 IPERF 将一些数据包从一台 PC 发送到另一台 PC。在使用 IPERF 测试 MSS(最大段大小)时观察到以下情况。

发送 MSS = 20 字节的数据包:

我们预计上述命令将发送 MSS = 20 字节和
MTU = MSS + 40 字节 = 60 字节的数据包,但 IPERF 显示 MSS = 36 字节(MTU = 76 字节)。

我们看到 IPERF 总是发送大小比我们指定的少 12 字节的 MSS。

在这里我应该指出,我发送数据包的 PC 是一台 Linux 机器,而接收这些数据包的电脑是 Windows 机器。我们在 Linux 中使用 IPERF 命令生成数据包,而在 Windows 上,JPERF 正在运行,我们可以看到有关传入数据包的信息。

另一个重要的事情是,Windows 机器上的 JPERF 在收到我们发送的数据包后,显示如下: MSS 和 MTU 大小未知(操作系统不支持 TCP_MAXSEG?)

知道如何/为什么减少 MSS 吗?

0 投票
2 回答
5254 浏览

icmp - 路径 MTU 发现 - ICMP 响应在哪里?

我正在 Linux 中做一些关于路径 MTU 发现的实验。据我从 RFC 1191 了解,如果路由器接收到一个非零 DF 位的数据包,并且该数据包无法在没有分片的情况下发送到下一个主机,那么路由器应该丢弃该数据包并将 ICMP 消息发送到初始发件人。

我在我的计算机上创建了几个 VM 并以下列方式链接它们:

Rx - 是安装了 Linux 的虚拟机,它们有两个带有静态路由的网络接口。从 V1 ping V2,反之亦然成功。

分段 100.x 和 150.x 的 MTU 为 1500。分段 200.x 的 MTU 为 750。

我正在尝试发送启用了 DF 的 UDP 数据包。事实上,如果数据包的大小大于 750(我收到 send() 调用的 EMSGSIZE 错误),VM1 根本不会发送数据包。

但是,我希望大小超过 1500 的数据包会出现这种行为。并且我希望 VM1 将大小在 750 到 1500 之间的数据包发送到 R1,并且 R1(或 R2)丢弃此类数据包并将 ICMP 数据包返回给 VM1 . 但这不会发生。

有两个问题:

1)为什么?

2) 是否可以根据 RFC 1191 设置我的虚拟网络以接收 ICMP 数据包?

谢谢。

0 投票
1 回答
316 浏览

windows - Windows 2000 和 udp 数据报的大小 MTU 大小

我将如何更改/确保我的多播 udp 数据报的 Windows 主机接收器设置为能够接收 1500 的 MTU?到目前为止,我阅读的文档是指 PPP 和 PPPoE,这似乎不适用于 udp 数据报。谢谢阿克

0 投票
1 回答
5858 浏览

networking - 如何确定我的电缆调制解调器和 ISP 之间的 MTU?

我试图了解 MTU 的“大局”。具体来说,许多关于 MTU 的讨论都集中在单跳(例如笔记本电脑到路由器)上,因此自然的问题是:如何确定电缆调制解调器和 ISP 之间的 MTU,或者更一般地说,对于路由的任何给定跳,如何确定 MTU。

现在,我可以很容易地看到我的笔记本电脑和它之间的 MTU: 在 Mac OS X 上使用 ifconfig 的 wi-fi 路由器:

1500 是 wi-fi 帧限制的规范值 b/c(我猜它是为匹配以太网帧而设计的;如果有错请纠正我)。

所以,问题是:如何确定我的路由中任意跳的 MTU?

答案总结:

根据以下答案,最好的选择是“tcpdump”、“traceroute --mtu”或“tracepath”

0 投票
1 回答
4662 浏览

linux - tcpdump 报告的 tcp 数据包“大小”与发送的实际 IP 数据包有何关联?

当我运行 tcpdump 时——在最低和最高序列号之后的 () 之间报告的数字到底是什么意思?

  1. 如果它与发送的IP数据包相关,它怎么可能大于1500的mtu?
  2. 在这个流的接收端,tcpdump 总是看到 1448 或更小的数据包——这些数据包在哪里进行碎片整理和重组?我可以用 tcpdump 看到吗?
  3. 这个数字和 tcp 套接字缓冲区的大小有什么关系吗?

即:发送方的典型 tcpdump:

11:47:18.278352 IP 1.1.1.36.41034 > 1.1.1.37.60960:. 3263771:3272459(8688) ack 1 赢 54 11:47:18.278371 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 3272459:3282595(10136) ack 1 win 54 11:47:18.278620 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 3282595:3298523(15928) ack 1 赢 54 11:47:18.278727 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 3298523:3301419(2896) ack 1 赢 54 11:47:18.278731 IP 1.1.1.36.41034 > 1.1.1.37.60960: P 3301419:3301719(300) ack 1 赢 54 11:47.41:18.777160 IP 3。 > 1.1.1.37.60960: P 3301719:3301723(4) ack 1 win 54 11:47:18.777175 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 3301723:3303171(1448) ack 1 赢 54

和接收器:

11:47:18.277895 IP 1.1.1.36.41034 > 1.1.1.37.60960: P 990413:990417(4) ack 1 win 54 11:47:18.277948 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 990417:991865(1448) ack 1 win 54 11:47:18.277953 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 991865:993313(1448) ack 1 win 54 11:47:18.277958 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 993313:994761(1448) ack 1 win 54 11:47:18.278028 IP 1.1.1.36.41034 > 1.1.1.37.60960: . 994761:996209(1448) ack 1 赢 54

0 投票
1 回答
1190 浏览

c# - 发送 ICMPv6 回显请求

如何在 C# 中发送 ICMPv6 回显请求消息?此外,我需要在使用 IPv6 的路径上指定实际带宽、RTT、MTU(IPv6 数据包中没有 DF 标志)和数据包丢失。