370
回編集
(全体的に加筆) |
m (表記の統一および一部補足) |
||
[[パケット通信]]を用いて一定サイズのデータを送受信する場合、パケット長の決定が通信パフォーマンスに影響する。
通信中にデータ
[[インターネット]]のようなWAN環境では、パケットが宛先に到着するまでの間に、様々なMTUの伝送路を通る可能性がある。もしフレーム長がMTUを超えていた場合、Internet Protocol(IP)のような上位層は通常、パケットの断片化・再統合を行う。しかし、このようなパケットの再構成はルーターの処理負荷増加および通信パフォーマンス低下の原因となるため、断片化の起こらないパケット長がわかっている場合は、あらかじめパケット長を制限して送信するという考え方もある。ただし、その値は宛先および経路によって異なるため、あらかじめ静的に設定しておくには、何らかの割り切りが必要になる可能性がある。
== 経路MTU探索 ==
IPではRFC 1191で定義される経路MTU探索(Path MTU Discovery)を使うことで、終端まで断片化を行わずに転送できるMTUを動的に検出できる。これは、パケットに断片化禁止のフラグ(Don't Fragment = DFフラグ)を設定しておき、MTUの問題で転送できない経路に到達した際はその旨を[[Internet Control Message Protocol|ICMP]]パケットで送信元に通知して、フレーム長を再調整するという仕組みである。ICMPは、転送できなかったルーターから、送信元ホストへ送信される。
転送できなかったことを通知するICMPパケットは、Type 3(Destination Unreachable Message)のCode 4(fragmentation needed and DF set)である。「Datagram Too Big」などと呼ばれることもある。ただし元々RFC 792の形式では未使用となっていた領域に、RFC1191では「Next-Hop MTU」を割り当てている。この値は、断片化を必要とした伝送路のMTUなので、送信元が再試行する際に経路MTUの次の候補値として使用できる。RFC 4884は、この変更を反映している。もしルータが古い形式にしか対応しておらず、Next-Hop MTUに未使用領域として0を格納している場合、次の候補値を選ぶためには、何らかの推測を行なうことになる。結果として、再試行の回数が増えたり、最適値より小さめのMTUを選択したりする可能性が
=== 経路MTU探索に関する問題 ===
経路MTU探索は、RFC 1191で定義されたとおりに動作すれば、断片化を必要としない最大のMTUを検出することができる。しかし現実には、設定の問題で正常に機能しない場合が珍しくない。問題がある場合の典型的な挙動は、通信を開始することはできるが、経路MTUより大きなサイズのフレームが現れた時点でタイムアウトするというもの
いくつかある問題の中でも、Path MTU Discovery Black Hole(経路MTU探索ブラックホール)と呼ばれるケースは特に有名である。このケースは[[ファイアーウォール]]等でICMPパケットをフィルタしている場合に発生する。「Datagram Too Big」メッセージが送信元に届かないため、送信元はパケットが失われたことに気付かず、タイムアウトしてしまう。ICMPをフィルタする場合でも、少なくとも上記のType 3 Code 4のものだけは通す必要がある。もしそれができないのであれば、経路MTU探索をやめて断片化を許す設定に変更することになるだろう。
ただし現実には、自ホストの設定を変更することはできても、通信相手
MSSは本来、TCPコネクションの両端が設定する項目である。しかし最近のブロードバンドルーター等は、TCPセグメントの転送時にMSSオプションを書き換える機能を持っている。この機能を使えば、さらにMTUの小さな伝送路を通ったり、通信相手がMSSオプションを無視したりしない限り<ref>{{Cite web
|
回編集