ラップトップからルーターへのギガビットイーサネット接続と、インターネットへのIPv6接続が機能しています。 インターネット上のサイトから、最大10000バイトのサイズの非常に大きなパケットを受信できます(wiresharkによる)。 (編集:Linuxの「一般的な受信オフロード」であることが判明)しかし、何かを送信しようとすると、ローカルコンピューターがipv6の1500バイトをわずかに下回る断片になります。 (ipv4では、少なくとも1514バイトのtcpパケットをインターネットに送信できます。構成された6128のmtuまでのパケットでpingを実行できますが、ブラックホールになっています。)
私はubuntu12.04にいます。 ip link set dev eth0 mtu 6128
とNetworkManagerアプレットGUIの両方を使用して、eth0の6128(受け入れる最大値)のmtuを設定し、接続を再開しました。 ip link show eth0
は、6128mtuが実際に設定されていることを示しています。 ip -6 route
は、カーネルが認識しているパスのいずれにもmtuが設定されていないことを示しています。最大6128バイトのパケットでipv4をpingできます(応答はありませんが)が、ping6 myrouter -c3 -s1500 -Mdo
を実行すると、エラー応答が返されます自分のコンピューターからパケットは大きすぎてmtuは1480です。Wiresharkで何も配線されていないことを確認しました。応答は実際に自分のコンピューターによって生成されます。
では、どうすればコンピューターでより大きなmtuを使用できるようになりますか?
あなたが見ているのは、おそらくジャンボフレームではありません。結局のところ、インターネットの99.9%のようなものが1500バイト以下のMTUで実行されています。おそらく、パケットの合体を行うのはカーネルまたはネットワークカードだけです。
これは、通常、Generic Recieve Offload(GRO)またはLarge Receieve Offload(LRO)と呼ばれる機能を使用して行われます。これが機能する方法は、単一のフロー内のパケットが識別されてマージされ、TCP/IPスタックに送られることです。これにより、スタックへのラウンドトリップの量が減少するため、CPUサイクルを大幅に節約できます。
これを試してください:ethtool -K $ INTERFACE gro off
これにより、この機能がオフになり、wiresharkがより幸せになります(CPUではありませんが)
ローカルでより高いMTUを使用することもできますが、このような機能と、もちろんこれまでになく高速なハードウェアにより、正確には購入できなくなります。また、それは管理の悪夢になる可能性があります。バグのあるドライバーやハードウェアがたくさんあり、オペレーティングシステムでDHCPまたはRAを介してMTUを設定するためのさまざまな程度のサポートがあります。特定のブロードキャストドメイン内のすべてのデバイスで同じMTUを実行する必要があるため、ジャンボフレームが実用的でないことがよくあります。
MTUは主にローカルで使用されます。複数のネットワークホップ(ルーター+インターネットなど)でジャンボフレームを使用するのは難しいため、ほとんどの場合機能しません。たとえば、DSLは通常、 Path MT を1492バイトに制限します。原則として、パスMTUは、参加しているルーター間の最小リンクMTUによって決定されます。パス全体を制御し、リンクごとに大きなMTUを設定しない限り、コンピューターだけでMTUを増やしても何も起こりません(LAN速度を向上させる場合を除く)。
Stefan Seidelのコメントに基づいて、その方法を見つけました。 ip
コマンドが表示しない別のmtu設定があることが判明しました。 /proc/sys/net/ipv6/conf/eth0/mtu
に高い値を設定すると(コマンドSudo sh -c "echo 0 > /proc/sys/net/ipv6/conf/eth0/mtu"
は私が望んでいたことを実行しました。(それは大いに役立ったわけではありませんが、ルーターは実際に大きなフレームをドロップしました。)この値はルーターアドバタイズメントを通じて定期的に更新/リセットされます。RA 0
の下の同じフォルダにあるaccept_ra
に/proc
を書き込むことで無効にできます。