DSVPN基本原理

DSVPN实现分支之间直接通信的关键是在分支之间建立隧道。DSVPN利用mGRE结合NHRP来建立分支之间的隧道。与GRE不同,mGRE建立隧道时不需要定义隧道目的地址,而是依赖NHRP告诉它,这就为在动态地址变化的分支间建立隧道创造了条件。

mGRE与NHRP结合建立隧道的基本原理是:当设备转发一个IP报文时,根据路由表将IP报文传给下一跳的出接口mGRE隧道接口,mGRE在NHRP映射表中查找获取下一跳地址映射的对端公网地址。然后mGRE封装IP报文,加上新IP头,目的地址就是对端的公网地址,这样IP报文就能发向隧道对端,隧道即可建立。

可见,NHRP映射表和路由表是mGRE与NHRP结合建立隧道的重要依据。如果一端分支有对端分支Tunnel地址/子网地址与公网地址的NHRP映射、有到对端分支的路由,那么分支间就可建立mGRE隧道。而DSVPN网络开始时,分支Spoke只有一个静态配置的NHRP映射表(Hub的Tunnel地址与公网地址的映射),也只有到总部Hub的路由。因此,分支间无法直接建立隧道,只能先借助Hub学习到彼此的路由、生成彼此Tunnel地址/子网地址与公网地址的NHRP映射。这一过程主要分为如下三个环节:

  1. 建立Spoke与Hub之间的mGRE隧道

    这一环节的目的是打通分支到分支报文转发的通道,使得一端分支的报文可以借助Hub转发到另一端分支。

    DSVPN在Spoke与Hub之间建立的mGRE隧道是一种静态隧道,无论Spoke与Hub间是否有流量经过,该隧道一直存在。

  2. 分支间路由学习

    这一环节的目的是生成一端分支到另一端分支的路由。

  3. 建立Spoke与Spoke之间的mGRE隧道

    这一环节的目的是建立用于分支间直接通信的通道。当一个分支向另一个分支转发数据报文时,如果源Spoke找不到目的Spoke的公网地址,则会触发DSVPN建立Spoke与Spoke之间的mGRE隧道。

    Spoke与Spoke之间建立的mGRE隧道是一种动态隧道,当Spoke与Spoke间有流量通过时,隧道自动保活;当一定周期内没有流量经过时,隧道自动拆除。

Spoke与Spoke之间的mGRE隧道建成后,分支间的数据报文即可通过该隧道直接转发,不再经过Hub中转。

建立Spoke与Hub之间的mGRE隧道

DSVPN网络开始时,总部Hub的NHRP映射表是空表,分支Spoke有一个静态配置的NHRP映射表(Hub的Tunnel地址与公网地址的映射),分支Spoke和总部Hub有到彼此的路由。要建立Spoke与Hub之间的mGRE隧道,总部要生成各分支Tunnel地址/子网地址与公网地址的NHRP映射表,这主要通过分支Spoke向总部Hub进行NHRP注册来实现,其过程如图1所示。

图1 Spoke到Hub的mGRE隧道建立过程

  1. Spoke向Hub注册请求

    管理员在Spoke上手工配置Hub的Tunnel地址和公网地址以后,Spoke将定时向Hub发送NHRP注册请求报文,该报文中包含Spoke的Tunnel地址和公网地址。

  2. Hub向Spoke注册应答

    Hub从NHRP注册请求报文中提取Spoke的Tunnel地址和公网地址(见图1中的红色字体),并生成NHRP映射表,进而建立两者之间的mGRE隧道。

Spoke定时向Hub发送注册消息,这样就使Hub的NHRP映射表在老化时间到来前重新计时,确保分支与总部一直能够维持隧道关系。

分支间路由学习

DSVPN支持两种分支间路由学习方式:

  • 分支间相互学习路由(非shortcut方式)

    采用这种方式时,源分支到目的分支子网的路由下一跳为目的分支的Tunnel地址(见图2中的路由表),每个分支需要学习到所有对端的路由数据。这种情况下,Spoke会消耗大量的CPU和内存资源,对其路由表容量和性能有较高的要求。而实际应用中,Spoke的性能往往较低,能存放的路由数量有限。因此,这种路由学习方式只适用于网络节点较少、路由信息量小的中小型网络。

  • 分支路由汇聚到总部(shortcut方式)

    采用这种方式时,源分支到目的分支子网的路由下一跳为总部的Tunnel地址(见图3中的路由表),Spoke只需存放到Hub的路由。由于Spoke减少了自身的路由数量,所以该路由学习方式适用于那些网络规模大、分支较多的大型网络。

建立Spoke与Spoke之间的mGRE隧道

经过上述两个环节后,各分支已经有到对端分支的路由,但还没有对端分支的Tunnel地址/子网地址与公网地址的NHRP映射表。要建立Spoke与Spoke之间的mGRE隧道,就要借助NHRP协议和学习到的路由来生成NHRP映射表。不同的路由学习方式,分支学习到的路由不同,NHRP映射表的生成过程也不同:

  • 非shortcut方式下,源Spoke可以学习到目的Spoke的Tunnel地址。因此,源Spoke可以直接根据目的Spoke的Tunnel地址来查找目的Spoke的公网地址,生成目的Spoke的Tunnel地址与公网地址的NHRP映射表。
  • shortcut方式下,所有Spoke的路由下一跳全部都是Hub的Tunnel地址,源Spoke无法学习到目的Spoke的Tunnel地址。因此,源Spoke只能根据报文的目的地址来查找目的Spoke的公网地址,生成目的Spoke的子网地址与公网地址的NHRP映射表。

