问题标签 [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.
c - 以编程方式在 C 中设置 MTU
客户端请求 MTU 限制应为 1492。
有没有办法在源代码(C程序)中做到这一点?
一般来说,有没有其他方法可以做到这一点?(如果配置?)
为什么有人需要将 MTU 修改到一定的限制?有什么好处?最重要的是:通过更改 MTU 是否存在破坏代码的风险?
c - 发送固定长度的 TCP 帧
我需要使用 TCP 通过具有固定非标准 MTU(例如 1560)的子网发送一些数据。如果帧的长度小于 MTU,则通过该子网传输的所有以太网帧都应手动填充 0。
因此,数据大小应为 (1560 - sizeof( IP header ) - sizeof( TCP header ) )。
这就是我要做的方式:
我设置了 TCP_CORK 选项来减少数据碎片。它不可靠,因为有 200 毫秒的上限,但它有效。
我知道IP头的大小(20字节),所以数据长度应该等于(1540-sizeof(TCP头))。
那就是问题所在。我不知道 TCP 标头的大小。它的“选项”字段的大小是浮动的。
那么,问题来了:如何获取 TCP 标头的大小?或者也许有一些方法可以发送带有固定长度标头的 TCP 帧?
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
linux - MTU 修改会影响两个方向吗?
ifconfig 1.2.3.4 mtu 1492
这会将传入、传出数据包或两者的 MTU 设置为 1492?我认为它仅用于传入
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 吗?
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 数据包?
谢谢。
windows - Windows 2000 和 udp 数据报的大小 MTU 大小
我将如何更改/确保我的多播 udp 数据报的 Windows 主机接收器设置为能够接收 1500 的 MTU?到目前为止,我阅读的文档是指 PPP 和 PPPoE,这似乎不适用于 udp 数据报。谢谢阿克
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”
linux - tcpdump 报告的 tcp 数据包“大小”与发送的实际 IP 数据包有何关联?
当我运行 tcpdump 时——在最低和最高序列号之后的 () 之间报告的数字到底是什么意思?
- 如果它与发送的IP数据包相关,它怎么可能大于1500的mtu?
- 在这个流的接收端,tcpdump 总是看到 1448 或更小的数据包——这些数据包在哪里进行碎片整理和重组?我可以用 tcpdump 看到吗?
- 这个数字和 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
c# - 发送 ICMPv6 回显请求
如何在 C# 中发送 ICMPv6 回显请求消息?此外,我需要在使用 IPv6 的路径上指定实际带宽、RTT、MTU(IPv6 数据包中没有 DF 标志)和数据包丢失。