Layer2-2 交换机转发原理

session 1 Layer2专题课第三天
一、交换机端口MAC地址的作用:
1、区分L2转发和L3转发,当交换机收到主机发来的电信号后,将这串电信号(数据包)串行化成交换机能识别的二进制数(01010101这样的bit),然后查看其中的目的MAC地址的bit位,如果发现目的MAC是未知的或者是记录与CAM表中动态学习到的,那么就是L2转发。如果目的MAC地址是交换机预留地址(一般为逻辑接口地址,比如vlan接口的MAC)那么交换机做L3层转发(交给路由器等,或者本身为三层交换机使用路由功能)。
2、交换机之间的数据发送与接收,由交换机产生的镇L2头部封装的源和目的MAC就是两个交换机接口的MAC

二、L2、L3转发依据和原理,所谓L2层就是指同一网段(广播域),L3层就是指不同网段(不同的广播域)
L2层代表:L2层交换机
L3层代表:PC、路由器、防火墙等
1、L2层转发依据:CAM表,交换机在收到数据包后查看CAM表,目的MAC在表中则单播转发,否则就会除接收口外的其余端口进行flood广播泛红发送。
2、L3层转发依据:FIB+ARP表,路由器或主机在接收到包后查看FIB表,有条目的单播发,没有条目直接丢弃。
 
L2层转发原理(同网段内)

Layer2-2 交换机转发原理_第1张图片

上图为PC向路由器发送数据的转发,中间经过2台来层交换机的过程来展示L2层转发原理。

      第一步、PC封装一个数据包发送给R,在封装L2层头部时因为不知道目的MAC地址导致封装失败,第一个包丢包,不能发送。(PC先查阅了自己的FIB表发现目的ip和自己同网段有路径可以发包)
      第二步、封装失败后自动启动arp协议,发送arp-request查询包,L2层目的MAC是全FFFF的广播,根据PC自己的FIB表(路由表)中的默认路由发送出接口为网卡发送出去,此时交换机SW1接收到这个数据包,第一件事是查看数据帧中的源MAC地址(PC的1.2.3),将地址与接口4的映射学习进CAM表,然后才是查看帧的目的MAC地址,发现全FFFF广播么,首先自己先看一下发现没自己什么事,然后就是除4口以为的接口开始flood,传到了SW2,交换机2跟交换机1一样首先查看数据帧中的源MAC地址,将地址与接口10射学习进CAM表,然后除10以外的接口flood出去,这个arp广播包就被R路由器收到,路由器一看L2层头目的MAC是广播,那好广播地址是允许网络中任何设备进行接收和查看的,那么路由器就拆开L2层查看L3层内容发现L3层arp包头目的ip是自己(1.2)的,一看是个arp知道有人在解析自己的MAC地址,在回复之前路由器会把arp包中的源ip源MAC写入自己的arp表中以备以后发送数据用,然后路由器查看自己的FIB表,发现源ip和自己是同网段的,OK有路径可以回包,R就会回复一个单播的arp-reply响应,L2层头部目的MAC地址封装的是PC的MAC地址,发送出去。第一个接收到的是SW2,SW2第一件事还是学习L2层帧头中的源MAC地址(路由器的MAC)将这个地址与接口12对应的关系写进CAM表中,然后查看目的MAC地址,发现CAM表中有目的MAC与接口10的对应关系,那么从接口10转发出去给了SW1,SW1和SW2一样首先学习L2层帧头中的源MAC地址(路由器的MAC)将这个地址与接口8对应的关系写进CAM表中,然后查看目的MAC地址,发现CAM表中有目的MAC与接口4的对应关系,那么从接口4转发出去给了PC,PC在接收到R发来的arp包后把R的ip和MAC写入自己的arp表中。下次发送数据的时候就可以直接查看FIB表和arp表后封装成完整的数据包后单播的形式直接发给路由器了(因为arp表中已经知道了R的MAC地址,不会再出现封装失败的情况)。
 
L3层转发原理(不同网段)

Layer2-2 交换机转发原理_第2张图片

