以编程方式在C中设置MTU

客户要求MTU限制应为1492。

有没有办法在源代码中执行此操作(C中的程序)?

有没有其他方法可以做到这一点? (ifconfig的?)

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

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

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

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

使用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