我有一个 Ubuntu Server 14.04 安装,它使用 PPPoE 连接到互联网。目前,我的ppp0
界面的 MTU 为 1492,主要工作。
我想将 MTU 增加到 1500,这是我的 ISP 支持的。
到目前为止,我已将底层以太网接口的 MTU 增加到 1508,并尝试在/etc/ppp/peers/dsl-provider
mtu 1500
mru 1500
但是我的ppp0
界面的 MTU 仍然为 1492。我相信我添加的行的语法是正确的,因为使用低于 1492 的值确实可以按预期工作。
启动后手动将ppp0
接口的 MTU 更改为 1500 有效,但只影响一个方向的数据包。这样做我可以通过互联网发送 1500 字节的数据包,它们将到达目的地而没有碎片。但传入我的流量仍以 1492 字节片段的形式发送。
通过在启动 PPPoE 连接时捕获以太网接口上的流量,我可以看到在我的 Ubuntu Server 14.04 机器发送给提供商的配置请求中,MRU 被指定为 1492。所以我知道问题出在我这边的连接。
为什么 Ubuntu Server 14.04 在配置请求中使用 1492 作为 MRU,而配置文件显示为 1500?我怎样才能将其更改为 1500?
ppp
我通过输入以下两个命令下载了源代码:在头文件中
pppd/plugins/rp-pppoe/pppoe.h
我发现了这个:ETH_DATA_LEN
定义在/usr/include/linux/if_ether.h
在
pppd/plugins/rp-pppoe/plugin.c
我发现这个:所有这一切意味着该
rp-pppoe
插件的硬编码限制为 1492 字节。而增加它的唯一方法是修改源并以更高的限制重新构建插件。通过从模块中删除以上四行
plugin.c
并重建模块,我能够将 MTU 从 1492 增加到 1500。这仅适用于已知底层线路支持更大尺寸的情况,这恰好是我的连接的情况.为了检测底层线路的能力,有必要使用支持 RFC 4638 的较新 pppd 版本。Ubuntu 16.04 具有更新的 pppd 版本,因此应该能够为 PPPoE 使用更大的 MTU 大小,而无需重新编译任何代码。
您可以通过 strace 运行 pppd 并过滤以显示“打开”请求,以查看其打开的文件以从中获取其配置。
根据我(英国宽带)的经验,如果通过 BT,所有连接都是 1492,是否有特定原因需要另外 8 个八位字节?
我的理解是,如果你没有正确匹配 MRU,你最终可能会让你的数据包变成多个数据包,特别是如果你不允许像 8 个八位字节的开销这样的封装。