AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 826525
Accepted
kasperd
kasperd
Asked: 2016-09-19 04:45:00 +0800 CST2016-09-19 04:45:00 +0800 CST 2016-09-19 04:45:00 +0800 CST

如何增加 PPPoE MTU?

  • 772

我有一个 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?

pppoe
  • 2 2 个回答
  • 2320 Views

2 个回答

  • Voted
  1. Best Answer
    kasperd
    2016-09-19T06:59:26+08:002016-09-19T06:59:26+08:00

    ppp我通过输入以下两个命令下载了源代码:

    sudo apt-get build-dep ppp
    apt-get source ppp
    

    在头文件中pppd/plugins/rp-pppoe/pppoe.h我发现了这个:

    /* Header size of a PPPoE packet */
    #define PPPOE_OVERHEAD 6  /* type, code, session, length */
    #define HDR_SIZE (sizeof(struct ethhdr) + PPPOE_OVERHEAD)
    #define MAX_PPPOE_PAYLOAD (ETH_DATA_LEN - PPPOE_OVERHEAD)
    #define MAX_PPPOE_MTU (MAX_PPPOE_PAYLOAD - 2)
    

    ETH_DATA_LEN定义在/usr/include/linux/if_ether.h

    #define ETH_DATA_LEN      1500            /* Max. octets in payload        */
    

    在pppd/plugins/rp-pppoe/plugin.c我发现这个:

        if (lcp_allowoptions[0].mru > MAX_PPPOE_MTU)
            lcp_allowoptions[0].mru = MAX_PPPOE_MTU;
        if (lcp_wantoptions[0].mru > MAX_PPPOE_MTU)
            lcp_wantoptions[0].mru = MAX_PPPOE_MTU;
    

    所有这一切意味着该rp-pppoe插件的硬编码限制为 1492 字节。而增加它的唯一方法是修改源并以更高的限制重新构建插件。

    通过从模块中删除以上四行plugin.c并重建模块,我能够将 MTU 从 1492 增加到 1500。这仅适用于已知底层线路支持更大尺寸的情况,这恰好是我的连接的情况.

    为了检测底层线路的能力,有必要使用支持 RFC 4638 的较新 pppd 版本。Ubuntu 16.04 具有更新的 pppd 版本,因此应该能够为 PPPoE 使用更大的 MTU 大小,而无需重新编译任何代码。

    • 2
  2. Amias
    2016-09-19T04:55:58+08:002016-09-19T04:55:58+08:00

    您可以通过 strace 运行 pppd 并过滤以显示“打开”请求,以查看其打开的文件以从中获取其配置。

    sudo strace -f -e open pppd
    

    根据我(英国宽带)的经验,如果通过 BT,所有连接都是 1492,是否有特定原因需要另外 8 个八位字节?

    我的理解是,如果你没有正确匹配 MRU,你最终可能会让你的数据包变成多个数据包,特别是如果你不允许像 8 个八位字节的开销这样的封装。

    • -1

相关问题

  • 如何使用 PPPoE 连接到 DSL 调制解调器?

  • 为什么网络管理器不使用系统网络方案?

  • DSL PPPoE 连接不工作?

  • 将 PPPOE DSL 调制解调器连接到服务器?[关闭]

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve