以 C 语言编程设置 MTU

cat*_*eof 6 c sockets network-programming mtu

客户端请求 MTU 限制为 1492。

有没有办法在源代码(C 程序)中做到这一点?

一般情况下还有其他方法吗?(如果配置?)

为什么有人需要将 MTU 修改到一定的限制?有什么好处?最重要的是:更改 MTU 是否存在破解代码的风险?

Ale*_*sar 7

使用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
}
Run Code Online (Sandbox Code Playgroud)

它至少可以在 Ubuntu 上运行,请参阅man netdevice


小智 3

这与速度无关;而是与速度有关。通过增加 MTU,您可以减少开销,这些数据负责正确传送包,但最终用户无法使用它;这可以提高速度,但仅限于交通繁忙的情况;

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

我想它更多的是一个界面配置,而不是你用程序控制的东西;因此,最好坚持使用“ifconfig”命令或找到适用于 Windows 的等效解决方案。