zoukankan      html  css  js  c++  java
  • 2.2【基本路由原理】三层转发原理4

    三层转发原理

    1.二层设备查的是MAC地址表,三层设备查的是路由表;
    如果在路由表里面有多条路由,怎么转发?
    最长匹配原则;通过最长匹配可以找到下一跳,如果下一跳并不是直连网段,还需要根据下一跳查直连网段,直到找到直连网段,这种方法叫做迭代或者递归。
     
    RIB->控制层面(路由条目的收敛和维护)FIB->转发;FIB表是有RIB表生成的。
     
    设备分为盒式和框式的
     
     盒式设备:控制层面和转发层面在一起的,统称为集中式设备;
    框式设备:MPU-主控板 ,用于控制层面的处理 ;
      LPU-接口板用于转发;一个IP包来了以后,可以直接查接收板卡的FIB表项,通过FIB表直接转发,减轻 控制层面的压力
     
    2.FIB表
    FIB表里面,掩码长度从大到小对IP包进行排序;减轻查表的压力和速度;FIB表是关联邻接表的
    (show adjac ency),通过查一张表实现IP包的快速转发。
    所以,在FIB表里面,有目的MAC,源MAC,以太类型。
     
    *******************************************************************************
    AD管理距离
    直连网段
     
    EIGRP有3个AD值;协议优先级
    在什么情况下需要比较AD值?
    如果同一条路由通过多种路由协议学习,需要比较AD值选出最优的一条
    是有RIB来选的决定谁最优;
     OSPF-110; EIGRP-90;
    RIB表项会选取AD值小的路由条目;
     
    *****************************************************************************
    Metric值,度量值-距离产生的时间,时间最短的一个。
    什么情况下才需要比较度量值?
    如果同一条路由通过同一种路由协议的不同邻居学到,需要比较metric值,优选metric值
     [AD/ME]
    例子:都是通过EIGRP学到的,比较metric是由路由协议来选的,路由器A通过同一种路由协议,不同的邻居,收到同一条路由条目,A需要算,哪个邻居到达目标哪个最短最优。B到达,100,C到达,1000,B胜出;
     
    metric是通过综合带宽来算的;带宽越大,cost值越小;
     
    IP包转发只看路由表做最长匹配;和AD/METRIC值没有任何关系
     
    作业:【综合实验】
    PC1想访问PC4的报文转发过程?
    PC1/PC2/PC3/PC4能收到哪些报文?
    物理层设备
    数据链路层设备
    网络层设备
     
    1.PC1->PC4
    第一个包:ARP包:PC1发送的ARP请求,  请求路由器0接口的MAC地址。
    PC1/PC4不在同一网段(路由器每一个接口处于不同的广播域,广播是不能跨网段的,在路由器接口终止;每一个接口都是不同的网段),之间是不可能二层可达的,要通过三层转发;
    (看是否在同一网段:做一个与运算,用自己的接口掩码和目标IP地址做一个与运算);
    通过与运算,网络位与自己一样,处于同一网段;网络位与自己不一样,处于不同的网段;
    如果在同一网段,是可以直接二层转发互通的;如果在不同网段就需要查路由表,看有没有到达目标网段的路由;
    PC1网关的地址——路由器0口的地址;通过查表可以得到一跳默认路由;可以匹配默认路由;
    再看,默认路由的下一跳是路由器0的IP地址;
    所以,把包给网关,看有没有到达网关的MAC。
     
    第二步:HUB泛洪
    广播报文,HUB是物理层设备,看不到数据链路层的MAC地址的,HUB收到电信号以后,会泛洪处理,从2、3口发出去,PC2是可以收到ARP请求的
     
    第三步:交换机泛洪
    信号被交换机收到,交换机收到会根据目的MAC查MAC地址表;由于现在交换机的MAC地址表是空的,交换机会做一个数据帧的泛洪;泛洪会从2口和3口发出去,同时将源MAC地址绑定到1口上面;PC3会收到ARP请求。
     
    第四步:路由器0口收到交换机3口的ARP请求
    由于数据帧的MAC地址是个广播MAC,通过二层是无法分析是给谁的?需要拆了2层看上层协议,发现是一个ARP协议,交给ARP进程处理,发现ARP报文里面的目标地址是自己接口的IP,说明ARP请求是发给自己的;路由器会回送一个ARP的应答,同时将发送源的IP地址和MAC地址绑定到ARP表里面;
     
    ARP应答到SW,由于目的MAC已经绑定到1口上了,会做一个转发而非泛洪;
     
    在路由器里面会生成一个ARP表项,去绑定发送源的IP地址和MAC地址;
     
    第五步:路由器回送给PC1的单播ARP应答
    源MAC:路由器接口的MAC
    目的MAC:PC1的MAC
     
    这个报文PC3收不到,回复报文因为HUB,PC2PC1可以收到
     
    第六步:经过这个过程PC1就获取到了网关的MAC地址,下面就可以封装一个ICMP报文,PC1发送给PC4的ICMP报文:
       二层:DMAC=网关(路由器0口) SMAC=PC1 E-TYPE=0x0800
       三层:源IP=PC1   目的IP=PC4   Protocol id=1 (ICMP)
        ICMP:type=8   code=0
     
    HUB泛洪,PC2可以收到这个报文; 交换机会做转发,因为SW收到路由器的单播应答时,源MAC已经绑定到3口了;是直接转发而不是泛洪。
     
    第七步:数据帧会被路由器收到,checksum检查报文完整性;
                   看数据帧目标 MAC地址是不是自己的MAC;
                    拆了2层看3层,需要通过三层转发,获取到目标的IP地址,根据IP地址查本地的路由表项,找到路由表,找到出接口,找到下一跳;
                    能找到一个直连的路由,找到一个出接口;转发IP包,
                    找到一个直连的路由,重写二层需要获取到目的IP的MAC地址,路由器会查自己ARP表项,看ARP表项里面是否有目的IP的MAC?
                    没有的话,发送ARP请求,获取MAC;
                     ??!!!
    PC1发送一次ARP请求,路由器也会发送一次ARP请求
     
    第八步:路由器向PC4发送ARP请求,这个请求报文只有PC4能收到
     
    PC4会回复ARP应答,同时在本地ARP表项里面去绑定网关和MAC地址的对应关系
     
    第九步PC4 向路由器发送的ARP应答
      生成ARP的绑定表,绑定PC4和MAC地址
     
    因为路由器需要先查再转发,这个ICMP报文会被路由器丢弃掉,PC1会继续发ICMP请求报文
     
    第十步:PC1向PC4的ICMP请求
    路由器收到以后拆了2层看3层,通过目标IP地址进行查表转发;现在有了目标地址的MAC,可以重新写二层发给PC4
     
    PC2PC4可以收到
     
    第十一步:PC4回送一个ICMP应答
    PC4->PC1
       二层:DMAC=网关(路由器1口) SMAC=PC4   E-TYPE=0x0800
       三层:源IP=PC4  目的IP=PC1  Protocol id=1 (ICMP)
        ICMP:type=0  code=0
    这个报文会被路由器收到,路由器也是拆了2层看3层,从0口发出去,并且重写二层
    重写二层:源MAC=路由器0口的MAC地址;
                             目标MAC=PC1的MAC地址;
     
    PC2照样可以收到
     
    一共发了7个报文,PC2都可以收到;
     
    经过路由器,要重写二层
     
    每一个报文的报文结构要写出来,作业案例要求发给我
     
    PC1/PC2/PC3/PC4能收到哪些报文?
     
     
     
     
     
     
     
     
     
     

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">





  • 相关阅读:
    Eclipse
    文件递归查找
    BeanFactory 和 AppliactionContext的区别?
    文件上传
    Servlet路径的使用
    FileInputStream和FileOutputStream文件复制
    CentOS 7安装Nginx
    C语言程序设计100例之(6):数字反转
    C语言程序设计100例之(5):分解质因数
    C语言程序设计100例之(4):水仙花数
  • 原文地址:https://www.cnblogs.com/xuxaut-558/p/11168942.html
Copyright © 2011-2022 走看看