32134


aws 上の ubuntu で、`sudo apt-get update` の実行が異様に重たいインスタンスがありました。

最終的に、これは eth0 の MTU を 9001 -> 1300 にすることで改善したのですが、その際、 `sudo apt-get update`
の速度が、おおざっぱに体感で20倍ぐらい (それ以上かも?) になりました。

質問:

MTU とは何でしょうか。なぜこれを変更するとここまでネットワーク速度に影響があるのでしょうか。


CC BY-SA 3.0
2017-01-24T02:43:53.797
32098
2017-01-25T05:08:29.493
754
question
network
MTU を変更するとネットワークの速度が大きく変わるのはなぜ？


Ethernetのパケットの上限は１５００ Octetです。（８ビットのデータを、通信ではOctetと呼びます）
パケットにはデータ以外に付随する情報が含まれますので、１つのethernetのパケットで送れるデータ量は 1400 Octetぐらいです。

MTUをネットワーク経路を通じてパケットに入れられるデータの上限以下にすれば、送り出したデータがそのままパケットになって流れるので無駄が有りません。

MTUが9000だと、  
・9000 Octetのデータを送り出す。  
・１パケットに入らないので、データを分割して、それぞれを別のパケットにして送り出す。  
・受信した側は、分割して送られてくるパケットのデータを、ひとつにまとめる。  
というような操作を経て届きます。

これが、MTUが1400だと、  
・1400 Octetのデータを送り出す。  
・１つのパケットで送信  
・１つのパケットで受信され、そこからデータを取り出す。  
というように、パケットの分割、統合をする手間がかかりませんから、処理時間を含んだ通信速度は大幅に短縮されます。

これが、MTUを９００１から１３００に変更した事によって起きた事です。


CC BY-SA 3.0
2017-01-24T06:02:53.287
32106
2017-01-24T06:02:53.287
217
32098
answer


Ethernetの物理層において１パケットで送信可能なデータ量は1500Octetです。1Gbps以上の環境では１パケット1500Octetのままではオーバーヘッドが大きく通信速度が向上しないことからJumbo
Frameが用いられるようになりました。Jumbo
Frameに標準規格はありませんが、概ね１パケットで最大9000Octet～16000Octet送ることが出来るようになります。MTUが9001Octetに設定されていたのはJumbo
Frameに対応した環境下で高いパフォーマンスを出すためです。  
一方でインターネット接続において１パケットで送信可能なデータ量は1438～1500Octetです。IPパケットのサイズが、その物理層において１パケットで送信可能なパケットサイズを超える場合は、通信経路上のルーターでIPパケットを分割することになり、オーバーヘッドが大きくなります。  
MTUを9001Octetから1300Octetに変更する事で、インターネット接続においてIPパケットの分割が起こらなり、パフォーマンスが向上します。一方でLAN内におけるPC同士の接続はJumbo
Frameが活用されなくなり、パフォーマンスが低下している可能性があります。インターネット接続の速度を優先するのか、あるいはLAN内の通信速度を優先するのか、検討する必要があります。


CC BY-SA 3.0
2017-01-24T20:48:00.993
32120
2017-01-24T20:48:00.993
12774
32098
answer


MTUとは、通信相手との間で無変換で転送できるデータの最大値のことです。(無変換、の意味は、先に回答のあるように分割されない、の意味です)

どの程度の値であればよいか、については通信相手との間の途中ネットワークに依存するため、単純に求めるのは困難です。ただし、通常次の2つの方法で動的に最適値を求めてくれるはずです。

  1. 経路MTU検索 (RFC1191)
  2. TCPのMSSオプション (RFC879)

ですので、MTUが9001のままでも大抵最適な通信をしてくれると思いますが、  
ファイアウォール等があると(特に前者は)期待通りの動作をしなくなるため、通信経路の途中でパケット分割が生じます(これが速度低下を引き起こします)。こういう場合はすでに試されているように主導でMTUを小さくする必要があります。  
なお、必要以上にMTUを小さくすると、同じデータ量を転送するのに必要なパケット数が増加するため、IPヘッダ、TCPヘッダ分の通信オーバーヘッドが増大し通信速度が低下することもあります。注意してください。


CC BY-SA 3.0
2017-01-25T05:08:29.493
32134
2017-01-25T05:08:29.493
20098
32098
answer