通过UDP接收响应

时间:2009-11-29 08:40:04

标签: sockets udp

我见过应用程序通过UDP将数据包发送到某个端口上的IP并接收响应。响应到哪个端口? (顺便说一下,如果没有端口转发到我的电脑,路由器怎么知道响应是针对我的电脑的呢?)

问候,Neo_b

3 个答案:

答案 0 :(得分:9)

响应分配的端口取决于应用程序。 UDP是完全无状态的,因此在触发数据包之后,应用程序可以预期响应的唯一方法是它知道另一端将发送一个。根据UDP应用程序的不同,为了简单起见,我希望响应会出现在同一个端口上 - 对于TCP这样的协议来说并非如此,因为TCP具有故意随机(和高)的源端口。

要回答第二个问题,许多路由器,甚至廉价的家用路由器都会stateful packet inspection(SPI)。这样的事情可能会发生,但是如果我离开的话我就会被纠正:

[设置与客户端,路由器,Internet,服务器的阶段。]

  1. 客户端发出UDP数据包。
  2. 路由器将UDP数据包传递到Internet。
  3. 路由器记住客户端向服务器发送了UDP数据包,并在其内存中建立了映射。
  4. 服务器可能在同一端口上发送UDP数据包。
  5. 路由器接收数据包,并检查映射以找到最近与服务器通信的客户端。
  6. 路由器将数据包传递给客户端。
  7. 这是如何实现的特定于路由器,我想,但这是我对其工作原理的理解。

答案 1 :(得分:3)

如果我将消息发送到另一台计算机上的UDP端口,无论选择何种方式,无论从哪个端口发送消息,UDP数据报都会显示。我原本以为远程端会将该数据报的任何响应发送到该源端口。

我认为即使端口被防火墙或NAT设备更改,远程端看到来自特定端口的数据报并发送回复,防火墙/ NAT设备然后将该端口转换为原始源端口,同样适用。

答案 2 :(得分:2)

创建UDP套接字时,必须将其绑定到端口号。如果您不这样做,操作系统将分配ephemeral port.

另一方的应用程序必须知道此端口。当回复回复时,您的路由器可能不知道如何路由。有两种方法可以解决此问题

  1. 您可以明确配置路线 在某个特定的计算机上 端口。
  2. 您可以将路由器配置为 跟踪UDP连接 自动开通路线 特定时你的电脑 数据包已发送。 UPNP协议是 基于这个概念。