客户端请求 MTU 限制应为 1492。
有没有办法在源代码(C程序)中做到这一点?
一般来说,有没有其他方法可以做到这一点?(如果配置?)
为什么有人需要将 MTU 修改到一定的限制?有什么好处?最重要的是:通过更改 MTU 是否存在破坏代码的风险?
客户端请求 MTU 限制应为 1492。
有没有办法在源代码(C程序)中做到这一点?
一般来说,有没有其他方法可以做到这一点?(如果配置?)
为什么有人需要将 MTU 修改到一定的限制?有什么好处?最重要的是:通过更改 MTU 是否存在破坏代码的风险?
以编程方式使用 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
.
这与速度无关。通过增加 MTU,您可以减少开销,这是负责正确交付包但最终用户无法使用的数据;这可以提高速度,但仅适用于交通繁忙;
此外,如果您增加 MTU,您很容易增加丢弃的数据包数量(因为您有固定的误码概率和数据包中的更多位),最终导致重新发送数据包的性能下降等。 . 所以这是开销和数据完整性之间的折衷;
我想这更像是一个接口配置,而不是你用程序控制的东西。所以最好坚持使用“ifconfig”命令或为 Windows 找到等效的解决方案。
设置接口参数的现代方法是通过 sysfs
sudo sh -c 'echo 1492 > /sys/class/net/tun/mtu'
通过C,只需打开并写入文件