ネットワークの設計と運用
拠点間のVPNのトンネルを通して、遠くのWebサーバと通信している。TCPのコネクションは確立でき、小さなページは表示されるが、大きなファイルのダウンロードだけが途中で止まってしまう。トンネルの中のMTUは1400バイトで、サーバは1500バイトのパケットを分割禁止(DFビットを1)にして送っている。また、サーバの手前のファイアウォールはICMPをすべて捨てる設定になっている。原因として最も適切なものはどれか。
- ADNSの名前解決が失敗しているため
- BTCPの受信ウィンドウが小さすぎて、一度に送れるデータの量が足りないため
- C大きすぎるパケットを捨てたルータが送る、分割が必要であることを知らせるICMPのメッセージがサーバに届かず、サーバがパケットを小さくできないため
答えと解説を見る
正解:C. 大きすぎるパケットを捨てたルータが送る、分割が必要であることを知らせるICMPのメッセージがサーバに届かず、サーバがパケットを小さくできないため
経路MTU探索では、送信元はDFビットを1にしてパケットを送り、途中のMTUより大きいパケットを捨てたルータが、ICMPのメッセージ(IPv4では分割が必要、IPv6ではPacket Too Big)で通れる大きさを知らせます。このメッセージがファイアウォールで捨てられると、サーバは大きなパケットを送り続け、それが毎回捨てられるので、大きなデータの転送だけが止まります(経路MTUのブラックホール)。コネクションの確立や小さな応答は、パケットが1400バイトより小さいので問題なく届きます。対策は、このICMPのメッセージを捨てないようにすることや、トンネルの入口のルータでTCPのMSSを小さく書き換えることです。IPv4とTCPのヘッダをそれぞれ20バイトとすると、MTUが1400バイトならMSSは 1400 − 20 − 20 = 1360 バイトにします。
- A. 名前解決ができなければ、コネクションの確立や小さなページの表示もできません。
- B. 受信ウィンドウが小さいと転送は遅くなりますが、止まってしまうことはなく、パケットの大きさとも関係ありません。
- C. 正しい。ICMPが届かないと経路MTU探索が働かず、大きなパケットだけが捨てられ続けます。