GRE协议

本文深入讲解了通用路由封装协议(GRE)的工作原理及其在IPv4和IPv6网络过渡中的应用。GRE作为一种隧道技术,能够封装多种网络层协议,如IPX、ATM、IPv6、AppleTalk等,实现在异种网络间的透明传输。文章详细解析了GRE报头格式及IPv6overIPv4、IPv4overIPv6隧道的建立过程。

GRE简介
通用路由封装协议GRE(Generic Routing Encapsulation), 它实际上是一种封装协议,提供了将一种协议的报文封装在另一种协议报文中的机制。使报文能够在异种网 络中传输,异种报文传输的通道称为 tunnel (隧道)。
GRE采用了Tunnel(隧道)技术,是VPN(Virtual Private Network)的第三层隧道协议。
对某些网络层协议(如IPX、ATM、IPv6、AppleTalk等)的数据报文进行封装,使报文可以通过GRE隧道透明的传输,解决异种网络的传输问题。

GRE封装后的报文格式
在这里插入图片描述
GRE报头的格式
在这里插入图片描述
GRE头部最小4个字节长度,其后为可选字段,第一个字节中的标志位决定是否存在后面的字段,最大长度为16个字节。
C, K, and S : 分别对应Checksum、Key和Sequence Number字段,置1表示存在相应的字段,否则无此字段。
Ver : GRE版本号(为0),对于PPTP GRE,此字段为1。
Protocol Type : 封装的以太网协议类型(例如IPv4,此处为0x0800,如IPV6,此处为0x86dd)
Checksum : 如果C位为1,此字段包含由GRE头部开始的所有数据的校验和
Key : 如果K位为1,此字段包含秘钥信息
Sequence Number: 如果S位为1,此字段包含GRE数据包的序号

IPv6 over IPv4隧道
在IPv4网络向IPv6网络过渡的初期,IPv4网络已被大量部署,而IPv6网络只是散布在世界各地的一些孤岛。利用隧道技术可以在IPv4网络上创建隧道,从而实现IPv6孤岛之间的互连。在IPv4网络上用于连接IPv6孤岛的隧道成为IPv6 over IPv4隧道。为了实现IPv6 over IPv4隧道,需要在IPv4孤岛的隧道称为IPv6 over IPv4隧道。为了实现IPv6 over IPv4隧道,需要在IPv4网络与IPv6网络交界的边界路由设备商启动IPv4/IPv6双协议栈。
在这里插入图片描述
*边界路由设备启动IPv4/IPv6双协议栈,并配置IPv6 over IPv4隧道。
边界路由设备在收到从IPv6网络侧发来的报文后,如果报文的目的地址不是自身且下一跳出接口为Tunnel接口,就要把收到的IPv6报文作为负载,加上Ipv4报文头,封装成IPv4报文。
*在IPv4网络中,封装后的报文被传递到对端的边界路由设备。
*对端边界路由设备对报文解封装,去掉IPv4报文头,然后将封装后的IPv6报文发送到对端的IPv6网络中。
*其他隧道原理类似

IPv4 over IPv6隧道
在IPv4 Internet向IPv6 Internet过渡后期,IPv6网络被大量部署后,而IPv4网络只是散布在世界各地的一些孤岛。利用隧道技术可以在IPv6网络上创建隧道,从而实现IPv4孤岛的互联,IPv4孤岛能通过IPv6公网访问其他IPv4网络。
在这里插入图片描述

本文参考
https://blog.youkuaiyun.com/zzj244392657/article/details/92620327

GRE 协议栈主要由以下几个部分组成: ### 乘客协议层 这是被 GRE 封装的原始协议,例如 IPv4、IPv6、AppleTalk 等。这些协议的报文会被作为 GRE 封装的净荷进行传输。不同的乘客协议可以根据实际需求选择,以满足不同的网络通信场景。例如,在 IPv6 过渡阶段,IPv6 报文可以作为乘客协议被封装在 GRE 隧道中,通过现有的 IPv4 网络进行传输。 ### GRE 报头层 GRE 报头是 GRE 协议栈的核心部分,最小长度为 4 个字节,其后还有可选字段。GRE 报头包含以下关键信息: - **标志位**:第一个字节中的标志位决定是否存在后面的可选字段。标志位 C、K 和 S 分别对应 Checksum、Key 和 Sequence Number 字段,置 1 表示存在相应的字段,否则无此字段。 - **版本号(Ver)**:通常为 0,对于 PPTP GRE,此字段为 1。 - **协议类型(Protocol Type)**:表示封装的以太网协议类型,例如 IPv4 为 0x0800,IPV6 为 0x86dd。 - **可选字段**:若 C 位为 1,Checksum 字段包含由 GRE 头部开始的所有数据的校验和;若 K 位为 1,Key 字段包含秘钥信息;若 S 位为 1,Sequence Number 字段包含 GRE 数据包的序号。 ### 传输协议层 通常使用 IP 协议作为传输协议。在 GRE 封装过程中,添加 GRE 报头后,会再加上传输协议的报头,形成新的报文进行传输。传输协议报头包含源 IP 地址和目的 IP 地址等信息,用于在网络中路由和传输 GRE 封装后的报文。 以下是一个简单的 GRE 报文格式示例(以最小 4 字节 GRE 报头为例): ```plaintext | 传输协议报头 | GRE 报头 | 乘客协议报文 | | 源 IP 地址 | 标志位 | 乘客协议内容 | | 目的 IP 地址 | 版本号 | | | ... | 协议类型 | | ``` ### 设备驱动层 上层的网络栈通过 `struct net_device_ops` 实例里的回调函数,调用驱动程序来执行各种操作。例如,qdisc 代码调用 `ndo_start_xmit` 将数据传递给驱动程序进行发送。对于大多数硬件设备,都是在保持一个锁时调用 `ndo_start_xmit` 函数 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值