我有一个客户端和服务器,基于TcpListener
和 TcpClient
。客户端连接到服务器并交换一些数据。当我在本地运行时,一切正常。
但是当我将服务器放入 Azure 容器服务上的 Docker 容器中并将客户端连接到它时,会发生以下情况:
- 客户端成功连接到服务器
- 客户端和服务器成功握手
- 数据传输开始
- 大约 20 秒后(这应该需要几分钟)整个事情就爆炸了。服务器报告“连接被对等方重置”,客户端报告“读取超出流末尾的错误。”
双方似乎都认为对方是有问题的一方。当我在本地运行时,一切都按预期运行,这让我相信问题介于两者之间。
建立连接不存在根本问题,例如防火墙妨碍,因为我已经在两端验证了它们正在连接并执行握手。客户端不是"slamming the phone down" ;它期待来自服务器的更多数据。但“连接被对等方重置”意味着某个地方有人故意发送 RST 数据包。
有什么好的方法可以找出干扰我的数据传输的因素吗?
最佳答案
对于 Azure 容器服务(无论是 Azure 容器实例还是 Azure Kubernetes 服务),间歇性连接问题的主要原因是在建立新的出站连接时达到限制。您可以达到的限制包括:
- TCP 连接
- SNAT 端口
请参阅:
- Detecting SNAT port exhaustion on Azure Kubernetes Service
- Troubleshooting intermittent outbound connection errors in Azure App Service (即使是关于 Azure 应用服务,其中大多数仍然适用)
更多信息:
关于c# - 如何确定是什么正在重置我的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70130993/