为什么服务器需要端口转发,而客户端却不需要?

为什么服务器需要端口转发,而客户端却不需要?

每当我托管服务器时,我都需要在我的 NAT 设备上转发服务器的监听端口。

但是,如果我连接到远程服务器,则不需要转发用于从远程服务器传入数据的端口。

为什么会这样?

答案1

当您建立出站连接时,可以在数据包中看到目标地址,内部主机的源地址在数据包中,因此 NAT 框“仅”用其自己的地址替换源地址,并在内部表中设置一个条目,以便对于符合“此连接的特征”的数据包,它知道用原始源地址替换目标地址,因此数据包会返回给您。

对于服务器来说,数据包从外部进入 NAT,无法确定它是发往哪个内部主机。没有当前连接表。因此,您需要定义一条规则,说明“端口 22 的新连接请求应传递到此处的这个框”。

除此之外,计算机上运行的软件可以选择使用 NAT-PMP(Apple)或 UPnP(Microsoft 的协议)与任何本地 NAT 盒进行通信,以自动设置这些关联。但这只有在您不关心获得哪个面向外部的端口号时才真正有用。

答案2

传出连接被假定为您想要的,因此默认情况下允许连接。反之则不然;您不会希望任何流氓互联网客户端连接到您计算机上的任何服务器,因此您必须明确打开它。否则,这就像将您的服务器直接放在没有防火墙的互联网上一样。

答案3

NAT 会阻止传入连接,并允许传出连接。一旦建立连接,数据包便可以双向传输。

如果您设置了服务器,并且使用 NAT,则必须在您这端处理 NAT。如果您连接到服务器,并且他们使用 NAT,则必须在他们那端处理 NAT。

如果 NAT 阻止了传出连接(实际上并没有,但是假设它阻止了),那么您将无法访问互联网。

相关内容