具体过程分别如图2图3所述。

建立Spoke与Spoke之间的mGRE隧道(非shortcut方式)

图2所示为采用非shortcut路由学习方式时Spoke与Spoke之间的mGRE隧道建立过程。

图2 Spoke与Spoke之间的mGRE隧道建立过程(非shortcut方式)

当Spoke1下的用户首次访问Spoke2下的用户时,将触发Spoke1与Spoke2之间建立动态mGRE隧道,隧道建立过程如下:

  1. Spoke1收到其下用户发往Spoke2的数据报文后:
    • 根据报文目的地址(192.168.2.0)在路由表中找到下一跳10.1.1.2(Spoke2的Tunnel地址),但在NHRP映射表中没有查找10.1.1.2对应的公网地址,就默认将该数据报文直接转发给Hub。
    • 构建并向Hub发送NHRP地址解析请求报文,请求10.1.1.2对应的公网地址。
  2. Hub收到Spoke1发送的数据报文和NHRP地址解析请求报文后,将报文通过Hub与Spoke2间的mGRE隧道转发给Spoke2。

  3. Spoke2收到NHRP地址解析请求报文后:

    • 从NHRP地址解析请求报文中提取Spoke1的Tunnel地址和公网地址,并将该信息更新到自己的NHRP映射表中(见图2中的红色字体)。
    • 构建并向Spoke1发送NHRP地址解析应答报文(携带Spoke2的Tunnel地址10.1.1.2和公网地址2.2.2.2)。
  4. Spoke1收到NHRP地址解析应答报文后,从应答报文中提取Spoke2的Tunnel地址和公网地址,更新到自己的NHRP映射表中(见图2中的红色字体),Spoke1与Spoke2之间的动态mGRE隧道随即建立。

    当Spoke1再次收到其下用户发送给Spoke2的数据报文时,Spoke1根据报文目的地址(192.168.2.0)在路由表中找到下一跳10.1.1.2,再根据10.1.1.2在NHRP映射表中找到公网地址2.2.2.2,即可按照公网地址2.2.2.2将此报文进行mGRE封装后直接发送给Spoke2,不再经过总部Hub。

建立Spoke与Spoke之间的mGRE隧道(shortcut方式)

图3所示为采用shortcut路由学习方式时Spoke与Spoke之间的mGRE隧道建立过程。

图3 Spoke与Spoke之间的mGRE隧道建立过程(shortcut方式)

当Spoke1下的用户首次访问Spoke2下的用户时,将触发Spoke1与Spoke2之间建立动态mGRE隧道,隧道建立过程如下:

  1. Spoke1收到其下用户发往Spoke2下用户的数据报文后,根据报文目的地址(192.168.2.0)在路由表中找到下一跳10.1.1.3(Hub的Tunnel地址),并在NHRP映射表中找到10.1.1.3对应的公网地址3.3.3.3(Hub的公网地址),就将数据报文转发给Hub。

  2. Hub收到Spoke1转发的数据报文后:
    • 将此报文通过Hub与Spoke2间的mGRE隧道转发给Spoke2。
    • 检查发现接收和发送数据报文的Tunnel接口属于同一个NHRP域(见nhrp network-id),就构建并向Spoke1发送NHRP重定向报文(携带Hub的Tunnel地址和公网地址,以及需要解析的数据报文的目的地址192.168.2.0)。
  3. Spoke1收到NHRP重定向报文后,构建并向Hub发送NHRP地址解析请求报文(携带Spoke1的Tunnel地址10.1.1.1和公网地址1.1.1.1,以及需要解析的数据报文的目的地址192.168.2.0)。

  4. Hub收到NHRP地址解析请求报文后转发给Spoke2处理。

  5. Spoke2收到NHRP地址解析请求报文后:
    • 从NHRP地址解析请求中提取Spoke1的Tunnel地址和公网地址,并将该信息更新到自己的NHRP映射表中(见图3中的红色字体)。
    • 构建并向Spoke1发送NHRP地址解析应答报文(携带Spoke2的子网地址192.168.2.0、Spoke2的Tunnel地址10.1.1.2和公网地址2.2.2.2)。
  6. Spoke1收到NHRP地址解析应答报文后,从应答报文中提取Spoke2的子网地址和公网地址,更新到自己的NHRP映射表中(见图3中的红色字体),Spoke1与Spoke2之间的动态mGRE隧道随即建立。

    当Spoke1再次收到其下用户发送给Spoke2的数据报文时,Spoke1根据报文目的地址(192.168.2.0)查找NHRP映射表,找到Spoke2的公网地址2.2.2.2,即可根据公网地址2.2.2.2将此报文进行mGRE封装后直接发送给Spoke2,不再经过总部Hub。

当Spoke2下的用户首次访问Spoke1下的用户时,也将触发Spoke2与Spoke1之间建立动态mGRE隧道,其过程类似Spoke1。

想要更多网工专业学习资料,可直接找我领取。(文末领取)

网工学习资源包领取

视频课程(部分示意)

实验拓扑(部分示意)

如果需要系统深入的学习网工知识

↓ 可点赞+关注后通过下列方式领取资料↓

(没有领取门槛,主要是一个个发邮件太麻烦了)

  • 29
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值