zoukankan      html  css  js  c++  java
  • Lab 利用MPLS解决BGP路由黑洞

    MPLS Topology Lab

    (1)底层配置
    (2)AS 100运行IGP OSPF 100
    (3)AS 100运行LDP
    (4)按拓扑表建立BGP关系
    (5)R1/R6分别通告BGP路由
    (6)R2和R5互相指next-hop-self
    r5#show mpls forwarding-table 10.1.1.1 detail                           
    Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop     
    tag    tag or VC   or Tunnel Id      switched   interface               
    5002   17          10.1.1.0/24       0          Fa0/0.45   45.1.1.4     
            MAC/Encaps=18/22, MRU=1500, Tag Stack{17}                       
            CA030A740000CA040A7400008100002D8847 00011000                   
            No output feature configured                                    
        Per-packet load-sharing                                             

    r5#show mpls forwarding-table 10.1.2.1 detail                           
    Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop     
    tag    tag or VC   or Tunnel Id      switched   interface               
    5002   17          10.1.2.0/24       0          Fa0/0.45   45.1.1.4     
            MAC/Encaps=18/22, MRU=1500, Tag Stack{17}                       
            CA030A740000CA040A7400008100002D8847 00011000                   
            No output feature configured                                    
        Per-packet load-sharing                                             

    r5#show mpls forwarding-table 10.1.3.1 detail                           
    Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop     
    tag    tag or VC   or Tunnel Id      switched   interface               
    5002   17          10.1.3.0/24       0          Fa0/0.45   45.1.1.4     
            MAC/Encaps=18/22, MRU=1500, Tag Stack{17}                       
            CA030A740000CA040A7400008100002D8847 00011000                   
            No output feature configured                                    
        Per-packet load-sharing                                             

    r5#show mpls forwarding-table 2.2.2.2 detail                            
    Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop     
    tag    tag or VC   or Tunnel Id      switched   interface               
    5002   17          2.2.2.2/32        0          Fa0/0.45   45.1.1.4     
            MAC/Encaps=18/22, MRU=1500, Tag Stack{17}                       
            CA030A740000CA040A7400008100002D8847 00011000                   
            No output feature configured                                    
        Per-packet load-sharing                                             

    数据包的目的地址在本地路由表中从BGP学习过来的,它的FEC的分类方式是BGP条目的下一跳地址,所以三个网段10.1.0.0/16的下一跳都是2.2.2.2,即是R4都为该FEC分配一个17的标签值,从而解决了数据黑洞问题
    MPLS-domain路由器转发以BGP条目为目的地的数据包,该路由器会借用bgp条目的下一跳标签来发送该数据包
    BGP的分类原则是找下一跳

    以上的数据从R6(ISP2)发往ISP1在R4中的包结构如下:

    R5:压制标签,查找FIB表
    R4:Swap标签,查找LFIB
    R3:Swap标签,查找LFIB,并为10.1.1.1 分配imp-null标签
    R2:POP标签,查找FIB表


    (7)如图使用R2和R5的物理接口代替loopback口来建立iBGP邻居关系就会发现,此时ISP2和ISP1无法通信
    因为23.1.1.0/24是R3的直连网段,R3则会为其会压imp-null标签,并通告给R4,所以当数据流从ISP2发往ISP1的过程中,R4会提早pop标签,使得在R3路由器上露出包结构中的目的地址10.1.1.1(对于R3来说不可达)
    所以此时R3则查找FIB表,然而R3却没有关于10.1.1.0/24的目的前缀,从而丢弃数据包,造成数据黑洞


    (8)如上图建立IGP关系,并在R4上汇总路由5.0.0.0/8路由条目
    r4(config-router)#area 1 range 5.0.0.0 255.0.0.0
    r3#show mpls forwarding-table 5.5.5.5 detail                            
    Local  Outgoing    Prefix            Bytes tag  Outgoing   Next Hop     
    tag    tag or VC   or Tunnel Id      switched   interface               
    3006   Pop tag     5.0.0.0/8         135        Fa0/0.34   34.1.1.4     
            MAC/Encaps=18/18, MRU=1504, Tag Stack{}                         
            CA030A740000CA020A740000810000228847                            
            No output feature configured                                    
        Per-packet load-sharing                                             

    由上述结果可以知道,汇总之后5.0.0.0汇总条目相当于本地发起,所以R4为其分配imp-null标签,根据倒数第二跳规则,在数据回包过程中,R3将会提前pop标签,使得数据流到达R4时要查找FIB造成172.16.6.6条目不可达而丢弃数据包,形成数据黑洞

    (9)按照第5步完成实验可以使用一下命令发现:
    r6#traceroute                                                   
    Protocol [ip]:                                                  
    Target IP address: 10.1.1.1                                     
    Source address: 172.16.6.6                                      
    Numeric display [n]:                                            
    Timeout in seconds [3]:                                         
    Probe count [3]:                                                
    Minimum Time to Live [1]:                                       
    Maximum Time to Live [30]:                                      
    Port Number [33434]:                                            
    Loose, Strict, Record, Timestamp, Verbose[none]:                
    Type escape sequence to abort.                                  
    Tracing the route to 10.1.1.1                                   
                                                                    
      1 56.1.1.5 80 msec 32 msec 44 msec                            
      2 45.1.1.4 [MPLS: Label 17 Exp 0] 188 msec 92 msec 140 msec   
      3 34.1.1.3 [MPLS: Label 3000 Exp 0] 140 msec 152 msec 200 msec
      4 23.1.1.2 172 msec 124 msec 172 msec                         
      5 12.1.1.1 188 msec *  188 msec                               

    可以返回中间路径的原因是因为,当数据到达R4的时候TTL = TTL - 1 = 0无效,而此时R4无法认知源网络号172.16.6.6,但是R4根据标签信息知道上游设备知道如何对该网段回包,所以其将此时的数据包TTL值设为255,发往R3,直至R2方可对172.16.6.6回包,然而此时的TTL = 252,在R4上打开debug mpls packets命令:
    *Jul 30 22:35:01.363: MPLS: Fa0/0.45: recvd: CoS=0, TTL=1, Label(s)=17   
    *Jul 30 22:35:01.363: MPLS: Fa0/0.34: xmit: CoS=6, TTL=255, Label(s)=3000
    *Jul 30 22:35:01.439: MPLS: Fa0/0.34: recvd: CoS=6, TTL=252, Label(s)=22 
    *Jul 30 22:35:01.439: MPLS: Fa0/0.45: xmit: (no label)                   
    *Jul 30 22:35:01.519: MPLS: Fa0/0.45: recvd: CoS=0, TTL=1, Label(s)=17   
    *Jul 30 22:35:01.519: MPLS: Fa0/0.34: xmit: CoS=6, TTL=255, Label(s)=3000
    *Jul 30 22:35:01.563: MPLS: Fa0/0.34: recvd: CoS=6, TTL=252, Label(s)=22 
    *Jul 30 22:35:01.563: MPLS: Fa0/0.45: xmit: (no label)                   
    *Jul 30 22:35:01.659: MPLS: Fa0/0.45: recvd: CoS=0, TTL=1, Label(s)=17   
    *Jul 30 22:35:01.659: MPLS: Fa0/0.34: xmit: CoS=6, TTL=255, Label(s)=3000
    *Jul 30 22:35:01.735: MPLS: Fa0/0.34: recvd: CoS=6, TTL=252, Label(s)=22 
    *Jul 30 22:35:01.735: MPLS: Fa0/0.45: xmit: (no label)                   
    *Jul 30 22:35:01.799: MPLS: Fa0/0.45: recvd: CoS=0, TTL=2, Label(s)=17   
    *Jul 30 22:35:01.799: MPLS: Fa0/0.34: xmit: CoS=0, TTL=1, Label(s)=3000  

    默认情况下traceroute是每次发送3个相同的探测包的

  • 相关阅读:
    easyui里弹窗的两种表现形式
    如何获得 request, "request.getSession(true).setAttribute("a",a);"与“request.setAttribute("a",a);”区别
    JSTL和EL的区别
    windows下安装多个tomcat服务
    谷歌浏览器控制台使用
    递归和迭代有什么区别?
    left join ,right join ,inner join ,cross join 区别
    sql良好习惯
    添加了一个字段,查询速度突然变慢
    热点账户问题-转
  • 原文地址:https://www.cnblogs.com/cyrusxx/p/12824167.html
Copyright © 2011-2022 走看看