我有点困惑端口转发和隧道之间是否有区别。我的结论是,端口转发器将应用程序数据转发到另一个端口,可能是远程主机上的另一个端口。另一方面,隧道并不直接承载应用程序数据,而是承载另一个 IP 协议的 PDU。那么是否可以说隧道是一种特殊类型的转发器,与普通转发器不同,普通转发器中的中介服务器直接连接到最终目的地并将数据转发到目的地,而隧道则将协议数据注入其操作系统网络堆栈以路由到最终目的地?
但这并不总是正确的。例如,SSH 隧道通常被称为安全隧道。但它们真的是隧道吗?这些安全通道中传输的数据是应用程序数据,而不是 IP 协议数据。
也许我分析过度了,它们指的是同一件事。
因此,对于以下场景,我有应用程序 A、B、C。A 是连接到 B 的客户端应用程序。B 只是将数据转发到应用程序 C。B 是否会被视为端口转发,因为数据流中没有添加任何额外的“值”?如果是这样,那么同样的场景会怎样,但假设 A 和 B 之间的连接未加密,而 B 和 C 之间的连接已加密。在这种情况下,B 现在是否会隧道传输数据而不是端口转发,因为现在有了加密的“增值”?
答案1
端口转发不会将一种协议的 PDU 包装到另一种协议中,因此它与隧道不同。端口转发通常是 NAT 设施的一部分,该设施接受来自允许端口的流量,然后将目标地址修改为配置的映射 IP 地址,并记录此信息,以便能够正确路由传出的流量。
通常,将一种协议的 PDU 封装到另一种协议中的唯一原因是隐藏或保护它,通常是出于安全原因。(PPP 可能是一个值得注意的例外)。因此,绝大多数(如果不是全部)现实世界的隧道场景将涉及用户隧道连接到服务器,然后该服务器可以将流量转发到其他地方,如果没有其他东西,则转发到该系统上的本地主机以到达另一种类型的服务器(HTTP 等)。通常,执行此操作的是某种隧道或访问服务器,即 SSH 服务器、VPN 服务器等。
答案2
隧道技术可以让你通过以下方式做几件不同的事情:封装另一种形式的数据中的数据:
- 安全性——您可以使用加密隧道通过不受信任的网络(例如未加密的 wifi 网络或公共互联网)安全地传输数据
- 隐蔽性——你可以在一个端口上使用隧道来传输通常在另一个端口上传输的数据,从而绕过网络安全,同时对客户端和服务器都透明
- 多功能性 - 您可以使用隧道连接两个设备或网络,使用传输网络的本机协议以外的其他协议。例如,您可以通过 MPLS 运行 TCP/IP
端口转发更加简单,它只是转发并可能路由网络上的连接。
答案3
@Bert 给出了一个很好的答案(+1),但我认为两者之间最大的两个区别是:
- 端口转发仅使用网络数据包封装中可用的数据即可执行。隧道需要检查数据包内的数据(至少要建立隧道)。
- 端口转发是“无状态的”,因为所有符合规则的数据都会被转发。隧道是有状态的,由网络协议外部控制,一个数据包中的数据与另一个数据包中的数据相关/依赖。
因此,端口转发可以由低规格网络设备执行,它所做的只是检查传入的端口/主机组合,重写信封,并将数据包重定向到其他地方。隧道需要在流中添加逻辑,这意味着更大的负载和更强大的系统来实现它。