我有一个亚马逊 ec2 服务器,所有必要的端口都打开并配置了防火墙。服务器应用程序在特定端口上侦听客户端数据并以 ack 响应。但它看起来像服务器接收数据,然后发送确认,但客户端没有收到它。当我尝试在两个不同的 ec2 实例上启动服务器和客户端应用程序时它可以工作,但是如果客户端是在 Amamzon 之外的某个地方启动的,那么 ack 数据包永远不会到达它。
任何想法?
谢谢!
我有一个亚马逊 ec2 服务器,所有必要的端口都打开并配置了防火墙。服务器应用程序在特定端口上侦听客户端数据并以 ack 响应。但它看起来像服务器接收数据,然后发送确认,但客户端没有收到它。当我尝试在两个不同的 ec2 实例上启动服务器和客户端应用程序时它可以工作,但是如果客户端是在 Amamzon 之外的某个地方启动的,那么 ack 数据包永远不会到达它。
任何想法?
谢谢!
基本故障排除:
看起来服务器接收数据并以 ack 响应
呃,“看起来”?您是否在服务器上运行 TCPDump 以验证响应是否已实际发送?(并验证它是否已发送到正确的 IP/端口等)
您是否在客户端上运行 TCPDump 以查看数据包是否已被操作系统接收,但不知何故未传递到应用程序?( tcpdump -ni eth0 udp port 9999
)
您在使用 AWS VPC 吗?(VPC 防火墙可以阻止传出的数据包)
是否涉及其他防火墙?(即一个家庭路由器做 NAT/STUN/等。)你能在亚马逊以外的另一个“裸”服务器上试试吗?
您可以使用netcat
UDP 模式来验证它不是特定于您的代码吗?
您可以netcat
在其他端口上使用 UDP 模式来验证它不是特定于一个 UDP 端口吗?