这个三层拓扑由PC1发送数据包到PC2的过程来展示L3层数据转发原理。
PC1的MAC是1.2.3,ip是192.168.1.1以后简称1.2(2.1就是192.168.2.1)
R1的f0/0接口的MAC是4.5.6,ip是1.1。F0/1接口的MAC是7.8.9,ip是2.1
PC2的MAC是a.b.c,ip是2.2
      首先,PC1将查看自己的FIB+arp,发现FIB表有路由(设置了网关默认路由)而arp表中没有对应的MAC地址,第一个包在L2层头部的时候封装失败。
      第二步、PC1启动arp协议来代替ip协议,将L2层头部封装为源MAC=1.2.3,目的MAC=FFFF,L3层arp头源ip=1.2,目的ip=2.2,从默认路由出口(网卡)发送出去,传向了R1的f0/0接口。
      第三步、路由器R从f0/0接收到了PC1发来的ARP-request广播请求(arp广播是定义要回复的,不丢弃),R先记录PC1的ip+MAC到自己的ARP表中,然后发现PC1请求的MAC地址和PC1并不在同一个网段,那么开启ARP代理功能(不能丢弃就转成单播吧,由自己代理转发好了),回应一个arp-reply给PC1,将L2层头封装为源MAC=4.5.6,目的MAC=1.2.3,L3层头封装为源ip=2.2,目的ip=1.2,回复给PC1。
      第四步、PC1收到这个arp回应后,会将192.168.2.2+4.5.6这个条目放到自己的ARP表中。这时PC1的arp表中就有了PC2的MAC地址(当然这个是路由器F0/0接口的MAC,PC1以为是PC2的MAC),再次发送数据L2层就不会出现没有目的MAC的情况而丢包。假设PC1又发送了一个包给PC2,发送时PC1根据FIB+ARP表内容封装好数据包:L2层头源MAC=1.2.3,目的MAC=4.5.6,L3层头源ip=1.2,目的ip=2.2,发出去被R的f0/0接收到。R的f0/0接收到后发现MAC目的地址拆掉L2层头再看L3层头信息发现目的ip是PC2的,这个包是要给PC2的,只是由自己做个arp代理而已,然后R查找自己的FIB+ARP表,和PC1一样FIB路由表中有条目OK,L3层头封装没问题,再看ARP表中也没有PC2的MAC地址,L2层头的目的MAC又没有办法封装,那也丢包,然后自己也启动arp协议发一个arp请求给PC2,按照套路R发给PC2的arp-request请求包:L2层源MAC=7.8.9(f0/1口的MAC,因为是连接了PC2网段的接口),目的MAC=F.F.F.F,L3层源ip=2.1(路由器f0/1的ip),目的ip=2.2(PC2的ip)。从出口f0/1发出去,由SW1接收。
      第五步、SW1收到R1的arp-request后先把这个包中的源MAC=7.8.9与自己1号口的对应关系写进CAM表中,再看目的MAC=FFFF,一看是广播,那从除1号口以外的接口发出去,被PC2接收到。
      第六步、PC2接到R发来的arp包后先把ip=192.168.2.1+MAC=7.8.9这样的arp信息写入自己的ARP表,然后查看arp包发现是192.168.2.1在请求自己的MAC地址,那么回复一个arp-reply给2.1,L2层封装源MAC=a.b.c 目的MAC=7.8.9,L3层头源ip=2.2(PC自己的ip),目的ip=2.1(R的f0/1口ip)。经过查看FIB+ARP发送出去,被SW1收到,SW1先记录MAC=a.b.c+2号端口写入CAM表中,在查看L2层目的MAC,发现CAM中有目的MAC=192.168.2.1对应了自己的1号口,OK那么由1号口单播发出去,给了R路由器。
      第七步、R路由器的f0/1口收到PC2的arp-reply后将ip=192.168.2.2+MAC=a.b.c条目写入自己的ARP表。这样R中就有了PC1和PC2对应的ARP表项。PC1再发送数据给PC2的时候,PC1查看FIB+ARP表封装包为 L2层源MAC=1.2.3,目的MAC=4.5.6,L3层源ip=1.2,目的ip=2.2,发送出去被R的f0/0口接收。R查看L2层头发现目的MAC是自己,有权限拆掉L2层头,继续往下看L3层头,发现是发往192.168.2.2的,那么查看FIB+ARP表,发现有对应的路由条目和192.168.2.2+a.b.c的arp条目,那么重新封装包 L2层头 源MAC=7.8.9,目的MAC=a.b.c,L3层头 源ip=1.2,目的ip=2.2,通过路由出口发送出去。
      第八步、SW1收到这个包后发现学习过了,然后查看CAM表发现目的MAC在2号口,从2号口发给PC2,PC收到后发现arp学习过了,看包内容是源ip=1.2,源MAC=7.8.9,目的ip和MAC都是自己的,于是处理完数据包后进行回包,PC2查看自己的FIB+ARP表发现有条目,直接封装 L2层 源MAC=a.b.c.,目的MAC=7.8.9,L3层源ip=2.2,目的ip=1.2从网关出口发出去,SW1接收到查看CAM表,后从1口发出去,R的f0/1口接收到发现目的ip=1.2,查看自己的FIB+ARP表发现有条目,封装包 L2层 源MAC=4.5.6,目的MAC=1.2.3,L3层源ip=2.2,目的ip=1.2。然后通过路由出口f0/0口以单播形式发给PC1,这样就是PC1就收到了PC2的数据包完成了一次L3层通信过程。

       这也就是为什么在L3层网络传输有个特性是数据包在传输过程中源MAC,目的MAC会变而源ip、目的ip不变的现象。


你可能感兴趣的:(Layer2-2 交换机转发原理)