簡単に試してみる
c#.net3.5を使用してカスタムFTP実装を作成しました。システムは、接続の管理にTcpClient(アクティブモードの場合はTcpListener)を使用します。1つのインスタンスで奇妙な動作をしているので、考えられる原因を尋ねたいと思います。
クライアント自体は社内でうまく機能しており、クライアントのかなりの割合がそれに満足しています。しかし、私には理解できないものがあります。私はwiresharkの痕跡を送られてきましたが、本当の喜びはありません。クライアントマシンは、(クライアントの説明から)大きなネットワークインフラストラクチャであると私が信じているものの背後にあります。ネットワークの外部からは、同じサーバーへの接続が魅力のように機能します。これが私が見ているものです。
パッシブモードで動作している私のクライアントでは、データ接続のためにtcpハンドシェイク要求が送信されます(サーバーはパッシブモードに入り、ポートを指定します)が、確認応答されません。これにより、再試行と最終的なタイムアウトが発生します。
Filezilla(およびWindowsエクスプローラーとIE ...)クライアントでは、再びパッシブモードを使用して、接続は問題なく通過します。迷惑なことに、これはクライアントと私の上司がコードに指を向ける原因になっています。
Wiresharkのトレースを調べてみると、TCPフレーム間の違いはわかりません。すべての制御接続はポート21に到達し、両方のシナリオで確認されます。フラグも同様です。この場合、ポート52000+が大きい(ただし、私が持っているトレースでは同じではない)ことを除いて、データ接続にも同じことが当てはまります。
低レベルのプロトコルの問題に取り掛かるとき、私はネットワークプログラミングの専門家ではなく、より大きなネットワークの警告についての私の理解は非常に限られています。開発者として、私はすぐに「FIREWALL ISSUE」と叫びますが、それは誰にとっても実際には何も解決しません。
最後に、この種の動作を引き起こす可能性のあるハードウェア/ファイアウォールの種類を知っている人はいますか?アプリケーションレベルでトラフィックをブロックしているのではないかと疑っていますが、わかりません。
読んでくれてありがとう。