5

クライアントが MTU 制限を 1492 にするよう要求しました。

ソースコード(Cのプログラム)でそれを行う方法はありますか?

一般的にそれを行う他の方法はありますか?(ifconfig?)

MTU を特定の制限に変更する必要があるのはなぜですか? メリットは何ですか?そして最も重要なこと: MTU を変更すると、コードが壊れるリスクはありますか?

4

4 に答える 4

6

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

于 2016-01-14T14:03:28.963 に答える
3

MTUは、パケットあたりの最大伝送ユニットを定義する数値です。大きいほど、データの送信が速くなります。nサイズのパケットを送信できると仮定すると、mサイズが大きくなると、それもm大きくm*nなります。

あなたのクライアントは、そのネットワーク機器(おそらくイーサネット802.3)のためにそのMTUを望んでいると思います。一部の機器は、他の機器よりも最大のフレームサイズを処理します。

値を変更するオプションを指定してifconfigを使用できます。mtuifconfig eth0 mtu 1492

于 2011-05-05T20:53:08.473 に答える
3

直接速度ではありません。MTUを増やすことで、オーバーヘッドを削減できます。オーバーヘッドは、パッケージの適切な配信を担当するデータですが、エンドユーザーは使用できません。これにより速度が向上する可能性がありますが、トラフィックが多い場合に限ります。

また、MTUを増やすと、ドロップされるパケットの数が増える傾向があり(固定ビットエラー確率とパケット内のビット数が増えるため)、最終的には再送されたパケットなどのパフォーマンスが低下します。つまり、オーバーヘッドとデータの整合性の間の妥協点です。

これは、プログラムで制御するものというよりも、インターフェイス構成に近いと思います。したがって、「ifconfig」コマンドを使用するか、Windows用の同等のソリューションを見つけることをお勧めします。

于 2011-05-05T21:07:36.650 に答える