交换机数据转发原理
一、交换机分类
交换机按照功能可以分为两类,一类是2层交换机,一类是3层交换机,交换机工资在二层时,具有转发数据的功能。但是现在只生产传统二层交换机的厂商很少,现在大多数都是三层交换机。所谓三层交换机就是既具有数据转发功能,又具有数据路由功能,交换机上边既有转发数据的以太网口,又有路由口。
二、交换机数据转发原理
过程一:
如下图所示,有交换机A和交换机B两个设备,AB的端口1和2分别连接不同的主机,A连接11和22,B连接33和44,如果此时11和33要通信,那么交换机AB是如何转发数据的呢?
首先11肯定会发送数据给自己直连的交换机A的端口1,交换机A的端口1收到数据帧之后,它会执行以下操作:
1、检查数据中是否包含源MAC地址,即交换机A学习主机11的MAC地址,并将11的MAC地和端口1记录在MAC地址表中
2、检查交换机中的MAC地址表,看是否有目标MAC地址,如果没有目标MAC地址的话,它会向交换机A的其他除了端口1之外的所有端口进行广播,即将该数据发给所有端口,如下图所示,将数据广播给2和3端口,此时主机22和交换机B都收到了数据
对于交换机B来讲,它要执行的操作和是交换机A完全一样的:
交换机B学习源MAC地址和端口号,即交换机B学习主机11的MAC地址,并将11的MAC地和端口3记录在MAC地址表中
交换机B查看MAC地址表,看有没有目标地址,如果没有,交换机B向所有端口广播数据帧
对于主机22来讲,它也收到了数据包,此时22会查看数据包的目标mac地址,发现不是自己,就会将该数据包丢弃。
交换机B进行广播之后,主机33和44都收到了数据,同理,主机33接收数据帧,主机44丢弃数据帧。
至此,11和33完成通信,在这个过程中,交换机的MAC地址表中没有需要的条目,交换机通过广播的方式转发了数据帧。
过程二:
经过刚才的过程,交换机A的MAC地址表中有了11的MAC地址,对应的是交换机A的端口1;交换机B的MAC地址表中有了11的MAC地址,对应的是B的端口3,现在第二个过程出现了,主机44想发数据给11,如下图所示,此时数据如何转发呢?
同样的,首先44会把数据发送给自己直连的交换机B的端口2,交换机B的端口2收到该数据。
交换机B在接收到数据帧之后,执行以下操作:
交换机B学习源MAC地址和端口号,即交换机B学习主机44的MAC地址,并将44的MAC地和端口2记录在MAC地址表中
交换机B查看MAC地址表,查看是否有目标地址,此时发现地址表中有目标11的MAC地址,且对应的端口是3,所以单播转发数据到端口3,不在进行广播
交换机A 的端口3收到数据帧之后,同样的执行以下操作:
交换机A学习源MAC地址和端口号,即交换机A学习主机44的MAC地址,并将44的MAC地和端口3记录在MAC地址表中
交换机A查看MAC地址表,查看是否有目标地址,此时发现地址表中有目标11的MAC地址,且对应的端口是1,所以单播转发数据到端口3,不在进行广播
至此11收到44的数据帧,在这个过程中,对于交换机AB来讲,如果MAC地址表中能够准确清晰的找到目标MAC地址,交换机就不会在进行广播,而是采用单播的方式进行传送。
过程三:
最终在主机之间都通信过之后,交换机A和B就学到了所有主机的MAC地址,MAC地址表就变得非常完整了,如下图所示。在地址表完整之后,之后无论是哪两台主机进行通信,交换机执行的都是单播转发。
那么此时还有一个问题,交换机的这个MAC地址表是否会永远存在呢?也就是说一次性学习,永远都不会删除?
对于交换机来讲,当它学完了MAC地址表以后,如果表里的这些MAC地址在300s之内都没有进行过通信,那么交换机就有理由相信可能连在我交换机端口上的这些主机可能已经更换了,也就意味着MAC地址有可能更换掉了,那么在保留这种过期的MAC地址表就没有意义了,所以各个厂商的交换机都明确规定,如果表当中的主机在300s之内都没有过任何通信的话,那么交换机就会清空这张MAC地址表。 300s这个时间允许更改,但不建议。
三、双工模式
单工、全双工、半双工
单工:只有一个信道,传输方向只能是单向的。例如寻呼机
全双工:双信道,同时可以有双向数据传输。例如手机
半双工: 只有一个信道,在同一个时刻,只能是单向传输。例如对讲机
交换机是支持工作在半双工和全双工的。
四、冲突、冲突域、广播域
我们知道在共享传输的模式下,只有一根共享的总线,为了规避冲突,可以使用CSMA/CD算法,但是这种算法效率很低,当冲突很多的时候,光等可能就等死了。为了避免冲突且提高效率,我们可以采用分割冲突域的办法,即我们可以增加总线的数量,使每两台主机之间都可以有一条线路相连,从而将冲突域分割,如下图所示。从而来提高效率。
而在交换机中,默认每一个端口都是一个独立的冲突域,交换机的每个端口访问另一个端口时,都有一条专有的线路,如下图所示,绝对不会产生冲突。同时,交换机默认所有端口都在同一个广播域中。