• 例解三层交换原理


        以下内容摘自笔者最新年度巨作,广受好评的——《深入理解计算机网络书中。本书详细内容及读者评价可从这里了解:http://item.jd.com/11165825.htmlhttp://product.dangdang.com/23166396.html

    另外,笔者最新的网络设备四大金刚京东网、当当网、卓越网、互动出版网等全面热销中,详情点击:http://item.jd.com/11299332.htmlhttp://book.dangdang.com/20130730_aife购买此套装直减30元

    10659021_13805023700Byl.png 10659021_1380502392qOYJ.jpg

        三层交换原理一直是许多读者朋友最难理解的,在日常的读者交流中也经常见到有读者提出这方面的问题,特别是三层交换与路由原理方面的区别与联系。其实三层交换机不仅同时与二层交换和路由有着密切的联系,同时与要依靠三层的ARP协议。下面具体剖析一下三层交换原理。

    7.7.5 三层交换原理

        二层交换机的二层数据交换一般都是使用ASICApplication Specific Integrated Circuit ,专用集成电路)的硬件芯片中的CAM表来实现的,因为是硬件转发,所以转发性能非常高。而三层交换机的三层转发也是依靠ASIC芯片完成的(路由器的路由功能主要依靠CPU软件进行的),但其中除了二层交换用的CAM表外,还保存有专门用于三层转发的三层硬件转发表。

    三层交换机的三层交换原理比较复杂,不同网络环境下、不同厂家的三层交换机的三层交换流程都不完全相同。如图7-55所示的仅一个直接连接在一台三层交换机上的两个不同网段主机三层交换的基本流程,各主要步骤解释如下:

    1源主机在发起通信之前,将自己的IP地址与目的主机的IP地址进行比较,如果源主机判断目的主机与自己位于不同网段时,它需要通过网关来递交报文的,所以它首先需要通过一个ARP请求报文获取网关的MAC地址(在源主机不知道网关MAC地址的情形下),即源主机先发送ARP请求帧以获取网关IP地址对应的MAC地址。

    2)网关在收到源主机发来的ARP请求报文后以一个ARP应答报文进行回应,在应答报文中的“源MAC地址”就包含了网关的MAC地址。

    3)在得到网关的ARP应答后,源主机再用网关MAC地址作为报文的“目的MAC地址”,以源主机的IP地址作为报文的“源IP地址”,以目的主机的IP地址作为“目的IP地址”,先把发送给目的主机的数据发给网关。

    10659021_1380502195ppPe.jpg

     

     

    图7-55 三层交换基本流程

    (4)网关在收到源主机发送给目的主机的数据后,由于查看得知源主机和目的主机的IP地址不在同一网段,于是把数据报上传到三层交换引擎(ASIC芯片),在里面查看有无目的主机的三层转发表。

    (5)如果在三层硬件转发表中没有找到目的主机的对应表项,则向CPU请求查看软件路由表,如果有目的主机所在网段的路由表项,则还需要得到目的主机的MAC地址,因为数据包在链路层是要经过帧封装的。于是三层交换机CPU向目的主机所在网段发送一个ARP广播请求包,以获得目的主机MAC地址。

    (6)交换机获得目的主机MAC地址后,向ARP表中添加对应的表项,并转发由源主机到达目的主机的灵气包。同时三层交换机三层引擎会结合路由表生成目的主机的三层硬件转发表。

        以后到达目的主机的数据包就可以直接利用三层硬件转发表中的转发表项进行数据交换,不用再查看CPU中的路由表了。

    以上流程适用位于不同VLAN(网段)中的主机互访时属于这种情况,这时用于互连的交换机作三层交换转发。这就是“一次路由,多次交换”的原理。

    7.7.6 三层交换示例

        在三层交换中,同一交换机上的不同网段主机通信和不同交换机上的不同网段主机通信的基本原理是一样的,只是具体流程有所区别。本节仅以比较简单的“同一交换机上的不同网段主机通信”这种情形来解释上节介绍的三层交换原理。

    如图7-56所示,通信的源、目的主机连接在同一台三层交换机上,但它们位于不同VLAN(也位于不同网段)。对于三层交换机来说,这两台主机都位于它的直连网段内,它们的IP对应的路由都是直连路由。图中已标明了两台主机的MAC地址、IP地址、网关IP地址(也就是对应VLAN接口IP地址),以及三层交换机的MAC地址。

        【说明】本示例中虽然划分了VLAN,但是在下面的数据转发流程中我们并没有提到VLAN标记,那是因为在本示例中,通信双方主机都连接到同一个三层交换机上,端口类型均为Access类型,发送和接收的数据帧都是无VLAN标记的。在下节介绍的示例中,在数据的转发过程中将会涉及到VLAN标记问题。

    10659021_1380502213ix99.jpg

     

     

    图7-56 同一交换机上不同网段主机间的三层交换示例

         当PC A要第一次PC B发向数据包时,数据包的传输流程如下:(假设三层交换机上当前还未建立任何硬件转发表项)

        (1)PC A首先检查出目的IP地址2.1.1.2(PC B)与自己不在同一网段,觉得就这样直接发送肯定不行,于是把要发送的数据包先缓存起来。它知道这个数据包必须经过网关来转发,所以先查看一下自己是已经知道网关的MAC地址(也就是在PC A主机的ARP表中查看是否有与网关IP地址对应的MAC地址表项)。如果有,则直接把要发送给PC B的数据包在封装成数据帧时,把“目的MAC地址”字段的值设为网关的MAC地址(也就是三层交换机的MAC地址MAC S,交换机上各端口、各VLAN是共享一个或多个MAC地址的)。

        (2)如果PC A在自己的ARP表中没有找到网关MAC地址,则先向网关发出(其实是会向本VLAN内所有节点发出)一个ARP广播请求报文,以获取网关IP地址1.1.1.1所对应的MAC地址。此ARP请求报文的“源MAC地址”字段是PC A的MAC地址“MAC A”,“目的MAC地址”因为未知,以全0格式填充;“源IP地址”和“目的IP地址”字段分别填上PC A的IP地址(1.1.1.2)和网关的IP地址(1.1.1.1)。

        ARP请求报文向下传输到了以太网数据链路层后被再次封装成以太网帧,以太网帧头中的“源MAC地址”字段值仍为PC A的MAC地址“MAC A”,“目的MAC地址”字段值为广播MAC地址FF-FF-FF-FF-FF-FF以,“帧类型”字段填上ARP的协议号0x0806。有关ARP报文和ARP帧格式参见本章7.3.10节。

        (3)三层交换机在收到PC A发来的ARP请求报文后,检查请求报文发现被请求IP地址(也就是“目的IP地址”)是自己的三层接口IP地址,于是向PCA A发回一个ARP应答报文,并将对应的三层接口MAC(MAC S)填充在应答报文中的“目的MAC地址“字段其中。同时通过对PC A发送的ARP请求报文分析,把PC A的IP地址与MAC地址对应关系(1.1.1.2<==>MAC A)记录到自己的ARP表中去,然后把PC AIP地址(作为“目的IP地址”)、MAC地址(作为“下一跳MAC地址”),以及与交换机直接相连的端口号等信息下发到三层交换机ASIC芯片中的三层硬件转发表。此时在三层硬件转发表中就有了第一个转发表项,即PC A的转发表项。

        【说明】在三层交换机中,最关键的就是它有一个专门用于三层转发的三层硬件转发表,它和“ARP之间有联系,但也有区别。ARP表中只是IP地址和MAC地址的映射关系,不包括转发出口,也不包括对应的VLAN ID,而三层硬件转发表中则包括了全部这些,形成一个:目的IP地址、VLAN ID、端口和下一跳MAC地址的关系表项。因为在进行三层转发时,改变的是帧封装后的源和目的MAC地址这两个字段,原来输入IP包中的“目的MAC地址”作为转发的“下一跳MAC地址”,原来的“源MAC地址”改为三层交换机自身的MAC地址,源和目的IP地址都不变(因为这是封装在帧的“数据”部分)。另外,三层转发表是存储在ASCI硬件芯片上的,直接由ASIC芯片调用,而ARP表是存储在内在中,由CPU软件调用。但三层硬件转发表项还是由CPU提供的。

        (4)PC A在收到网关的ARP应答报文后,把要发送给PC B的数据包经过帧封装后的 “目的MAC地址”修改为网关MAC地址(MAC S1),其它不变,先把数据包发给网关(三层交换机)。

        (5)三层交换机在收到这个数据包后,因为“目的MAC地址”为交换机自己的MAC地址,而且“目的IP地址”和“源IP地址”不在同一网段,所以会直接提交到负责三层交换的ASIC芯片,根据包中的“目的IP地址”(PC BIP地址2.1.1.2)在三层硬件转发表中查看有无对应表项,因为是第一次通信,所以结果是查找失败,于是将数据包再转送到CPU去进行软件路由处理。

        (6)CPU同样会根据包中的“目的IP地址”去查找其软件路由表,发现匹配了一个直连网段(PC B对应的网段),于是继续查在ARP表中查找对应的MAC地址项。同样是由于是第一次查找,所以仍然查找失败。如果在ARP表中找到了对应的MAC地址,则数据可以直接由软件路由表转发了。

        (7)下面仍以在ARP表中也没找到PC B对应的MAC地址为例进行介绍。此时三层交换机CPU会在PC B所在网段的AN 3中所有端口发送一个ARP广播请求报文,查找“目的IP地址”为2.1.1.2所对应MAC地址。报文经过帧封装后的“源MAC地址”是三层交换机的MAC地址(MAC S),“目的MAC地址”全为0,“源IP地址”是VLAN 3网段的网关IP地址(2.1.1.1),“目的IP地址”是PC BIP地址(2.1.1.2)。

        (8)PC B在收到三层交换机CPU发送的ARP请求报文后,检查发现被请求的IP地址是自己的IP地址,于是发送一个ARP应答报文,并将自己的MAC地址(MAC B)包含在其中。同时,将三层交换机上VLAN 3网段的网关IP地址与MAC地址的对应关系(2.1.1.1<==>MAC S)记录到自己的ARP表中去。

        (9)三层交换机CPU在收到PC B的ARP应答报文后,将其IP地址和MAC地址对应关系(2.1.1.2<==>MAC B)记录到自己的ARP表中去,把PC BIP地址、MAC地址、进入交换机的端口号等信息下发到三层交换机的三层转发中。此时转发表中就有到达PC APC B这两条对应的表项了。

        (10)三层交换机CPU根据获得的PC BMAC地址和端口信息,以及软件路由表信息,把由PC A发来的IP数据包转发给PC B,这样就完成了PC APC B的第一次单向通信。

        由于芯片内部的三层引擎中已经保存了从PC A到达PC B的完整转发路径信息,所以以后PC APC B之间进行通信,或其它网段的站点想要与PC APC B进行通信时,三层交换机的ASIC芯片就会直接把包从对应的三层硬件转发表项中指定的端口转发出去,而不必再把包交给CPU进行路由处理。这就是所谓的“一次路由(指通过CPU路由表查到了对应的直连网段),多次交换的原理,大大提高了转发速度。

  • 相关阅读:
    Django各个文件中常见的模块导入
    js模板(template.js)实现页面动态渲染
    Netty 源码 Channel(一)概述
    Netty 源码 NioEventLoop(三)执行流程
    Netty 源码(一)Netty 组件简介
    Netty 源码(二)NioEventLoop 之 Channel 注册
    Java 算法(一)贪心算法
    Netty Reator(三)Reactor 模型
    Netty Reator(二)Scalable IO in Java
    Reactor 模型(一)基本并发编程模型
  • 原文地址:https://www.cnblogs.com/riasky/p/3360771.html
Copyright © 2020-2023  润新知