« ■更新完了 | トップページ | ■FTP 復活♪ »

2006.12.26

■FTP 不具合解消(MTU値)メモ

今回、少々珍しい現象に直面したので、忘れないようにメモ書きを。
Bフレッツをお使いで、FTP で大きめのファイルのアップロードだけ
できないとお悩みの人には少し役に立つかもしれません。
(……他に居るのか?ADSLの人も関係あるかも)


【現象】
・FTPで、大きめのファイルのアップロードができない。
 (途中で止まる・タイムアウトする・不安定)
 ※1KB程度の小さいファイルならアップロード可能。
 ※FTPログイン可能。ダウンロードは可能。

【環境】
・Bフレッツ
・ルータ:NETGEAR WNR854T (入替えたばかり)
・OS :Windows XP
・FTPクライアント:FFFTP (Ver 1.92a)

【解決方法】
以下を実施すると正常動作した。
(1) ルータのMTU値を正しく設定する。
  ・『基本設定』or『WAN設定』の「MTU サイズ (バイト)」を「1454」 にする。
   (※MTU=1454バイトはBフレッツの推奨MTU値)
(2) OSレジストリのMTU値を正しく設定する。
  ・使用するNICのMTU値を「1454」に変更して再起動。


【解析経過メモ】
外部のネットワークを使うと正常動作するため、
自宅内のみでの現象という事までは切り分け。

別ネットワークでは、同じPCとFTPクライアントで動作するので
主にブロードバンド環境の問題と推定。
ファイルサイズで挙動が変わるので、
データサイズorフィルタリング絡みのトラブルと推定。

ルータ設定、プロバイダ設定の
詳細を見直すが特に問題なし。エラーログなし。
Google等で調べても同じ現象がみあたらない。

…という状況では、完全にお手上げだったので、自力で情報収集しました。
Webアプリ開発のデバッグで使ってたキャプチャソフトで
直接FTP のやりとり情報を調べちゃる!(お仕事って意外に役に立つなぁ)

(1)パケットログを解析する。
 ・Ethereal(フリーのパケットキャプチャソフト)を使って、
  FTP 時のパケットログを取得。
 ・ftp と ftp-data のプロトコルでフィルタリングして状況を検討。
 →ftp-data でこちらのPCからデータを送信した後、
  相手から応答がこなくてリトライしてる模様。
 →こちらから送ったデータが届いてない or 消えてるっぽい?

 ・ftp-data プロトコルが使用してるポート番号をチェック。
 →問題が発生した時のポート番号でも、小さいサイズなら正常に通ってる。
 →ポート番号制限絡みではなさそう。

 ・応答が返らずリトライしてるデータサイズを調べる。
 →「FTP DATA: 1460 bytes」

って…明らかにオーバーしてるよっ!データが!∑( ̄▽ ̄;)
我が家はBフレッツなので、ルータ等では
MTU 値(1つのパケットの最大サイズ)が「1454 bytes」設定中でし。
MSS 値は「1414 bytes」、データ分割はそのサイズまでを求められてるのだ(汗)

(2)FTP アップロードが失敗する正確なデータサイズを調べる。
 ・ファイルサイズが 1414 bytes → 正常動作
 ・ファイルサイズが 1415 bytes → 失敗

 →設定中のMTU 値に反するパケットデータを送信しているから
  アップロードに失敗することが判明。これで原因ほぼ確定。


「出だしの状況確認が甘かったよ~ん(TT_TT)」と泣く。
初めから「1414 bytes」が限界と分かっていれば
Google での検索でも、すぐわかったかもしれん(涙)

多分、ルータが不正なパケットを捨てて外部に流していないか、
プロバイダかBフレッツの方で不正パケットを捨ててるかしてると思う。
…それは確かに間違った処理じゃないです、うん(涙)
…でも、ログの1つも出してほしかったよぉ(涙)

ここまでの調査で、MTU値に反するデータを送信することが原因だと判明。
ついでに、ルータがMTU値「1454 bytes」設定で正常に動作してた。
使ってるブロードバンド環境は変えられないので、
データ送信側を何とかするしかないよ~ん…と思いまして。
何故、FFFTP が「1460 bytes」で分割して送信するのか、
その最大サイズを変更できるか調査してみました。

google でMTU 設定の色んなサイトをにらめっこした結果、

・パケットサイズ「1460 bytes」は、FTP のデフォルト最大値。
・本来、MTU値のデフォルトは「1500 bytes」、PPPoEでも「1492 bytes」。
 Bフレッツの「1454 bytes」はちょい特殊。
・WindowsXP のレジストリにもMTU値設定があり、データ通信に影響する。
・FFFTP にはパケットサイズを変更する設定はなさそう。

規格とか仕様とか正確なところまで理解してませんが
だいたいこんな感じ…らしいです。

んで、これらの情報と、一応プログラマな自分の経験から
「FFFTP は、デフォルト値固定で動作してるか、
 レジストリの値見て内部切替えしてるんじゃないか?(・_・?)」
と予想する。だって、自分でソフト作るならそうするもん。
もしデフォルト値固定ならお手上げ。
パケットサイズ調整できる他のソフトを探すしかなくなっちゃう。
一縷の望みをかけて、レジストリ変更を試してみる。

(3) レジストリのMTU値を変更する。
 今回は以下の方法で行った。
 ・『いじくるつくーる』を使用。
   [ネットワーク]-[ネットワーク(LAN)]-「*最大転送単位(MTU)」
   ・使用するNICの値を「1454」に変更して再起動。

 他には以下の方法でも変更可能。
 ・『窓の手』を使用。
  [ネットワーク]-「インターフェースが一度に転送可能な最大データサイズ(MTU)」
  ・規定値のチェックを外して「1454」に変更。再起動。


★結果★
 正常にアップロードできるようになりました♪\(≧▽≦)/


パケットログも確認してみたところ、
「1460 bytes」で分割されてたデータが「1414 bytes」で分割されてる。
FFFTP かしこいっ!偉いぞっ!

多分、これでアップロード自体は大丈夫ぅ♪やったぜ、おいら♪
MTU値とセットのRWIN 値はちゃんと検討してないので少し不安。
しばらく様子見。…とはいえ、無事動くようになってホッとしました。

9月以降にルータを変更したんですよ。
きっと以前も同じサイズで送信する状態だったのだろうけど、
前のルータは不正サイズのパケットでも外に送り出してたんじゃないかな?
だから、気がつかなかったのかも。う~ん、勉強になりました。

FTP が不安定な方、
レジストリのMTU値も見直すと幸せになれるかもしれません。

お疲れ様でした。
であであ。

|

« ■更新完了 | トップページ | ■FTP 復活♪ »

コメント

まったく同じ症状でFTPがうまく働かず、悩んでいた際にこちらのサイトに辿り着きました。おかげさまで(とりあえず現在は)状態が安定しています。
対策を書き記しておいて下さって、本当にありがとうございました!

投稿: 通りすがり | 2008.03.24 01:41

助かりました。ありがとうございました。

投稿: 田舎男 | 2010.08.18 10:15

コメントを書く



(ウェブ上には掲載しません)




« ■更新完了 | トップページ | ■FTP 復活♪ »