Tunnel Analysis (IPIP&GRE)
因项目需要,基于Kubernetes平台主要分析和测试了一下Open vSwitch和Calico组件作为网络平面的功能与性能情况,这两个组件各自都可使用隧道技术(GRE in OVS & IPIP in Calico)进行跨节点互通。
About Tunnel
隧道技术说白了就是将下一层的数据包封装到上一层或者同一层的协议中进行传输,经过发送端和接收端相关的程序或者内核模块进行数据包解析,从而实现网络之间的穿透;内核中的tunnel可以通过ip tunnel help中看到,当前有五个:ipip、gre、sit、isatap和vti。
IPIP:将IP层封装在IP层的隧道技术,作用实际是一个基于IP层的网桥。普通的网桥是基于MAC的网桥,根本不需要IP,而IPIP则通过两端IP层的路由做一个隧道,将两个本来不通的网络点对点连接起来;
GRE:是IPIP协议的更进一步版本,在报文的内层IP与外层IP之间增加了一个额外的GRE包头;由于报文格式发生了变化,相比IPIP功能更加强大灵活一些,能支持广播协议,从官方的描述上来说可以取代IPIP;
SIT和ISATAP:基于IPv6 over IPv4的隧道技术,这里涉及的东西比较多,放在下一次分析介绍;
VTI:Virtual Tunnel Interface,是一个更灵活版本的VPN(Virtual Private Network),比如IPSec VTI之类。
IPIP & GRE
GRE(Generic Routing Encapsulation)和IPIP(IP in IP)是两个比较相似、经常被混淆的隧道技术,在这里记录一下他们两者的原理和区别。
IPIP封装就是字面上的意思,将一个IP包封装在另一个IP包内部,外层数据包的协议头基本如下所示;从原理上来说,IPv4和IPv6的任何组合都是技术上可行的,但是这个需要取决于运行平台的支持,一般来说IPv4 in IPv4、IPv6 in IPv6及IPv6 in IPv4是比较通用支持的。
GRE封装比IPIP模式增加了一个额外的GRE包头,GRE包头长度从4 bytes到16 bytes不等,取决于使能了GRE的哪些可选特性;从原理上来说,GRE协议理论上可以封装任何有效的三层协议类型,而IPIP协议只能封装IP协议。
默认来说,GRE包头是以最小的4 bytes形式存在,仅包含了checksum/key/sequence-datagrams,其他的一些选项可以独立的打开和关闭。
Comparision of IPIP & GRE
IPIP的Tunnel是一对一的,除了端点的hostA和hostB之外,中间经过的任何设备是看不到里面的包头,跟普通的包没有什么区别。
GRE的Tunnel就不一样了,原理上就与SIT、IPIP这些Tunnel存在不同;虽然从报文上看,只是在IPIP的内外层IP头之间多加了一个GRE头,但实际上最大的不同在于——Tunnel不是建立在最终的host上,而是在中间的Router上面。换句话说,GRE Tunnel对于端点hostA和hostB来说,该Tunnel是透明的。
GRE Tunnel发送的包,从hostA发出的包实际上看起来是一个普通的IP包,除了目的地址不直接可达之外。该GRE Tunnel的一端是建立在Router A上,另一端建立在Router B上,所以添加外部IP头是在Router A上面完成的,而去掉外部IP头是在Router B上面完成的,两边端点的host几乎什么都不用做(除了进行路由配置)。
这样设计的结果就在于,IPIP Tunnel是端对端的,通信只能点对点进行,而GRE Tunnel是可以进行多播的。
- 点赞
- 收藏
- 关注作者
评论(0)