2013-07-25 51 views
0

我有一台亚马逊ec2服务器,其中包含所有必要的端口,并且配置了防火墙。服务器应用程序监听某个端口上的客户端数据并响应ack。但它看起来像服务器接收数据,然后发送确认,但客户端没有收到它。当我尝试在两个不同的ec2实例上启动服务器和客户端应用程序时,它起作用,但如果客户端在Amamzon之外的某个地方启动,那么ack数据包将永远达不到它。无法接收来自亚马逊EC2服务器的UDP数据包

有什么想法?

谢谢!

回答

1

基本故障排除:

它看起来像服务器接收的数据和ACK

尔回应, “看起来像”?你是否在服务器上运行TCPDump来验证响应是否被实际发送? (并验证它是否发送到正确的IP /端口等)

您是否在客户端上运行TCPDump以查看数据包是否被操作系统接收到,但以某种方式未传递到应用程序? (tcpdump -ni eth0 udp port 9999

您使用AWS VPC吗? (VPC防火墙可以阻止传出数据包)

是否还有其他防火墙参与? (也就是做一个NAT/STUN /等的家庭路由器)你能在亚马逊以外的另一台“裸”服务器上试用吗?

您可以使用netcat的UDP模式来验证它不是特定于您的代码吗?

您可以在其他端口上使用netcat的UDP模式来验证它不是特定于一个UDP端口吗?

+0

这是一个Windows服务器。 VPC已禁用。正如我所说 - 它适用于两台亚马逊服务器和两台非亚马逊计算机之间。 – Tutankhamen

+0

我在客户端有一个防火墙,但我认为这个防火墙应该通过所有的“响应”udp数据包回来,对吗?换句话说,我从本地地址为192.168.1.10:50000的客户端发送udp数据包到全局地址为54.54.54.54:44444的服务器...因此,我的路由器使用本地地址创建记录并分配时间全局地址,类似于33.33.33.33:56784。现在,即使路由器防火墙或计算机防火墙上的所有端口都关闭,从服务器54.54.54.54:44444到33.33.33.33:56784的所有数据包都会被转发到客户端的本地地址。这是对的吗? – Tutankhamen

+1

是的,这通常是他们的工作方式,但从不承担任何事情。家庭路由器在实践中变化很大。有些超时时间很短(一两分钟)用于识别响应,有些响应超过几十个连接时会丢弃响应等。另外,一些家庭ISP为您过滤各种“危险的”UDP端口。 – BraveNewCurrency