Cでプログラム的にMTUを設定する
-
29-10-2019 - |
質問
クライアントは、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
.
インターフェイスパラメータを設定する最新の方法は、sysfsを使用することです ジェネラコディセタグプレ
Cでは、ファイルとして開いて書き込むだけです
所属していません StackOverflow