簡體   English   中英

以編程方式在C中設置MTU

[英]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是定義每個數據包的最大傳輸單元的數字。 它越大,您的數據發送速度就越快。 假設你可以發送m大小的n數據包,如果m增長, m*n也會增長。

我認為你的客戶想要MTU因為它的網絡設備(可能是以太網802.3)。 一些設備漢德爾最大的框架尺寸比其他設備。

您可以使用帶有選項mtu ifconfig來更改其值: ifconfig eth0 mtu 1492

這不是關於速度的直接; 通過增加MTU,您可以減少開銷,這是負責正確交付軟件包的數據,但最終用戶無法使用; 這可以提高速度,但僅適用於繁忙的交通;

此外,如果增加MTU,則容易增加丟棄的數據包數量(因為您具有固定的位錯誤概率和數據包中的更多位),最終導致重新發送的數據包等性能下降。所以這是開銷和數據完整性之間的折衷;

我猜它更多的是接口配置而不是你用程序控制的東西; 所以最好堅持使用'ifconfig'命令或找到適合Windows的等效解決方案。

設置接口參數的現代方法是通過sysfs

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

通過C,只需打開並寫為文件

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM