• 文章搜索:
  • 唯快不破

        • 分享到...

        • 新浪微博
        • 腾讯微博
        • 推荐到豆瓣 豆瓣空间
        • 分享到搜狐微博 搜狐微博
        • 分享到QQ空间 QQ空间
        • 分享到腾讯朋友 腾讯朋友
        • 网易微博分享 网易微博
        • 添加到百度搜藏 百度搜藏
        • 转贴到开心网 开心网
        • 转发好友 告诉聊友
    • 推荐
    • 打印
    • 收藏

    看招MTU!!!——高端路由器GRE组网中需要注意的问题

    作者:  |  上传时间:2014-11-26  |  关键字:看招MTU!!!——高端路由器GRE组网中需要注意的问题

    现网中大型企业IDC出口使用GRE隧道连接全国各个分支节点的组网应用越来越广泛,下面就我司高端路由器(CR16000/SR8800/SR8800-X)在该组网下的GRE应用MTU问题进行介绍。

    一、高端路由器GRE隧道使用场景及故障现象

    使用场景:如下图所示,高端路由器作为IDC出口设备,通过GRE隧道经过传输设备连接对端分支节点设备。

    故障现象:从IDC内部设备ping对端设备地址,小包通,大包不通(大于1500字节),从出口路由器SR8800/CR16000 ping对端设备地址大包小包都正常。

    二、问题分析过程

    1GRE报文封装

    由于本端出口路由器与对端设备通过GRE互联,因此设备在将报文转发出去时需要封装GRE头,其中GRE头内层封装原始报文的IP与以太头部,GRE头外部封装了GRE隧道源地址的IP与以太头部,如下图所示:

    2GRE转发过程

    IP报文到达出口设备时,查找路由表发现需要通过GRE隧道转发至对端设备,此时设备将报文送至GRE Tunnel接口,Tunnel接口在报文前封装上GRE头,再封装上外层IPv4头,IPv4头中的源地址为隧道的源端地址,目的地址为隧道的目的端地址。封装后的报文通过GRE隧道到达对端设备时,由于报文目的地址为本地地址,对端设备进行GRE报文解封装,去掉GRE头部后,再进行IPv4转发。

    这个转发过程是正常报文的转发过程,如果需要转发的报文为大包(大于传输设备的MTU),则需要将报文进行分片,才能正常的转发至对端设备。这里就有所区别,首先我司高端路由器都为硬件转发设备,转发时无法对报文进行分片处理,这就带来一个问题,我们分两种情况进行介绍。

    3、故障分析

    当一个大包到达出口路由器时,路由器会将报文完整的转发出去,报文将不能正常转发。

    1)如果此时传输设备的接口MTU小于报文长度大小并且传输设备不支持对报文进行分片的话,该报文将会被传输丢弃,导致转发不通。

    2)如果此时传输设备的接口MTU小于报文长度大小,但是传输设备支持对报文进行分片,这时,传输设备对报文进行分片处理,分片的原理如下图:

    需要分片的报文外层IP头的分片标记位置位:

    报文将会被分片成以下两部分:

    这样的分片报文到达对端设备后,需要重新组合成分片前的报文,才能进行正常的GRE终结以及下一步转发。当设备收到这样的分片报文后,同样会查看外层IP,发现目的IP地址是本身,则进行报文的解封装操作,但是在这个过程中,报文的第二部分解封装IP头后发现并没有IP头中的协议号47的GRE头部,认为报文出错,从而丢弃,使报文无法重组,剩下的第一部分成功解封装的报文载荷部分也丢失部分内容,无法通过校验,从而设备会丢弃该报文。如下图所示:该报文为分片后第2部分报文,IP头中协议号为47即GRE,但是并不存在GRE头。

    三、解决方案

    1、调整传输设备MTU值,使之大于报文大小,这个方法是最简单直接的解决方案,但是需要协调运营商来调整传输设备的MTU值。

    2、在无法调整传输设备MTU值的情况下,可以通过在出口路由器之前进行分片,让报文分片在封装GRE头之前,使报文到达对端后能够正常重组。如下图所示,报文首先将进入防火墙设备进行分片,再进行下一步转发

    分片后的报文为:

    这样的分片报文转发至出口路由器后进行GRE转发,到达对端设备的报文将会是:

    这样,两个分片的报文都具有GRE头,就能够进行正常的解封装IP和GRE操作,以及报文重组。