ロジカルネットワークにてフラグメントされたパケットが到達しない事象

ロジカルネットワーク

2019年5月21日 (2021年4月30日:更新)

事象概要

IP通信では通信経路に設定されたMTU(Maximum Transfer Unit)に従い、MTUより大きなサイズのパケットは分割(フラグメント)して送信されます。

本事象ではICMP(ping等)において、VMのインターフェイスMTUの3倍以上の大きさ(4パケット以上に分割される大きさ)のパケットがロジカルネットワークに対して送信された場合に、ロジカルネットワークにて1番目のパケットの4番目以降の分割されたパケットが正常に転送されず、宛先サーバにて復元(リアセンブル)に失敗してパケットが破棄されます。

破棄されるのは1パケット目のみであり、2パケット目以降で同じ送信元IPアドレス、宛先IPアドレスおよびIdentifierの組み合わせで同様に分割されたパケットが一定期間内に連続して届いた場合は、すべての分割されたパケットが正常に転送され、正常に通信ができます。

 

対象リージョン

全リージョン

 

出力例

<MTUの4倍以上の大きさのpingを実行した場合の出力例(DF flag off)>

VMのインターフェイスMTUの3倍以上の大きさのパケットを送信して

分割された場合、1パケット目が廃棄されることが確認できます。

(-l はWindowsでパケットサイズを指定するオプションです。)

 

C:\Users\Administrator>ping 192.168.1.1 -l 9000

 

Pinging 192.168.1.1 with 9000 bytes of data:

 

Request timed out.

Reply from 192.168.1.1: bytes=9000 time<1ms TTL=64

Reply from 192.168.1.1: bytes=9000 time<1ms TTL=64

Reply from 192.168.1.1: bytes=9000 time<1ms TTL=64

Reply from 192.168.1.1: bytes=9000 time<1ms TTL=64

 

Ping statistics for 192.168.1.1:

   Packets: Sent = 5, Received = 4, Lost = 1 (20% loss),

Approximate round trip times in milli-seconds:

   Minimum = 0ms, Maximum = 0ms, Average = 0ms

 

Windows Serve 2016などpingの実行毎にIdentifierが変わらないOSの場合、一定期間内に同じ送信元IPアドレス、宛先IPアドレスの組み合わせでpingを実行した場合、全パケットが転送されることが確認できます。

なお、Linuxなどpingの実行毎にIdentifierが変わるOSの場合、一定期間内に再度pingを実行しても1パケット目が破棄されます。こちらの動作はOSの実装によって異なります。

 

C:\Users\Administrator>ping 192.168.1.1 -l 9000

 

Pinging 192.168.1.1 with 9000 bytes of data:

 

Reply from 192.168.1.1: bytes=9000 time<1ms TTL=64

Reply from 192.168.1.1: bytes=9000 time<1ms TTL=64

Reply from 192.168.1.1: bytes=9000 time<1ms TTL=64

Reply from 192.168.1.1: bytes=9000 time<1ms TTL=64

Reply from 192.168.1.1: bytes=9000 time<1ms TTL=64

 

Ping statistics for 192.168.1.1:

   Packets: Sent = 5, Received = 5, Lost = 0 (0% loss),

Approximate round trip times in milli-seconds:

   Minimum = 0ms, Maximum = 0ms, Average = 0ms

 

<MTUの4倍以上の大きさのpingを実行した場合の出力例(DF flag on)>

分割されずに転送できるMTUサイズを確認するには、Don’t Fragment flag(DF flag)をonとしてpingを実行する必要があります。

IF MTUより大きい場合、下記の通りfragmentが必要で転送できないことが

確認できます。

(-f はWindowsでDon’t Flagment flagをsetするオプションです。)

 

C:\Users\Administrator>ping 192.168.1.1 -l 9000 -f

 

Pinging 192.168.1.1 with 9000 bytes of data:

 

Packet need to be fragmented but DF set.

Packet need to be fragmented but DF set.

Packet need to be fragmented but DF set.

Packet need to be fragmented but DF set.

Packet need to be fragmented but DF set.

 

Ping statistics for 192.168.1.1:

   Packets: Sent = 5, Received = 0, Lost = 5 (100% loss),

Approximate round trip times in milli-seconds:

   Minimum = 0ms, Maximum = 0ms, Average = 0ms

 

対処方法

IPパケットの無用な分割を防ぐため、ロジカルネットワークに接続するリソースのMTUは以下に設定し、MTUサイズ内で通信してください。( 1 パケットのサイズがその MTU 値内に収まるようにし、フラグメントが発生しないようにしてください。)

データプレーン  :MTU 1500バイト

ストレージプレーン:MTU 9000バイト

データプレーンに接続するリソースで、MTUを1500バイトより大きくしたい場合、セグメントに接続する全てのリソースのMTUを同じ値に設定してください。同一セグメントに接続するリソース間でMTUが異なると、通信ができなくなる場合がありますので、値を変更する場合はご注意ください。

各メニューのMTU値の推奨値・初期値などは下記のページをご確認ください。

https://ecl.ntt.com/documents/service-descriptions/network-common/common.html