vid*_*rlo 14 wireless networking ethernet
网络接口上的 MTU 值是多少?它的值对网络有何影响?我如何检查它是什么并更改它?如何知道网络运行的 MTU 是多少?
vid*_*rlo 20
MTU(即最大传输单元)是可以通过接口传输的最大有效负载。有效负载包括任何 L3 标头,例如 TCP/IP,但不包括第 2 层标头,例如以太网帧标头。
对于以太网,MTU 通常为 1500 字节。这意味着 TCP/IP 数据包最多可达 1500 字节。此外,还有一个以太网帧头,因此通过线路传输的以太网帧总数为 1518 字节。使用 VLAN 标记后,该值会增加到 1522B,MTU 为 1500B。
对于家庭网络,1500B 是 Wi-Fi 和以太网的通用值。虽然 Wi-Fi 和以太网上的帧不同,但两者都能够处理 1500B 有效负载。Wi-Fi 的最大值为 2304B。对于以太网,最大的常见大小是 9000B,但也可以使用更大的大小。
一般来说,Wi-Fi 和以太网中的 MTU 为 1500B,除非有令人信服的理由,否则不应更改此值 - 因为更改 MTU 会破坏预期行为。
PPPoE 是一个常见的例外;由于 PPPoE 运行在以太网之上,因此它必须适合以太网的 1500B 帧。PPPoE 的报头为 8 个字节,因此可用的 MTU 为 1492B。请注意,即使 Internet 连接的 MTU 为 1492B,您的本地网络也可以在 1500B MTU 上运行,这要归功于路径 MTU 发现。如果大部分流量流向互联网,您可以降低 MTU,但这样做不会获得显着收益,并且可能会破坏该过程,因为设备期望MTU 为 1500B。
大于 MTU 的帧将被网卡默默丢弃。如果您的 MTU 不同,这意味着一台主机可能会发送网络上其他主机无法接收的帧。这种行为可能很奇怪。
例如,登录和 ssh 可能工作正常,因为 ssh 发送许多小数据包以减少延迟,但 scp 可能会失败,因为 scp 在传输文件时使用较大的数据包,而不是屏幕内容或按键,并且不必等待数据。诸如此类的工具ping可能不会指示默认负载大小的错误。
还可以体验到,连接在一个方向上起作用,但在另一个方向上不起作用。当将数据从主机 A 复制到主机 B 时,SCP 可能会起作用,但在尝试从主机 B 复制到主机 A 时会失败。
结果是,如果您没有认识到症状并且偏执地检查和验证 MTU 设置,则 MTU 不匹配可能很难诊断...
同一广播网段上的每台计算机都应具有相同的 MTU 设置。这包括同一 L2 系统中存在不同接入技术的情况,例如 WiFi 和以太网。
你不能。第 2 层以太网中没有报告 MTU 的机制。如果数据包太大,收件人就不会收到 - 但除了错误的 MTU 之外,没有回复可能还有其他原因。
作为管理员,您必须确保同一第 2 层网段上的所有设备具有相同的 MTU 设置。对于以太网和 WiFi,该值应始终为 1500 字节,除非您有不同设置的原因。
在网络之间(例如数据包路由的地方),您可以发现使用的路径 MTU tracepath example.org- 但这只会告诉您哪些主机认为它们可以使用。如果主机配置错误,将会失败。
当网络改变传输接口时,MTU 可能会发生变化。发生这种情况的一种情况是带有 PPPoE 的 ADSL 接口。由于以太网有 1500B 有效负载,而 PPP 占用 8 个字节,因此我们最终在 PPPoE 接口上得到 1492B 有效负载。在这种情况下,中断发生在路由接口处,因此 TCP/IP 数据包可能会被分段,或者路径 MTU 发现将调整最大分段大小,这是 TCP/IP 的相关概念。
如果收到太大的数据包并将其转发到无法容纳的接口,则可能会发生以下两种情况之一:
由于 PPPoE 造成 MTU 中断,因此它处于路由边界。从 PPP 链路创建的 PPP 接口与任何以太网接口不在同一 L2 域中。
PMTUD是一种用于发现给定路径的 MTU 的技术。请注意,它依赖于 ICMP,在某些网络上可能会被阻止。
但是,如果同一网络上的不同设备具有不同的 MTU 值,则路径 MTU 检测将不起作用。它依赖于接收设置了“不分段”位的数据包的设备,但该数据包太大而无法通过目标链路。但是,如果不匹配,它可能适合目标链路 - 但如果目标的 MTU 较低,则不会被目标接收。
最大段大小是 TCP/IP 标头中的一个字段。它指定允许有多大的有效负载,并具有与MTU相关的功能。但它不是 MTU。
此外,TCP/IP 具有调整 MSS 的机制。它可能因通信伙伴而异,并且可能因同一 TCP/IP 流而异。
一般来说,可以通过三件事在物理接口上设置 MTU:
无法根据通信伙伴动态设置。
虽然这是为 Ubuntu 编写的,但这对于所有 Linux 现代 Linux 发行版都是通用的。
该命令ip link可用于显示 MTU:
$ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
Run Code Online (Sandbox Code Playgroud)
这里我们可以看到Loopback接口的MTU是65536B,而enp0s31f6以太网接口的MTU是1500B。
可以使用 进行设置ip link set dev <interface> mtu <value>,其中<interface>是接口名称。ip link set dev enp0s31f6 mtu 1400会将 MTU 设置为emp0s31f61400 字节。
一般来说,没有。如果您需要更改它,您可能知道如何做以及为什么需要这样做。主要情况是为高速网络(例如 10Gb 以太网及更快的网络)增加它。
我从事网络工作多年,还没有见过 MTU 未设置为 1500B 的通用网络。该价值在以太网和 Wi-Fi 上根深蒂固,在数据中心网络等专门环境之外对其进行更改将破坏预期行为。
随着更高网络速度的出现,帧间空间和标头的开销变得更加显着。这种情况下的常见大小是 9000B MTU,这可能需要达到线路速度。
其他大小也用于各种特殊目的,以容纳 MLPS 等有效负载或匹配虚拟化系统中的页面大小。然而,这属于专用网络的范畴。
(注意:我知道以太网通常以八位字节而不是字节来指定。但是,一个字节=一个八位字节。为了避免混淆,我在这个答案中使用了字节。)
| 归档时间: |
|
| 查看次数: |
4543 次 |
| 最近记录: |