Max*_*Max 1 client router udp portforwarding
在最近的一系列问题中,我已经提出了很多关于UDP,boost :: asio和c ++的问题.
我在Stackoverflow上似乎没有答案的最新问题是:
在客户机/服务器应用程序,这是相当好的,要求服务器在防火墙中打开一个端口,这样的消息被允许在.不过,这样做同样的客户端是绝对不是一个很好的用户体验.
TCP连接通常实现这一点,因为大多数路由器支持有状态数据包检查,如果原始请求来自本地主机,则允许响应数据包通过.
我不太清楚它如何与UDP一起工作,因为UDP是无状态的,并且没有"响应数据包"(据我所知).我应该如何在我的客户端应用程序中解释这一点?
谢谢你的回答!
UDP本身是无状态的,但防火墙通常不是.关于UDP的约定是,如果请求从中client:port_A发出server:port_B,则响应将从返回server:port_B到client:port_A.
防火墙可以利用这一点.如果它看到UDP请求从客户端发出,它会在其状态表中添加一个条目,让它识别响应,允许它们进入.由于UDP是无状态的,并且没有连接终止的指示,防火墙将通常实现超时 - 如果在该UDP地址对之间没有流量发生一段时间,则会删除防火墙状态表中的关联.
因此 - 要在客户端应用程序中利用此功能,只需确保服务器从用于接收请求的同一端口发回响应.