FreeBSD 修改 lo0 接口的 MTU 值

Jun 02, 2024 • 预计阅读时间 1 分钟

FreeBSD 默认的回环接口 lo0 的 MTU 是 16384

lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	inet 127.0.0.1 netmask 0xff000000
	inet6 ::1 prefixlen 128
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
	groups: lo
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

可以通过配置提高到 65535

编辑 /etc/rc.conf 文件,添加下面两行配置:

ifconfig_lo0="inet 127.0.0.1/8 mtu 65535"
ifconfig_lo0_ipv6="inet6 ::1/128 mtu 65535"

也可以使用 sysrc 来操作 rc.conf

$ sudo sysrc ifconfig_lo0="inet 127.0.0.1/8 mtu 65535"
$ sudo sysrc ifconfig_lo0_ipv6="inet6 ::1/128 mtu 65535"

Tips: = 左右两侧一定不要有空格!

IPv4 的 netmask 和 IPv6 的 prefixlen 也需要设置。

配置 IP 地址是必要的,不然 lo0 就没有 IP 地址了,在启动 nginx 这类需要监听端口的服务就会报错:

nginx: [emerg] bind() to 127.0.0.1:8443 failed (49: Can't assign requested address)

重启系统,然后通过 ifconfig 看看 MTU 是否已经变成 65535

lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 65535
	options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
	inet 127.0.0.1 netmask 0xff000000
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
	inet6 ::1 prefixlen 128
	groups: lo
	nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

测试 MTU 对网络吞吐量的影响

安装 netperf 网络测试工具:

$ sudo pkg install netperf

启动 netperf 的服务端:

$ netserver

Starting netserver with host 'IN(6)ADDR_ANY' port '12865' and family AF_UNSPEC

测试默认的 MTU 值是 16384 的情况下,网络的吞吐情况:

$ netperf       
         
MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to localhost () port 0 AF_INET : histogram : interval : dirty data : demo
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

 65536  32768  32768    10.01    5278.87  

调整到 65535

sudo ifconfig lo0 mtu 65535

再测试一下网络吞吐情况:

$ netperf

MIGRATED TCP STREAM TEST from 0.0.0.0 (0.0.0.0) port 0 AF_INET to localhost () port 0 AF_INET : histogram : interval : dirty data : demo
Recv   Send    Send                          
Socket Socket  Message  Elapsed              
Size   Size    Size     Time     Throughput  
bytes  bytes   bytes    secs.    10^6bits/sec  

 65536  32768  32768    10.01    9334.43   
FreeBSDMTU
版权声明:如果转发请带上本文链接和注明来源。

lvv.me

iOS/macOS Developer

使用 OpenSSL 获取某个域名的证书指纹

使用 PF 防火墙设置端口白名单