是什么
来自维基
隧道协议(英语:Tunneling Protocol)[1]是一种网络协议,在其中,使用一种网络协议(发送协议),将另一个不同的网络协议,封装在负载部分。使用隧道的原因是在不兼容的网络上传输数据,
或在不安全网络上提供一个安全路径。
隧道的客户机和服务器双方必须使用相同的隧道协议。
有什么用
- 可以在一个现有的网络上传输新协议的数据包
- 可以有效的利用现有的网络,包括协议,物理设备等。
- 不需要为新协议从上导下开发一整套对应的ISO协议栈。
我的理解
为了实现在两个完全不同的网络(比如说IPV6的包在IPV4的网络上传输),需要将IPV6的整个包体放在IPV4的数据部分,这样就能稳定的在IPV4网络上传递IPV6的包了。而且下面的数据链路层和物理层不需要关系上层传输的是什么协议的数据,等数据从A端到B端的时候,出了网络层,B端需要判断IPV4的包是否真的是IPV4的包,还是里面包的是IPV6的包,需要再按照IPV6的协议要求解析一遍?
这个时候问题就来了
需要解决的问题
- 怎么让上层解析出IPV6的数据包?
- 在IPV4协议的什么地方告诉上层,数据内容里面还有另外一层数据?
答案是:
隧道协议只负责传输内容,两端上层需要自己商议好如何解析数据内的内容
有哪些隧道协议
常见的隧道协议
- IP in IP (Protocol 4):
- IP in IPv4/IPv6
- SIT/IPv6 (Protocol 41):
- IPv6 in IPv4/IPv6
- GRE (Protocol 47):
- Generic Routing Encapsulation (通用路由协议)
- OpenVPN (UDP port 1194):
- Openvpn
- SSTP (TCP port 443):
- Secure Socket Tunneling Protocol
- IPSec (Protocol 50 and 51):
- Internet Protocol Security
- L2TP (Protocol 115):
- Layer 2 Tunneling Protocol
- VXLAN (UDP port 4789):
- Virtual Extensible Local Area Network.
PS: 参考维基百科
示例
VPN
可以基于底层的PPP(点对点传输协议)来实现建立专属网络的功能。过程大概是这个样子的
- vpn client利用PPTP在系统内建立一个虚拟网卡
- 计算机网络通讯客户端(例如:浏览器,微信什么的)借用系统接口将需要发送的数据封装成IP包,源地址为虚拟网卡地址。目标地址为期望访问的地址,比如说google.com。
- 虚拟网卡拿到IP包之后,PPTP驱动会按照PPP协议对IP包的完整内容包装到payload里面(这就是隧道技术)用一层新的IP头包裹,并将这个新包的目标地址设置为VPNServer。
- VPNserver收到这个包之后将payload内容拿出来,并按照IP协议再解析一边,拿到原始的目标地址,代为发送到google.com
- 收到google的回复,server将数据封装到IP包里面,再按照PPP协议分装,添加新的IP头发送到原始的虚拟网卡。
- 虚拟网卡将数据交由客户端处理
分类
隧道技术可分别以第二层或第三层隧道协议为基础。
第二层隧道协议对应于0SI模型的数据链路层,
使用帧作为数据交换单位。PPTP(点对点隧道协议)、L2TP(第二层隧道协议)和L2F(第二层转发协议)都属于第二层隧道协议,是将用户数据封装在点对点协议(PPP)帧中通过互联网发送。第三层隧道协议对应于OSI模型的网络层,使用包作为数据交换单位。
第三层隧道协议
IPIP(IPoverIP)以及IPSec隧道模式属于第三层隧道协议,是将IP包封装在附加的IP包头中,通过IP网络传送。无论哪种隧道协议都是由传输的载体、不同的封装格式以及用户数据包组成的。
参考:https://wiki.mbalib.com/wiki/%E9%9A%A7%E9%81%93%E6%8A%80%E6%9C%AF