質問

クライアントは、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 は、パケットごとの最大伝送ユニットを定義する番号です。それが大きいほど、データが速く送信されます。nSizeのmPackets / sを送信できると仮定すると、mが成長するとm*nも増加します。

私はあなたのクライアントがそのネットワーク機器のためにそのMTUを望んでいると思います(たぶんイーサネット802.3)。いくつかの機器は他の機器よりも最大のフレームサイズです。

ifconfig オプションmtutoを使用することができます。値を変更する:ifconfig eth0 mtu 1492

インターフェイスパラメータを設定する最新の方法は、sysfsを使用することです ジェネラコディセタグプレ

Cでは、ファイルとして開いて書き込むだけです

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top