【发布时间】:2011-12-30 14:05:03
【问题描述】:
尽量简短
我使用 c# .net 3.5 编写了一个自定义 FTP 实现。系统使用 TcpClient(主动模式为 TcpListener)来管理连接。在一个实例中出现奇怪的行为,我想询问可能的原因。
客户本身在内部工作得很好,我们很大一部分客户对此感到满意。但是,我们有一个我无法弄清楚。我被发送了wireshark的踪迹来探查,但没有真正的快乐。客户端机器是我认为(从客户端描述)成为大型网络基础设施的背后。从网络外部,与同一台服务器的连接就像一个魅力。这就是我所看到的。
对于我的客户端,在被动模式下运行,发送 tcp 握手请求以进行数据连接(服务器进入被动模式并指定端口),但从未得到确认。这会导致重试并最终超时。
使用 Filezilla(和 Windows 资源管理器,以及 IE...)客户端,再次使用被动模式,连接没有问题。令人讨厌的是,这导致客户和我的老板指责代码。
通过wireshark 跟踪,我看不到TCP 帧之间的任何差异。所有控制连接都命中端口 21 并在两种情况下都得到确认。标志是相似的。同样适用于数据连接,除了在这种情况下它是一个高数字端口 52000+(但在我的跟踪中不一样)。
当我们开始处理较低级别的协议问题时,我并不是网络编程方面的专家,而且我对更大的网络警告的理解非常有限。作为开发人员,我立即大喊“防火墙问题”,但这并不能真正为任何人解决任何问题。
最后,有谁知道什么样的硬件/防火墙会导致这种行为?我怀疑某些东西会阻塞应用程序级别的流量,但你永远不知道。
感谢阅读。
【问题讨论】:
-
这引出了一个问题:既然已经有大量 FTP 实现,为什么还要编写自己的 FTP 实现?
-
一个好问题,两个原因。第一:作为一般规则,该部门不赞成 3rd 方库(微软的 FtpWebRequest 是垃圾)。第二:我们希望灵活地根据客户反馈包括代理支持。
标签: c# .net ftp firewall passive-mode