【问题标题】:Can I use different receive/send ports on UDP server for client that are behind the NAT?我可以在 UDP 服务器上为 NAT 后面的客户端使用不同的接收/发送端口吗?
【发布时间】:2020-03-09 07:08:31
【问题描述】:

我编写了为 NAT 后面的客户端提供服务的 UDP 服务器。客户端向公共 IP 和一些预定义的端口发送请求。服务器接收消息,创建(从池中获取)线程和 将消息传递给线程(处理程序)。

问题:我可以使用新的套接字(不同的端口)来发送响应,还是应该使用接收请求的相同端口(套接字)?

【问题讨论】:

    标签: udp nat


    【解决方案1】:

    您需要从服务器上接收请求的相同 IP、端口发送请求,并发送到您从中获取数据的客户端上相同的公共可见 IP、端口。否则 NAT 将无法将数据包中的 IP 和端口转换回 NAT 后面的原始客户端。

    您可以通过使用绑定到服务器 IP 和端口而不连接到特定客户端的单个服务器套接字来实现此要求。然后使用recvfrom接收数据,sendto发送,使用recvfrom返回的地址作为sendto中的目标。

    【讨论】:

    • 是的,我明白了。但在这种情况下,服务器端的所有通信都应通过单个套接字(端口)执行。对吗?
    • @bw_dev:理论上可以将多个套接字绑定到相同的服务器端 IP 和端口,但连接到不同的客户端。这些也可以,但单插座的设计可能更常见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    相关资源
    最近更新 更多