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