GRE vs IPIP Tunneling
Generic Routing Encapsulation (GRE) 和IP-in-IP (IPIP) 是两个相似的隧道机制,但经常混淆。在本文中,我们将介绍它们的运作机制、区别以及何时使用它们。
IPIP
IP-in-IP 听起来就像:一个IP包封装在另一个IP包中。外层报头的协议字段为IPv4为4,IPv6为41。
IPv4与IPv6封装的所有组合在技术上都是可行的,但是有些厂商可能不支持所有组合。. 在Cisco IOS上有三种IPIP封装方法:IPv4/IPv4、IPv6/IPv6和IPv6/IPv4。
Router(config)# interface tun0
Router(config-if)# tunnel mode ?
aurp AURP TunnelTalk AppleTalk encapsulation
cayman Cayman TunnelTalk AppleTalk encapsulation
dvmrp DVMRP multicast tunnel
eon EON compatible CLNS tunnel
gre generic route encapsulation protocol
ipip IP over IP encapsulation
ipsec IPSec tunnel encapsulation
iptalk Apple IPTalk encapsulation
ipv6 Generic packet tunneling in IPv6
ipv6ip IPv6 over IP encapsulation
mpls MPLS encapsulations
nos IP over IP encapsulation (KA9Q/NOS compatible)
rbscp RBSCP in IP tunnel
GRE
GRE (defined in RFC 2784 and updated by RFC 2890) 比IPIP更进一步,在内部和外部IP报头之间添加了自己的附加报头。
GRE报头的长度是可变的,从4字节到16字节不等,这取决于启用了哪些可选特性。
- C, K, and S: Bit flags which are set to one if the checksum, key, and sequence number fields are present, respectively
- Ver: GRE version number (zero)
- Protocol: Ethertype of the encapsulated protocol
- Checksum: Packet checksum (optional)
- Key: Tunnel key (optional)
- Sequence Number: GRE sequence number (optional)
GRE理论上可以使用有效的以太类型封装任何第三层协议, 而IPIP只能封装IP。
GRE在Cisco IOS上 可以 被IPv4或IPv6封装。(The multipoint option is used for DMVPN)
Router(config)# interface tun0
Router(config-if)# tunnel mode gre ?
ip over IP
ipv6 over IPv6
multipoint over IP (multipoint)
默认情况下,只包含一个最小的4字节头。其他GRE选项可以独立地打开或关闭:
Router(config-if)# tunnel ?
bandwidth Set tunnel bandwidth informational parameter
checksum enable end to end checksumming of packets
destination destination of tunnel
flow flow options
key security or selector key
mode tunnel encapsulation method
mpls MPLS tunnel commands
path-mtu-discovery Enable Path MTU Discovery on tunnel
protection Enable tunnel protection
rbscp Set tunnel RBSCP parameters
route-via Select subset of routes for tunnel transport
sequence-datagrams drop datagrams arriving out of order
source source of tunnel packets
tos set type of service byte
ttl set time to live
udlr associate tunnel with unidirectional interface
vrf set tunnel vrf membership
总而言之,GRE可以:
• 封装任何第三层协议(而不只是IP)
• 添加一个额外的校验(这对TCP/IPv4没什么用)
• 指定一个隧道key
• 执行数据包排序( Enforce packet sequencing )
当然,这些特性是以额外的开销为代价的;如果不需要GRE的额外功能,IPIP也可以。