我公司开发和销售一个系统,其中一个或多个客户端设备部署在客户的网络中,它们在端口 443 上建立两个到云服务器的 websocket (TCP) 连接。
此设置在具有不同网络拓扑、防火墙、限制、双 NAT 后面等的不同位置上运行得很好。
问题出现在设备无法同时建立两个连接的一位客户身上:在启动期间,设备建立一个 websocket 连接(来自一个应用程序),几秒钟后,另一个(来自第二个应用程序)。在这个客户处,在建立第二个连接后,第一个连接就掉线了。
我不会过多地详细介绍无效的电子邮件和一次失败的会议,他们因为我们“缺乏知识”而指责我们。我只想说,他们很惊讶我们甚至预计这会起作用(它在其他防火墙、VLAN 和 NAT 后面的几十个其他位置上,无论是在测试还是生产中),我们听取了一个不足的解释为什么它可以' t 工作 - 基本上,他们的“解释”是:
IP 和端口对构成一个“套接字”,并且由于一个连接使用该套接字,因此不可能同时存在到同一个套接字的两个连接。防火墙发现到“套接字”的连接已经存在,它不会通过新的连接,所以只剩下一个。这是正常的、通常的防火墙行为,如果它在其他位置有效,那只是因为您没有在那里使用防火墙。
他们忽略了“套接字”存在于双方:源和目标,两个应用程序使用两个不同的源端口建立连接,防火墙也使用源套接字来识别连接,而不仅仅是目标套接字.
当被问及在网络中的其他客户端上浏览网页时出现的问题(现代网页会导致浏览器建立数十个连接,这可能会在大文件的情况下导致正常浏览非常慢,如果正在浏览大文件则无法正常浏览)从同一台服务器下载),我们得到了一个没有人理解的技术解释。
最后,出于各种原因,包括不与一群老派顽固的网络“工程师”争论,我们接受了他们的解决方案——连接将有两个独立的端口,并且他们承诺它会起作用。
我的问题是:是什么限制了单个客户端可以建立到某个 IP 和端口的连接数只能建立一个连接?我们无法获得详细的网络详细信息和拓扑,但无论防火墙类型(硬件、软件、专用机器、在路由器上运行)如何,都不会对同一个 IP:port 建立多个连接,这是某人会拥有的基本要求去主动、有意地阻止它?
我们真的“无能”,还是有意或无意地被欺骗了?