![](/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.