![](/img/trans.png)
[英]Is there a way to programmatically set an interface MTU using C in Linux?
[英]set MTU in C programmatically
客户要求MTU限制应为1492。
有没有办法在源代码中完成它(C中的程序)?
有没有其他方法可以做到这一点? (ifconfig的?)
为什么有人需要将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,只需打开并写为文件
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.