クライアントが MTU 制限を 1492 にするよう要求しました。
ソースコード(Cのプログラム)でそれを行う方法はありますか?
一般的にそれを行う他の方法はありますか?(ifconfig?)
MTU を特定の制限に変更する必要があるのはなぜですか? メリットは何ですか?そして最も重要なこと: MTU を変更すると、コードが壊れるリスクはありますか?
クライアントが 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用の同等のソリューションを見つけることをお勧めします。