我见过应用程序通过UDP将数据包发送到某个端口上的IP并接收响应。响应到哪个端口? (顺便说一下,如果没有端口转发到我的电脑,路由器怎么知道响应是针对我的电脑的呢?)
问候,Neo_b
答案 0 :(得分:9)
响应分配的端口取决于应用程序。 UDP是完全无状态的,因此在触发数据包之后,应用程序可以预期响应的唯一方法是它知道另一端将发送一个。根据UDP应用程序的不同,为了简单起见,我希望响应会出现在同一个端口上 - 对于TCP这样的协议来说并非如此,因为TCP具有故意随机(和高)的源端口。
要回答第二个问题,许多路由器,甚至廉价的家用路由器都会stateful packet inspection(SPI)。这样的事情可能会发生,但是如果我离开的话我就会被纠正:
[设置与客户端,路由器,Internet,服务器的阶段。]
这是如何实现的特定于路由器,我想,但这是我对其工作原理的理解。
答案 1 :(得分:3)
如果我将消息发送到另一台计算机上的UDP端口,无论选择何种方式,无论从哪个端口发送消息,UDP数据报都会显示。我原本以为远程端会将该数据报的任何响应发送到该源端口。
我认为即使端口被防火墙或NAT设备更改,远程端看到来自特定端口的数据报并发送回复,防火墙/ NAT设备然后将该端口转换为原始源端口,同样适用。
答案 2 :(得分:2)
创建UDP套接字时,必须将其绑定到端口号。如果您不这样做,操作系统将分配ephemeral port.
另一方的应用程序必须知道此端口。当回复回复时,您的路由器可能不知道如何路由。有两种方法可以解决此问题