[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[linux-users:91941] カーネルのECNサポート(TCP)


こんにちは。

カーネル2.2.20から2.4.18にアップグレードしたところ、
とあるFTPサーバに接続できなくなってしまいました。
他のFTPサーバには接続可能でした。

WindowsパソコンからはそのサーバへFTP接続できたので、
ファイアウォールのログを調べたところ、接続できない
ときは、CWRとECEというフラグが記録されていました。
書籍ではこのフラグについて述べているものが
見当たりませんでしたが、インターネットでいくつか
資料が見つかりました。まとめた結果を投稿します。
御参考になれば幸いですし、おかしなところがあれば
教えてください。

Linuxカーネルのバージョン2.4.0から新しく追加された
コンパイルオプションに、
   CONFIG_INET_ECN
というものがあります。
TCPパケットのCWRフラグとECEフラグを利用して、
ネットワークの混雑状況をルータがクライアントの
コンピュータへ伝える機能の設定です。

しかし一部のルータはこの機能に対応しておりません。
またLinuxカーネル(バージョン 2.4.18)の動作にも
バグがあるようで、有効になっていると、通信が
不可能になる場合があります。

参考文献の[b]では、CWRとECEフラグ付きのSYNパケットが
タイムアウトしたら、それらのフラグをクリアした
SYNパケットを再送すると書いてありますが、パケットの
ログを見ると、CWRとECEフラグ付きのSYNパケットが
送り続けられていました。そして、サーバからの
SYN-ACK返答はこの間 ありませんでした。通信が
できなかった原因は、このフラグにあると思われます。

この機能の設定は次の方法で確認できます。
   % cat /proc/sys/net/ipv4/tcp_ecn
出力が1ならば有効、0またはファイルが
なければ無効になっています。

もし有効ならば、以下の方法で一時的に無効に
することができます(rootユーザで実行)。
  # echo 0 >/proc/sys/net/ipv4/tcp_ecn

また、永久に無効にしたい場合は、rootユーザになり、
次の行を /etc/sysctl.confファイルに追加してください。
   net.ipv4.tcp_ecn = 0
そして、次のコマンドをrootユーザで実行してください。
  # sysctl -p /etc/sysctl.conf</tt>

この操作の後は、問題のサーバとFTPで通信することが
可能になりました。

参考
[a] http://www.linux.or.jp/JF/JFdocs/Configure.help/
      CONFIG-Configure.help-2.4.17/CONFIG_INET_ECN
[b] http://www.icir.org/floyd/papers/ECN.Oct2000.txt
   "Negotiating ECN-Capability in a TCP connection"

以上です。

------------------------------------------------------------
SUZUKI Yasuhiro
      living in Edogawa-ku, Tokyo, Japan
  ysuzuki _at_ bb.mbn.or.jp
  yasu _at_ ysuzuki.net
  http://plaza8.mbn.or.jp/~yswww/myself/ (only in Japanese)

この情報があなたの探していたものかどうか選択してください。
yes/まさにこれだ!   no/違うなぁ   part/一部見つかった   try/これで試してみる

あなたが探していた情報はどのようなことか、ご自由に記入下さい。特に「まさにこれだ!」と言う場合は記入をお願いします。
例:「複数のマシンからCATV経由でipmasqueradeを利用してWebを参照したい場合の設定について」
Follow-Ups: