5

客户端请求 MTU 限制应为 1492。

有没有办法在源代码(C程序)中做到这一点?

一般来说,有没有其他方法可以做到这一点?(如果配置?)

为什么有人需要将 MTU 修改到一定的限制?有什么好处?最重要的是:通过更改 MTU 是否存在破坏代码的风险?

4

4 回答 4

6

以编程方式使用 C:

int sock = socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
struct ifreq ifr;
strcpy(ifr.ifr_name, "eth0");
if(!ioctl(sock, SIOCGIFMTU, &ifr)) {
  ifr.ifr_mtu // Contains current mtu value
}
ifr.ifr_mtu = ... // Change value if it needed
if(!ioctl(sock, SIOCSIFMTU, &ifr)) {
  // Mtu changed successfully
}

它至少可以在 Ubuntu 上运行,请参阅man netdevice.

于 2016-01-14T14:03:28.963 回答
3

MTU是一个数字,它定义了每个数据包的最大传输单元。它越大,发送数据的速度就越快。假设您可以发送大小n的数据包m,如果m增长,m*n也会增长。

我认为您的客户需要该 MTU 是因为它的网络设备(可能是以太网 802.3)。一些设备比其他设备处理最大的框架尺寸。

您可以将ifconfigmtu与更改其值的选项一起使用: ifconfig eth0 mtu 1492.

于 2011-05-05T20:53:08.473 回答
3

这与速度无关。通过增加 MTU,您可以减少开销,这是负责正确交付包但最终用户无法使用的数据;这可以提高速度,但仅适用于交通繁忙;

此外,如果您增加 MTU,您很容易增加丢弃的数据包数量(因为您有固定的误码概率和数据包中的更多位),最终导致重新发送数据包的性能下降等。 . 所以这是开销和数据完整性之间的折衷;

我想这更像是一个接口配置,而不是你用程序控制的东西。所以最好坚持使用“ifconfig”命令或为 Windows 找到等效的解决方案。

于 2011-05-05T21:07:36.650 回答
1

设置接口参数的现代方法是通过 sysfs

sudo sh -c 'echo 1492 > /sys/class/net/tun/mtu'

通过C,只需打开并写入文件

于 2019-05-24T14:53:46.017 回答