根据维基百科:
隧道协议通过使用数据包的数据部分(有效载荷)来承载实际提供服务的数据包来工作。
隧道使用分层协议模型,例如 OSI 或 TCP/IP 协议套件,但在使用有效载荷承载网络通常不提供的服务时,通常会违反分层。
承载网络通常不提供的服务是什么意思?
根据维基百科:
隧道协议通过使用数据包的数据部分(有效载荷)来承载实际提供服务的数据包来工作。
隧道使用分层协议模型,例如 OSI 或 TCP/IP 协议套件,但在使用有效载荷承载网络通常不提供的服务时,通常会违反分层。
承载网络通常不提供的服务是什么意思?
“隧道”涉及将特定层封装在同一层的另一个实例内(例如,网络层内的网络层数据包),或者封装在更高层内(例如,传输层连接内的网络层数据包),这与正常的层顺序相反。
隧道最常见的用途可能是 IPv4-in-IPv4,它由 VPN 软件(企业和商业)完成。
以互联网这样的仅支持 IPv4 和 IPv6 路由的网络为例。通常,这意味着您无法在互联网上使用其他网络协议,例如 AppleTalk、DECnet 或 ISO CLNP 1——组成该网络的大多数路由器根本无法识别此类数据包(即使少数能识别的路由器也不知道转发这些数据包的路由)。
但是您可以建立一个将 AppleTalk 封装在 IPv4 中的隧道 - 将整个“网络层”数据包放入另一个“网络层”数据包中 - 这样 Internet 就可以像 IPv4 一样传输它,只处理外部 IPv4 标头,直到隧道另一端的主机将其放回原生 AppleTalk 网络。
因此,在这个例子中,AppleTalk 路由并非互联网提供的服务,但隧道技术却允许 AppleTalk 无论如何都能在互联网上传输。(现实生活中确实存在一些“复古计算”网络,它们支持 IP 中的 AppleTalk、TCP 中的 X.25 等等。)
在半现代实践中,这已非常普遍地用于在通常仅提供 IPv4 的网络上提供 IPv6 服务(SiXXS 曾经提供此类隧道,而 Tunnelbroker.net 仍然提供),而现在你会发现 ISP 做相反的事情并使用隧道在仅 IPv6 网络上提供 IPv4 服务(我相信这称为 DS-Lite)。
顺便说一下, ISO CLNP 实际上是 IP 的“OSI 协议套件”等效协议。我从 NANOG/NSFNET 邮件列表存档中了解到,一些运营商早在 20 世纪 90 年代就曾使用 CLNP 进行路由,但即便如此,他们也很快切换到了纯 IP 核心,并通过 CLNP 隧道进行路由。(反之亦然;我的旧思科路由器既可以同时支持 CLNP-over-IP 隧道传输,也可以支持 IP-over-CLNP 隧道传输。)
这里提到的“数据包”或许是理解该过程的便捷试金石,但并非所有网络(此处指的是网络协议而非实例)都是基于数据包的。另外值得注意的是,互联网协议 (IP) 并不符合 OSI 模型,尽管后者的术语通常适用于前者。
所有网络都可以被视为几层抽象,将编码、加密、完整性、寻址等功能分离出来……隧道描述了将一个网络协议的某些层堆叠在另一个协议之上,甚至是同一协议的不同实例之上。
互联网 VPN 在 TCP/IP 或 UDP/IP 协议之上堆叠了 (TCP/UDP/ICMP)+IP 协议。但需要注意的是,组合协议栈可能分布在通信两端的多个设备上。
在文章的上下文中,“服务”一词与网络协议、寻址和路由有关,而不是与 IP 一起用于描述在 IP 之上运行的事物(SMTP、HTTP、SMB……)。
假设我在英国,要给德国的一个家庭寄送圣诞礼物,我会把每件礼物单独包装,并贴上一个写有收件人姓名的标签——后者是网络意义上的地址信息。然后,我会把这些礼物打包成一个包裹,并贴上邮政服务可以识别的邮政地址标签。这就是隧道技术的一个例子(它确实使用了数据包!)。德国邮政不知道该如何处理寄给汉斯叔叔的包裹——但邮政地址上的人知道。
相反,如果我把礼物送到那个地址,就不需要贴有邮寄地址标签的外包装了。我不需要通过邮政服务进行隧道投递。
除了其他答案之外,还有 IPsec隧道模式:
IPsec隧道模式在网络层运行,对IP数据包进行加密,封装成带有新IP头的新IP数据包。
这样就可以对主机之间的通信进行加密,而无需对应用程序1进行任何更改,而其他解决方案(如TLS/SSL)则需要进行更改。
问题主体询问:
有人可能会认为 IPsec 隧道并非直接添加了网络通常不提供的服务。然而,它只是“什么是隧道?”(也就是问题标题)的一个例子。
1 NordLayer IPsec(互联网协议安全)VPN文章包含以下内容,因此添加隧道可能会影响某些应用程序:
例如,机场中的某人可能需要连接到远程服务(例如 SQL Server 数据库),但由于存在防火墙而无法连接。
为了实现这一点,首先使用虚拟专用网络 (VPN) 连接建立隧道。
这使用资源(SQL Server)所在的远程位置的网络地址在两个点之间提供网络层连接。
“承载网络通常不提供的服务”是指您与您想要连接的目标机器之间的网络受到某种限制,并且无法以常规方式建立连接,但您仍然想要连接的情况。
例子可能包括:
要建立隧道,您必须在隧道两端各有两台计算机,并且它们能够使用网络允许的任何服务进行连接。例如,如果网络仅允许 HTTP/HTTPS 连接,则隧道两端都可以通过 HTTPS 连接,然后在 HTTPS 会话内发送任何类型的流量。“外部”网络只能“看到”可以通过的 HTTPS 流量,并且由于 HTTPS 流量是加密的,因此它“不知道”内部的内容。隧道两端的软件会将流量“打包”和“解包”到已建立的会话中。
隧道的种类很多,以下是一些示例: