如何从一个未知的服务器连接到客户端机器上的开放TCP端口?

3
我已经阅读了很多关于不同NAT穿透技术的文章,但我仍然不太清楚它是如何工作的。
如果我在客户机上打开TCP端口并向某个任意不存在的服务器发送请求(该服务器不会响应),那么我的客户端NAT现在将有一个打开的通道,对吗?如果我知道客户端的公共和私有IP以及端口号,能否使用另一台不知名的位于不同IP地址的计算机来访问该客户端端口?
还是说我的NAT会检查我的服务器数据包来自何处,并阻止它,因为它不是来自客户机原始请求的相同IP地址?
提前感谢您!
1个回答

6
为了回答您的问题,您需要了解一些NAT映射和过滤行为的知识。首先,让我介绍一下NAT的映射行为,
如果您从内部IP:端口通过NAT的IP:端口向任何地址发送数据包,则您的NAT会在您的内部和其IP:端口之间创建一个映射。否则,来自NAT外部的任何人都无法向您发送任何内容。
有四种类型的NAT,
全锥形NAT:如果您以前从内部IP:端口通过NAT的IP:端口发送过数据包,则任何外部主机都可以通过向NAT的IP:端口发送数据包来向您的内部IP:端口发送数据包。
地址限制锥形NAT:只有当从您的内部IP:端口至少通过NAT的IP:端口先前已经向该外部主机的IP地址发送过数据包时,外部主机才能通过向NAT的IP:端口发送数据包来向您的内部IP:端口发送数据包。在这里,外部主机的端口不重要,只需要IP地址相同即可。 端口限制锥形NAT:与地址限制相同,只是这次外部主机的端口很重要。至少一个先前从您的内部IP:端口通过您的NAT的IP:端口发送到该外部主机的IP:端口的数据包将允许该外部主机通过其IP:端口通过您的NAT向您发送数据包。

对称NAT:其映射行为与其他类型的NAT略有不同。对于前三种类型的NAT,无论您从哪里发送数据,它都将通过NAT的同一IP:端口。但是对于对称NAT,对于不同的目标,您的数据将通过NAT的相同IP但不同的端口进行传输。并且像端口限制锥形NAT一样,如果先前发送到该外部主机的IP:端口,则传入数据包将通过NAT被允许。

针对您的情况,只有当您的NAT是全锥形NAT时,某个未知的人知道您发送数据包到未知服务器的公共IP:端口,才能通过UDP传输向您发送数据。对于其他NAT,它将被阻止,因为您没有向该外部主机发送任何数据。但是对于您的TCP连接,即使他们知道您的私有和公共IP:端口,也无法向您发送任何数据,因为它们在不同的NAT后面。详细内容请参阅answer

请阅读wiki上的详细信息。


谢谢Tahill!那正是我所缺少的 :) - Ricky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接