什么是GRE

什么是GRE

GRE,全称为 Generic Routing Encapsulation(通用路由封装),是一种用于在网络中封装和传输数据的协议。它通常被用于创建点对点连接,允许将数据包从一个地点封装到另一个地点,跨越不同的网络,而不受底层网络类型或路由协议的限制。

以下是关于GRE 的一些重要特点和用途:

点对点连接:GRE 最常用于建立点对点的虚拟专用网络连接。这些连接可以跨越公共互联网、私有网络或其他类型的网络。

封装协议:GRE 封装数据包,将原始数据包放入GRE头部中,并添加一些控制信息。这使得数据包可以通过GRE隧道进行传输。

路由独立:GRE 是一种无状态协议,不包含路由信息。它仅负责封装和解封装数据包,而不进行路由决策。这使得它可以与各种不同的路由协议一起使用。

支持多种协议:GRE 可以封装各种协议的数据包,包括IPv4、IPv6、IPX、AppleTalk等。这使得它在各种网络环境中都具有灵活性。

点对多点连接:虽然 GRE 最初是为点对点连接设计的,但也可以配置为支持点对多点连接,从而允许一个站点与多个其他站点建立连接。

适用于隧道:GRE 经常与隧道技术一起使用,用于在两个或多个网络之间创建安全的通信通道。这在虚拟专用网络(VPN)和远程访问方面特别有用。

不加密:GRE 自身不提供数据加密功能。如果需要保护数据的机密性,通常需要在GRE隧道上叠加其他加密协议,如IPsec。

总之,GRE 是一种通用的隧道协议,用于在网络中创建虚拟连接,使数据可以在不同网络之间进行传输,而不受网络类型或路由协议的限制。它广泛应用于创建虚拟专用网络、跨越不同网络的通信以及网络隧道等场景。需要注意的是,GRE本身不提供安全性或加密,因此在敏感数据传输中通常需要与其他安全协议结合使用。

gre的实现原理

GRE是一种封装协议,用于在网络中封装和传输数据包。GRE 的实现原理可以概括为以下几个关键步骤:

封装数据包:当一个路由器或设备接收到要传输的数据包时,它会将原始数据包封装在 GRE 头部中。
这包括将原始数据包的内容放入 GRE 封装中,并添加 GRE 头部信息。GRE 头部包含了一些控制字
段,以及一个标识符(通常称为 GRE Key 或 GRE Tunnel ID),用于区分不同的 GRE 隧道。

添加外部封装:在 GRE 头部之上,通常还会添加一个外部封装,通常是 IP 头部。这是为了将 GRE 封
装的数据包传输到远程目标。外部 IP 头部中包括源 IP 地址和目标 IP 地址,以及必要的路由信息。

传输到远程目标:封装后的数据包通过网络传输到远程目标,通常经过多个路由器或交换机,直到到达目标网络。

解封装数据包:在远程目标设备上,GRE 数据包首先被解封装,即 GRE 头部被移除,还原出原始数据包。

交付原始数据包:解封装后的原始数据包被交付到目标设备或目标网络上,继续进行后续处理,比如交付给应用程序或进行路由操作。

需要注意的是,GRE 是一种无状态协议,它不进行路由决策或数据包的加密。因此,GRE 隧道通常用于创建虚拟网络连接或安全通信通道,而数据的路由和安全性通常需要与其他协议结合使用,比如路由协议(如 OSPF 或 BGP)和加密协议(如 IPsec)。

总之,GRE 的实现原理包括封装原始数据包、添加外部封装、传输数据包、解封装数据包和交付原始数据包。它提供了一种有效地在网络中封装和传输数据的方式,适用于多种应用场景,如虚拟专用网络、隧道通信等。

gre报文

gre 头部格式

    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |C|R|K|S|s|Recur|  Flags  | Ver |         Protocol Type         |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |      Checksum (optional)      |       Offset (optional)       |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Key (optional)                        |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                    Sequence Number (optional)                 |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
      |                         Routing (optional)                    |
      +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

这是GRE(Generic Routing Encapsulation)报文头部的详细解析,其中包括每个字段的意义:

C Bit (Checksum Bit):占用1比特。这个比特表示是否包括校验和字段。如果设置为1,表示GRE头部中包含校验和字段,用于校验数据包的完整性;如果为0,表示没有校验和字段。

R Bit (Reserved Bit):占用1比特。这个比特是保留字段,通常设置为0。在标准的GRE头部中,R比特没有特定的用途。

K Bit (Key Bit):占用1比特。这个比特表示是否包括Key字段。如果设置为1,表示GRE头部中包含Key字段,用于标识GRE隧道;如果为0,表示没有Key字段。

S Bit (Sequence Number Bit):占用1比特。这个比特表示是否包括序列号字段。如果设置为1,表示GRE头部中包含序列号字段,用于按顺序传递数据包,以确保数据包的顺序性。

s Bit (Strict Source Route Bit):占用1比特。这个比特表示是否启用了严格的源路由。如果设置为1,表示启用了严格的源路由,Routing字段将被解释为源路由信息;如果为0,表示不启用严格的源路由。

Recur Bits (Recursion Control Bits):占用3比特。这些比特用于递归控制,通常用于多层隧道中。

Flags:占用5比特。这些比特用于各种标志位,可以根据需要设置不同的标志。具体的标志位含义会根据实际用途而有所不同。

Ver (Version):占用3比特。这个字段表示GRE协议的版本,通常设置为0。

Protocol Type:占用16比特。这个字段表示GRE报文封装的协议类型,指示在GRE封装内的原始数据包的协议类型。

Checksum (optional):占用16比特。这是可选字段,用于校验GRE数据包的完整性。如果存在,接收方将使用它来验证数据包是否在传输过程中被损坏。

Offset (optional):占用16比特。这是可选字段,通常用于指示GRE头部后面的字段偏移。这允许GRE头部后面添加其他可选字段,而不影响已有字段的偏移。

Key (optional):占用32比特。这是可选字段,用于标识GRE隧道。如果存在,它将用于识别GRE隧道,以确保GRE数据包被正确解封装。

Sequence Number (optional):占用32比特。这是可选字段,用于按顺序传递数据包,以确保数据包的顺序性。

Routing (optional):可变长度字段,用于包含路由信息。这是可选字段,通常在GRE多播或多点连接中使用,用于指定数据包的路由路径。

具体怎么封装的另一篇关于PPTP的文章有讲解
VPN之PPTP

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写一封情书

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值