zoukankan      html  css  js  c++  java
  • 三层交换示例

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

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

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

      

      当 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 A的IP地址(作为“目的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 B的IP地址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 B的IP地址(2.1.1.2)。
    8. PC B在收到三层交换机CPU发送的ARP请求报文后,检查发现被请求的IP地址是自己的IP地址,于是发送一个ARP应答报文,并将自己的MAC地址(MAC B)包含在其中。同时,将三层交换机上VLAN 3网段的网关IP地址与MACo地址的对应关系(2.1.1.1<==>MAC S)记录到自己的ARP表中去。
    9. 三层交换机CPU在收到PC B的ARP应答报文后,将其IP地址和MAC地址对应关系(2.1.1.2<==>MAC B)记录到自己的ARP表中去,把PC B的IP地址、MAC地址、进入交换机的端口号等信息下发到三层交换机的三层转发中。此时转发表中就有到达PC A和PC B这两条对应的表项了。
    10. 三层交换机CPU根据获得的PC B的MAC地址和端口信息,以及软件路由表信息,把由PC A发来的IP数据包转发给PC B,这样就完成了PC A到PC B的第一次单向通信

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

  • 相关阅读:
    用Java求两个字符串所有的公共子序列
    Windows系统上安装logstash和logstash-input-jdbc
    Linux下zip文件的压缩和解压命令
    Linux-root用户下新建用户及为新用户配置密码
    Linux下查看是否安装jdk的命令
    使用git clone命令报错:error: RPC failed; curl 18 transfer closed with outstanding read data remaining
    SCP not a regular file
    常用正则表达式
    Android Wear 兼容
    git diff 配置 meld diff
  • 原文地址:https://www.cnblogs.com/yyxianren/p/10683219.html
Copyright © 2011-2022 走看看