NAT在其表中保留TCP转换字段多长时间?

时间:2015-09-08 18:20:16

标签: c# tcp network-programming p2p

我想知道我是否可以在机器A上创建TCP客户端并将其连接到远程主机(S),然后从客户端关闭连接并在同一台机器(机器A)上创建一个TCP侦听器用于客户端的端口(例如端口1234)。现在具有A端点的服务器将其发送到另一台机器(B),B可以连接到A的公共端点(例如端口4567)上的A和A网络上的NAT将SYN重定向到A,因为它的表中仍然有翻译(4567 - > 1234)。 我想知道在断开第一个连接和连接节点B之间需要多长时间。

1 个答案:

答案 0 :(得分:1)

我同意Peter Duniho的评论。但我正在用通常的NAT行为回答你的问题。

你想做什么是行不通的。 NAT与UDP和TCP协议的行为不相同。如果协议是UDP并且A的NAT类型是完全锥形,那么你所说的将会起作用。

为什么TCP不起作用

如果先前通过NAT将SYN发送到该IP:端口,则NAT允许从IP:端口传入SYN。而这两个传入和传出的SYN必须在NAT之外相互交叉。如果在传出SYN穿过NAT之前传入的SYN到达,则NAT将丢弃该数据包并且可以发送RST消息作为回复。此过程称为TCP hole punching

此打孔不适用于所有NAT。为此,NAT需要支持同时打开连接。

NAT在其表格中保留TCP转换字段的时间

翻译可能会超时并且此超时值完全取决于实施。 NAT也可以接收TCP RST消息并删除绑定。

因此底线很难定义NAT行为,因为它没有指定的协议。你必须做实验并亲自体会。